blob: 1b218a828deb571a0a4a0c00cff1c064dc0351cd [file] [log] [blame]
Junio C Hamanof0a85da2006-06-06 05:44:311<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
2 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
4<head>
5<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6<meta name="generator" content="AsciiDoc 7.0.2" />
7<style type="text/css">
8/* Debug borders */
9p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {
10/*
11 border: 1px solid red;
12*/
13}
14
15body {
16 margin: 1em 5% 1em 5%;
17}
18
19a { color: blue; }
20a:visited { color: fuchsia; }
21
22em {
23 font-style: italic;
24}
25
26strong {
27 font-weight: bold;
28}
29
30tt {
31 color: navy;
32}
33
34h1, h2, h3, h4, h5, h6 {
35 color: #527bbd;
36 font-family: sans-serif;
37 margin-top: 1.2em;
38 margin-bottom: 0.5em;
39 line-height: 1.3;
40}
41
42h1 {
43 border-bottom: 2px solid silver;
44}
45h2 {
46 border-bottom: 2px solid silver;
47 padding-top: 0.5em;
48}
49
50div.sectionbody {
51 font-family: serif;
52 margin-left: 0;
53}
54
55hr {
56 border: 1px solid silver;
57}
58
59p {
60 margin-top: 0.5em;
61 margin-bottom: 0.5em;
62}
63
64pre {
65 padding: 0;
66 margin: 0;
67}
68
69span#author {
70 color: #527bbd;
71 font-family: sans-serif;
72 font-weight: bold;
73 font-size: 1.2em;
74}
75span#email {
76}
77span#revision {
78 font-family: sans-serif;
79}
80
81div#footer {
82 font-family: sans-serif;
83 font-size: small;
84 border-top: 2px solid silver;
85 padding-top: 0.5em;
86 margin-top: 4.0em;
87}
88div#footer-text {
89 float: left;
90 padding-bottom: 0.5em;
91}
92div#footer-badges {
93 float: right;
94 padding-bottom: 0.5em;
95}
96
97div#preamble,
98div.tableblock, div.imageblock, div.exampleblock, div.verseblock,
99div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
100div.admonitionblock {
101 margin-right: 10%;
102 margin-top: 1.5em;
103 margin-bottom: 1.5em;
104}
105div.admonitionblock {
106 margin-top: 2.5em;
107 margin-bottom: 2.5em;
108}
109
110div.content { /* Block element content. */
111 padding: 0;
112}
113
114/* Block element titles. */
115div.title, caption.title {
116 font-family: sans-serif;
117 font-weight: bold;
118 text-align: left;
119 margin-top: 1.0em;
120 margin-bottom: 0.5em;
121}
122div.title + * {
123 margin-top: 0;
124}
125
126td div.title:first-child {
127 margin-top: 0.0em;
128}
129div.content div.title:first-child {
130 margin-top: 0.0em;
131}
132div.content + div.title {
133 margin-top: 0.0em;
134}
135
136div.sidebarblock > div.content {
137 background: #ffffee;
138 border: 1px solid silver;
139 padding: 0.5em;
140}
141
142div.listingblock > div.content {
143 border: 1px solid silver;
144 background: #f4f4f4;
145 padding: 0.5em;
146}
147
148div.quoteblock > div.content {
149 padding-left: 2.0em;
150}
151div.quoteblock .attribution {
152 text-align: right;
153}
154
155div.admonitionblock .icon {
156 vertical-align: top;
157 font-size: 1.1em;
158 font-weight: bold;
159 text-decoration: underline;
160 color: #527bbd;
161 padding-right: 0.5em;
162}
163div.admonitionblock td.content {
164 padding-left: 0.5em;
165 border-left: 2px solid silver;
166}
167
168div.exampleblock > div.content {
169 border-left: 2px solid silver;
170 padding: 0.5em;
171}
172
173div.verseblock div.content {
174 white-space: pre;
175}
176
177div.imageblock div.content { padding-left: 0; }
178div.imageblock img { border: 1px solid silver; }
179span.image img { border-style: none; }
180
181dl {
182 margin-top: 0.8em;
183 margin-bottom: 0.8em;
184}
185dt {
186 margin-top: 0.5em;
187 margin-bottom: 0;
188 font-style: italic;
189}
190dd > *:first-child {
191 margin-top: 0;
192}
193
194ul, ol {
195 list-style-position: outside;
196}
197ol.olist2 {
198 list-style-type: lower-alpha;
199}
200
201div.tableblock > table {
202 border-color: #527bbd;
203 border-width: 3px;
204}
205thead {
206 font-family: sans-serif;
207 font-weight: bold;
208}
209tfoot {
210 font-weight: bold;
211}
212
213div.hlist {
214 margin-top: 0.8em;
215 margin-bottom: 0.8em;
216}
217td.hlist1 {
218 vertical-align: top;
219 font-style: italic;
220 padding-right: 0.8em;
221}
222td.hlist2 {
223 vertical-align: top;
224}
225
226@media print {
227 div#footer-badges { display: none; }
228}
229include::./stylesheets/xhtml11-manpage.css[]
230/* Workarounds for IE6's broken and incomplete CSS2. */
231
232div.sidebar-content {
233 background: #ffffee;
234 border: 1px solid silver;
235 padding: 0.5em;
236}
237div.sidebar-title, div.image-title {
238 font-family: sans-serif;
239 font-weight: bold;
240 margin-top: 0.0em;
241 margin-bottom: 0.5em;
242}
243
244div.listingblock div.content {
245 border: 1px solid silver;
246 background: #f4f4f4;
247 padding: 0.5em;
248}
249
250div.quoteblock-content {
251 padding-left: 2.0em;
252}
253
254div.exampleblock-content {
255 border-left: 2px solid silver;
256 padding-left: 0.5em;
257}
258</style>
259<title>git-p4import(1)</title>
260</head>
261<body>
262<div id="header">
263<h1>
264git-p4import(1) Manual Page
265</h1>
266<h2>NAME</h2>
267<div class="sectionbody">
268<p>git-p4import -
269 Import a Perforce repository into git
270</p>
271</div>
272</div>
273<h2>SYNOPSIS</h2>
274<div class="sectionbody">
Junio C Hamano3fd90c82006-06-18 00:22:01275<p><tt>git-p4import</tt> [-q|-v] [--notags] [--authors &lt;file&gt;] [-t &lt;timezone&gt;] &lt;//p4repo/path&gt; &lt;branch&gt;</p>
Junio C Hamanof0a85da2006-06-06 05:44:31276<p><tt>git-p4import</tt> --stitch &lt;//p4repo/path&gt;</p>
277<p><tt>git-p4import</tt></p>
278</div>
279<h2>DESCRIPTION</h2>
280<div class="sectionbody">
281<p>Import a Perforce repository into an existing git repository. When
282a &lt;//p4repo/path&gt; and &lt;branch&gt; are specified a new branch with the
283given name will be created and the initial import will begin.</p>
284<p>Once the initial import is complete you can do an incremental import
285of new commits from the Perforce repository. You do this by checking
286out the appropriate git branch and then running <tt>git-p4import</tt> without
287any options.</p>
288<p>The standard p4 client is used to communicate with the Perforce
289repository; it must be configured correctly in order for <tt>git-p4import</tt>
290to operate (see below).</p>
291</div>
292<h2>OPTIONS</h2>
293<div class="sectionbody">
294<dl>
295<dt>
296-q
297</dt>
298<dd>
299<p>
300 Do not display any progress information.
301</p>
302</dd>
303<dt>
304-v
305</dt>
306<dd>
307<p>
308 Give extra progress information.
309</p>
310</dd>
311<dt>
312--authors
313</dt>
314<dd>
315<p>
316 Specify an authors file containing a mapping of Perforce user
317 ids to full names and email addresses (see Notes below).
318</p>
319</dd>
320<dt>
Junio C Hamano3fd90c82006-06-18 00:22:01321--notags
322</dt>
323<dd>
324<p>
325 Do not create a tag for each imported commit.
326</p>
327</dd>
328<dt>
Junio C Hamanof0a85da2006-06-06 05:44:31329--stitch
330</dt>
331<dd>
332<p>
333 Import the contents of the given perforce branch into the
334 currently checked out git branch.
335</p>
336</dd>
337<dt>
338--log
339</dt>
340<dd>
341<p>
342 Store debugging information in the specified file.
343</p>
344</dd>
345<dt>
346-t
347</dt>
348<dd>
349<p>
350 Specify that the remote repository is in the specified timezone.
351 Timezone must be in the format "US/Pacific" or "Europe/London"
352 etc. You only need to specify this once, it will be saved in
353 the git config file for the repository.
354</p>
355</dd>
356<dt>
357&lt;//p4repo/path&gt;
358</dt>
359<dd>
360<p>
361 The Perforce path that will be imported into the specified branch.
362</p>
363</dd>
364<dt>
365&lt;branch&gt;
366</dt>
367<dd>
368<p>
369 The new branch that will be created to hold the Perforce imports.
370</p>
371</dd>
372</dl>
373</div>
374<h2>P4 Client</h2>
375<div class="sectionbody">
376<p>You must make the <tt>p4</tt> client command available in your $PATH and
377configure it to communicate with the target Perforce repository.
378Typically this means you must set the "$P4PORT" and "$P4CLIENT"
379environment variables.</p>
380<p>You must also configure a <tt>p4</tt> client "view" which maps the Perforce
381branch into the top level of your git repository, for example:</p>
382<div class="listingblock">
383<div class="content">
384<pre><tt>Client: myhost
385
386Root: /home/sean/import
387
388Options: noallwrite clobber nocompress unlocked modtime rmdir
389
390View:
391 //public/jam/... //myhost/jam/...</tt></pre>
392</div></div>
393<p>With the above <tt>p4</tt> client setup, you could import the "jam"
394perforce branch into a branch named "jammy", like so:</p>
395<div class="listingblock">
396<div class="content">
397<pre><tt>$ mkdir -p /home/sean/import/jam
398$ cd /home/sean/import/jam
Junio C Hamano24351a82007-01-13 08:09:17399$ git init
Junio C Hamanof0a85da2006-06-06 05:44:31400$ git p4import //public/jam jammy</tt></pre>
401</div></div>
402</div>
403<h2>Multiple Branches</h2>
404<div class="sectionbody">
405<p>Note that by creating multiple "views" you can use <tt>git-p4import</tt>
406to import additional branches into the same git repository.
407However, the <tt>p4</tt> client has a limitation in that it silently
408ignores all but the last "view" that maps into the same local
409directory. So the following will <strong>not</strong> work:</p>
410<div class="listingblock">
411<div class="content">
412<pre><tt>View:
413 //public/jam/... //myhost/jam/...
414 //public/other/... //myhost/jam/...
415 //public/guest/... //myhost/jam/...</tt></pre>
416</div></div>
417<p>If you want more than one Perforce branch to be imported into the
418same directory you must employ a workaround. A simple option is
419to adjust your <tt>p4</tt> client before each import to only include a
420single view.</p>
421<p>Another option is to create multiple symlinks locally which all
422point to the same directory in your git repository and then use
423one per "view" instead of listing the actual directory.</p>
424</div>
425<h2>Tags</h2>
426<div class="sectionbody">
427<p>A git tag of the form p4/xx is created for every change imported from
428the Perforce repository where xx is the Perforce changeset number.
429Therefore after the import you can use git to access any commit by its
Junio C Hamano51c2ab02006-07-09 20:38:54430Perforce number, e.g. git show p4/327.</p>
Junio C Hamanof0a85da2006-06-06 05:44:31431<p>The tag associated with the HEAD commit is also how <tt>git-p4import</tt>
Junio C Hamano33db4372006-06-07 19:51:45432determines if there are new changes to incrementally import from the
Junio C Hamanof0a85da2006-06-06 05:44:31433Perforce repository.</p>
434<p>If you import from a repository with many thousands of changes
435you will have an equal number of p4/xxxx git tags. Git tags can
436be expensive in terms of disk space and repository operations.
437If you don't need to perform further incremental imports, you
438may delete the tags.</p>
439</div>
440<h2>Notes</h2>
441<div class="sectionbody">
Junio C Hamano51c2ab02006-07-09 20:38:54442<p>You can interrupt the import (e.g. ctrl-c) at any time and restart it
Junio C Hamanof0a85da2006-06-06 05:44:31443without worry.</p>
444<p>Author information is automatically determined by querying the
445Perforce "users" table using the id associated with each change.
446However, if you want to manually supply these mappings you can do
447so with the "--authors" option. It accepts a file containing a list
448of mappings with each line containing one mapping in the format:</p>
449<div class="listingblock">
450<div class="content">
451<pre><tt> perforce_id = Full Name &lt;email@address.com&gt;</tt></pre>
452</div></div>
453</div>
454<h2>Author</h2>
455<div class="sectionbody">
456<p>Written by Sean Estabrooks &lt;seanlkml@sympatico.ca&gt;</p>
457</div>
458<h2>GIT</h2>
459<div class="sectionbody">
460<p>Part of the <a href="git.html">git(7)</a> suite</p>
461</div>
462<div id="footer">
463<div id="footer-text">
Junio C Hamano24351a82007-01-13 08:09:17464Last updated 13-Jan-2007 08:09:01 UTC
Junio C Hamanof0a85da2006-06-06 05:44:31465</div>
466</div>
467</body>
468</html>