1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
\r
2 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
\r
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
\r
5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
\r
6 <meta name="generator" content="AsciiDoc 7.0.2" />
\r
7 <style type="text/css">
\r
9 p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {
\r
11 border: 1px solid red;
\r
16 margin: 1em 5% 1em 5%;
\r
20 a:visited { color: fuchsia; }
\r
34 h1, h2, h3, h4, h5, h6 {
\r
36 font-family: sans-serif;
\r
38 margin-bottom: 0.5em;
\r
43 border-bottom: 2px solid silver;
\r
46 border-bottom: 2px solid silver;
\r
56 border: 1px solid silver;
\r
61 margin-bottom: 0.5em;
\r
71 font-family: sans-serif;
\r
78 font-family: sans-serif;
\r
82 font-family: sans-serif;
\r
84 border-top: 2px solid silver;
\r
90 padding-bottom: 0.5em;
\r
94 padding-bottom: 0.5em;
\r
98 div.tableblock, div.imageblock, div.exampleblock, div.verseblock,
\r
99 div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
\r
100 div.admonitionblock {
\r
103 margin-bottom: 1.5em;
\r
105 div.admonitionblock {
\r
107 margin-bottom: 2.5em;
\r
110 div.content { /* Block element content. */
\r
114 /* Block element titles. */
\r
115 div.title, caption.title {
\r
116 font-family: sans-serif;
\r
120 margin-bottom: 0.5em;
\r
126 td div.title:first-child {
\r
129 div.content div.title:first-child {
\r
132 div.content + div.title {
\r
136 div.sidebarblock > div.content {
\r
137 background: #ffffee;
\r
138 border: 1px solid silver;
\r
142 div.listingblock > div.content {
\r
143 border: 1px solid silver;
\r
144 background: #f4f4f4;
\r
148 div.quoteblock > div.content {
\r
149 padding-left: 2.0em;
\r
151 div.quoteblock .attribution {
\r
155 div.admonitionblock .icon {
\r
156 vertical-align: top;
\r
159 text-decoration: underline;
\r
161 padding-right: 0.5em;
\r
163 div.admonitionblock td.content {
\r
164 padding-left: 0.5em;
\r
165 border-left: 2px solid silver;
\r
168 div.exampleblock > div.content {
\r
169 border-left: 2px solid silver;
\r
173 div.verseblock div.content {
\r
177 div.imageblock div.content { padding-left: 0; }
\r
178 div.imageblock img { border: 1px solid silver; }
\r
179 span.image img { border-style: none; }
\r
183 margin-bottom: 0.8em;
\r
188 font-style: italic;
\r
190 dd > *:first-child {
\r
195 list-style-position: outside;
\r
198 list-style-type: lower-alpha;
\r
201 div.tableblock > table {
\r
202 border-color: #527bbd;
\r
206 font-family: sans-serif;
\r
215 margin-bottom: 0.8em;
\r
218 vertical-align: top;
\r
219 font-style: italic;
\r
220 padding-right: 0.8em;
\r
223 vertical-align: top;
\r
227 div#footer-badges { display: none; }
\r
229 include::./stylesheets/xhtml11-manpage.css[]
\r
230 /* Workarounds for IE6's broken and incomplete CSS2. */
\r
232 div.sidebar-content {
\r
233 background: #ffffee;
\r
234 border: 1px solid silver;
\r
237 div.sidebar-title, div.image-title {
\r
238 font-family: sans-serif;
\r
241 margin-bottom: 0.5em;
\r
244 div.listingblock div.content {
\r
245 border: 1px solid silver;
\r
246 background: #f4f4f4;
\r
250 div.quoteblock-content {
\r
251 padding-left: 2.0em;
\r
254 div.exampleblock-content {
\r
255 border-left: 2px solid silver;
\r
256 padding-left: 0.5em;
\r
259 <title>git-p4import(1)</title>
\r
264 git-p4import(1) Manual Page
\r
267 <div class="sectionbody">
\r
269 Import a Perforce repository into git
\r
274 <div class="sectionbody">
\r
275 <p><tt>git-p4import</tt> [-q|-v] [--authors <file>] [-t <timezone>] <//p4repo/path> <branch></p>
\r
276 <p><tt>git-p4import</tt> --stitch <//p4repo/path></p>
\r
277 <p><tt>git-p4import</tt></p>
\r
279 <h2>DESCRIPTION</h2>
\r
280 <div class="sectionbody">
\r
281 <p>Import a Perforce repository into an existing git repository. When
\r
282 a <//p4repo/path> and <branch> are specified a new branch with the
\r
283 given name will be created and the initial import will begin.</p>
\r
284 <p>Once the initial import is complete you can do an incremental import
\r
285 of new commits from the Perforce repository. You do this by checking
\r
286 out the appropriate git branch and then running <tt>git-p4import</tt> without
\r
288 <p>The standard p4 client is used to communicate with the Perforce
\r
289 repository; it must be configured correctly in order for <tt>git-p4import</tt>
\r
290 to operate (see below).</p>
\r
293 <div class="sectionbody">
\r
300 Do not display any progress information.
\r
308 Give extra progress information.
\r
316 Specify an authors file containing a mapping of Perforce user
\r
317 ids to full names and email addresses (see Notes below).
\r
325 Import the contents of the given perforce branch into the
\r
326 currently checked out git branch.
\r
334 Store debugging information in the specified file.
\r
342 Specify that the remote repository is in the specified timezone.
\r
343 Timezone must be in the format "US/Pacific" or "Europe/London"
\r
344 etc. You only need to specify this once, it will be saved in
\r
345 the git config file for the repository.
\r
349 <//p4repo/path>
\r
353 The Perforce path that will be imported into the specified branch.
\r
361 The new branch that will be created to hold the Perforce imports.
\r
367 <div class="sectionbody">
\r
368 <p>You must make the <tt>p4</tt> client command available in your $PATH and
\r
369 configure it to communicate with the target Perforce repository.
\r
370 Typically this means you must set the "$P4PORT" and "$P4CLIENT"
\r
371 environment variables.</p>
\r
372 <p>You must also configure a <tt>p4</tt> client "view" which maps the Perforce
\r
373 branch into the top level of your git repository, for example:</p>
\r
374 <div class="listingblock">
\r
375 <div class="content">
\r
376 <pre><tt>Client: myhost
\r
378 Root: /home/sean/import
\r
380 Options: noallwrite clobber nocompress unlocked modtime rmdir
\r
383 //public/jam/... //myhost/jam/...</tt></pre>
\r
385 <p>With the above <tt>p4</tt> client setup, you could import the "jam"
\r
386 perforce branch into a branch named "jammy", like so:</p>
\r
387 <div class="listingblock">
\r
388 <div class="content">
\r
389 <pre><tt>$ mkdir -p /home/sean/import/jam
\r
390 $ cd /home/sean/import/jam
\r
392 $ git p4import //public/jam jammy</tt></pre>
\r
395 <h2>Multiple Branches</h2>
\r
396 <div class="sectionbody">
\r
397 <p>Note that by creating multiple "views" you can use <tt>git-p4import</tt>
\r
398 to import additional branches into the same git repository.
\r
399 However, the <tt>p4</tt> client has a limitation in that it silently
\r
400 ignores all but the last "view" that maps into the same local
\r
401 directory. So the following will <strong>not</strong> work:</p>
\r
402 <div class="listingblock">
\r
403 <div class="content">
\r
405 //public/jam/... //myhost/jam/...
\r
406 //public/other/... //myhost/jam/...
\r
407 //public/guest/... //myhost/jam/...</tt></pre>
\r
409 <p>If you want more than one Perforce branch to be imported into the
\r
410 same directory you must employ a workaround. A simple option is
\r
411 to adjust your <tt>p4</tt> client before each import to only include a
\r
413 <p>Another option is to create multiple symlinks locally which all
\r
414 point to the same directory in your git repository and then use
\r
415 one per "view" instead of listing the actual directory.</p>
\r
418 <div class="sectionbody">
\r
419 <p>A git tag of the form p4/xx is created for every change imported from
\r
420 the Perforce repository where xx is the Perforce changeset number.
\r
421 Therefore after the import you can use git to access any commit by its
\r
422 Perforce number, eg. git show p4/327.</p>
\r
423 <p>The tag associated with the HEAD commit is also how <tt>git-p4import</tt>
\r
424 determines if their are new changes to incrementally import from the
\r
425 Perforce repository.</p>
\r
426 <p>If you import from a repository with many thousands of changes
\r
427 you will have an equal number of p4/xxxx git tags. Git tags can
\r
428 be expensive in terms of disk space and repository operations.
\r
429 If you don't need to perform further incremental imports, you
\r
430 may delete the tags.</p>
\r
433 <div class="sectionbody">
\r
434 <p>You can interrupt the import (eg. ctrl-c) at any time and restart it
\r
436 <p>Author information is automatically determined by querying the
\r
437 Perforce "users" table using the id associated with each change.
\r
438 However, if you want to manually supply these mappings you can do
\r
439 so with the "--authors" option. It accepts a file containing a list
\r
440 of mappings with each line containing one mapping in the format:</p>
\r
441 <div class="listingblock">
\r
442 <div class="content">
\r
443 <pre><tt> perforce_id = Full Name <email@address.com></tt></pre>
\r
447 <div class="sectionbody">
\r
448 <p>Written by Sean Estabrooks <seanlkml@sympatico.ca></p>
\r
451 <div class="sectionbody">
\r
452 <p>Part of the <a href="git.html">git(7)</a> suite</p>
\r
455 <div id="footer-text">
\r
456 Last updated 06-Jun-2006 05:43:53 UTC
\r