mirror of
https://github.com/git/git.git
synced 2024-11-06 17:23:00 +01:00
166 lines
4.6 KiB
Text
166 lines
4.6 KiB
Text
|
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 their 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
|
||
|
|