git-p4import(1)
===============

NAME
----
git-p4import - Import a Perforce repository into git


SYNOPSIS
--------
`git-p4import` [-q|-v] [--notags] [--authors <file>] [-t <timezone>] <//p4repo/path> <branch>

`git-p4import` --stitch <//p4repo/path>

`git-p4import`


DESCRIPTION
-----------
Import a Perforce repository into an existing git repository.  When
a <//p4repo/path> and <branch> are specified a new branch with the
given name will be created and the initial import will begin.

Once the initial import is complete you can do an incremental import
of new commits from the Perforce repository.  You do this by checking
out the appropriate git branch and then running `git-p4import` without
any options.

The standard p4 client is used to communicate with the Perforce
repository; it must be configured correctly in order for `git-p4import`
to operate (see below).


OPTIONS
-------
-q::
	Do not display any progress information.

-v::
        Give extra progress information.

\--authors::
	Specify an authors file containing a mapping of Perforce user
	ids to full names and email addresses (see Notes below).

\--notags::
	Do not create a tag for each imported commit.

\--stitch::
	Import the contents of the given perforce branch into the
	currently checked out git branch.

\--log::
	Store debugging information in the specified file.

-t::
	Specify that the remote repository is in the specified timezone.
	Timezone must be in the format "US/Pacific" or "Europe/London"
	etc.  You only need to specify this once, it will be saved in
	the git config file for the repository.

<//p4repo/path>::
	The Perforce path that will be imported into the specified branch.

<branch>::
	The new branch that will be created to hold the Perforce imports.


P4 Client
---------
You must make the `p4` client command available in your $PATH and
configure it to communicate with the target Perforce repository.
Typically this means you must set the "$P4PORT" and "$P4CLIENT"
environment variables.

You must also configure a `p4` client "view" which maps the Perforce
branch into the top level of your git repository, for example:

------------
Client: myhost

Root:   /home/sean/import

Options:   noallwrite clobber nocompress unlocked modtime rmdir

View:
        //public/jam/... //myhost/jam/...
------------

With the above `p4` client setup, you could import the "jam"
perforce branch into a branch named "jammy", like so:

------------
$ mkdir -p /home/sean/import/jam
$ cd /home/sean/import/jam
$ git init-db
$ git p4import //public/jam jammy
------------


Multiple Branches
-----------------
Note that by creating multiple "views" you can use `git-p4import`
to import additional branches into the same git repository.
However, the `p4` client has a limitation in that it silently
ignores all but the last "view" that maps into the same local
directory.  So the following will *not* work:

------------
View:
        //public/jam/... //myhost/jam/...
        //public/other/... //myhost/jam/...
        //public/guest/... //myhost/jam/...
------------

If you want more than one Perforce branch to be imported into the
same directory you must employ a workaround.  A simple option is
to adjust your `p4` client before each import to only include a
single view.

Another option is to create multiple symlinks locally which all
point to the same directory in your git repository and then use
one per "view" instead of listing the actual directory.


Tags
----
A git tag of the form p4/xx is created for every change imported from
the Perforce repository where xx is the Perforce changeset number.
Therefore after the import you can use git to access any commit by its
Perforce number, e.g. git show p4/327.

The tag associated with the HEAD commit is also how `git-p4import`
determines if there are new changes to incrementally import from the
Perforce repository.

If you import from a repository with many thousands of changes
you will have an equal number of p4/xxxx git tags.  Git tags can
be expensive in terms of disk space and repository operations.
If you don't need to perform further incremental imports, you
may delete the tags.


Notes
-----
You can interrupt the import (e.g. ctrl-c) at any time and restart it
without worry.

Author information is automatically determined by querying the
Perforce "users" table using the id associated with each change.
However, if you want to manually supply these mappings you can do
so with the "--authors" option.  It accepts a file containing a list
of mappings with each line containing one mapping in the format:

------------
    perforce_id = Full Name <email@address.com>
------------


Author
------
Written by Sean Estabrooks <seanlkml@sympatico.ca>


GIT
---
Part of the gitlink:git[7] suite

