You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
165 lines
4.6 KiB
165 lines
4.6 KiB
git-p4import(1) |
|
=============== |
|
|
|
NAME |
|
---- |
|
git-p4import - Import a Perforce repository into git |
|
|
|
|
|
SYNOPSIS |
|
-------- |
|
`git-p4import` [-q|-v] [--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). |
|
|
|
\--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, eg. 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 (eg. 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 |
|
|
|
|