| 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 |
| $ 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 |
| |