mirror of
https://github.com/git/git.git
synced 2024-10-31 06:17:56 +01:00
ada7781dc3
P4import currently creates a git tag for every commit it imports. When importing from a large repository too many tags can be created for git to manage, so this provides an option to shut that feature off if necessary. Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
168 lines
4.6 KiB
Text
168 lines
4.6 KiB
Text
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, 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
|
|
|