MinGW: Use pid_t more consequently, introduce uid_t for greater compatibility
[git/dscho.git] / Documentation / git-fast-import.txt
blob2c6ad5b2f32e6c0248f0a30423b07d01fed3baa3
1 git-fast-import(1)
2 ==================
4 NAME
5 ----
6 git-fast-import - Backend for fast Git data importers
9 SYNOPSIS
10 --------
11 frontend | 'git fast-import' [options]
13 DESCRIPTION
14 -----------
15 This program is usually not what the end user wants to run directly.
16 Most end users want to use one of the existing frontend programs,
17 which parses a specific type of foreign source and feeds the contents
18 stored there to 'git fast-import'.
20 fast-import reads a mixed command/data stream from standard input and
21 writes one or more packfiles directly into the current repository.
22 When EOF is received on standard input, fast import writes out
23 updated branch and tag refs, fully updating the current repository
24 with the newly imported data.
26 The fast-import backend itself can import into an empty repository (one that
27 has already been initialized by 'git init') or incrementally
28 update an existing populated repository.  Whether or not incremental
29 imports are supported from a particular foreign source depends on
30 the frontend program in use.
33 OPTIONS
34 -------
35 --date-format=<fmt>::
36         Specify the type of dates the frontend will supply to
37         fast-import within `author`, `committer` and `tagger` commands.
38         See ``Date Formats'' below for details about which formats
39         are supported, and their syntax.
41 --force::
42         Force updating modified existing branches, even if doing
43         so would cause commits to be lost (as the new commit does
44         not contain the old commit).
46 --max-pack-size=<n>::
47         Maximum size of each output packfile.
48         The default is unlimited.
50 --big-file-threshold=<n>::
51         Maximum size of a blob that fast-import will attempt to
52         create a delta for, expressed in bytes.  The default is 512m
53         (512 MiB).  Some importers may wish to lower this on systems
54         with constrained memory.
56 --depth=<n>::
57         Maximum delta depth, for blob and tree deltification.
58         Default is 10.
60 --active-branches=<n>::
61         Maximum number of branches to maintain active at once.
62         See ``Memory Utilization'' below for details.  Default is 5.
64 --export-marks=<file>::
65         Dumps the internal marks table to <file> when complete.
66         Marks are written one per line as `:markid SHA-1`.
67         Frontends can use this file to validate imports after they
68         have been completed, or to save the marks table across
69         incremental runs.  As <file> is only opened and truncated
70         at checkpoint (or completion) the same path can also be
71         safely given to \--import-marks.
73 --import-marks=<file>::
74         Before processing any input, load the marks specified in
75         <file>.  The input file must exist, must be readable, and
76         must use the same format as produced by \--export-marks.
77         Multiple options may be supplied to import more than one
78         set of marks.  If a mark is defined to different values,
79         the last file wins.
81 --relative-marks::
82         After specifying --relative-marks= the paths specified
83         with --import-marks= and --export-marks= are relative
84         to an internal directory in the current repository.
85         In git-fast-import this means that the paths are relative
86         to the .git/info/fast-import directory. However, other
87         importers may use a different location.
89 --no-relative-marks::
90         Negates a previous --relative-marks. Allows for combining
91         relative and non-relative marks by interweaving
92         --(no-)-relative-marks= with the --(import|export)-marks=
93         options.
95 --export-pack-edges=<file>::
96         After creating a packfile, print a line of data to
97         <file> listing the filename of the packfile and the last
98         commit on each branch that was written to that packfile.
99         This information may be useful after importing projects
100         whose total object set exceeds the 4 GiB packfile limit,
101         as these commits can be used as edge points during calls
102         to 'git pack-objects'.
104 --quiet::
105         Disable all non-fatal output, making fast-import silent when it
106         is successful.  This option disables the output shown by
107         \--stats.
109 --stats::
110         Display some basic statistics about the objects fast-import has
111         created, the packfiles they were stored into, and the
112         memory used by fast-import during this run.  Showing this output
113         is currently the default, but can be disabled with \--quiet.
116 Performance
117 -----------
118 The design of fast-import allows it to import large projects in a minimum
119 amount of memory usage and processing time.  Assuming the frontend
120 is able to keep up with fast-import and feed it a constant stream of data,
121 import times for projects holding 10+ years of history and containing
122 100,000+ individual commits are generally completed in just 1-2
123 hours on quite modest (~$2,000 USD) hardware.
125 Most bottlenecks appear to be in foreign source data access (the
126 source just cannot extract revisions fast enough) or disk IO (fast-import
127 writes as fast as the disk will take the data).  Imports will run
128 faster if the source data is stored on a different drive than the
129 destination Git repository (due to less IO contention).
132 Development Cost
133 ----------------
134 A typical frontend for fast-import tends to weigh in at approximately 200
135 lines of Perl/Python/Ruby code.  Most developers have been able to
136 create working importers in just a couple of hours, even though it
137 is their first exposure to fast-import, and sometimes even to Git.  This is
138 an ideal situation, given that most conversion tools are throw-away
139 (use once, and never look back).
142 Parallel Operation
143 ------------------
144 Like 'git push' or 'git fetch', imports handled by fast-import are safe to
145 run alongside parallel `git repack -a -d` or `git gc` invocations,
146 or any other Git operation (including 'git prune', as loose objects
147 are never used by fast-import).
149 fast-import does not lock the branch or tag refs it is actively importing.
150 After the import, during its ref update phase, fast-import tests each
151 existing branch ref to verify the update will be a fast-forward
152 update (the commit stored in the ref is contained in the new
153 history of the commit to be written).  If the update is not a
154 fast-forward update, fast-import will skip updating that ref and instead
155 prints a warning message.  fast-import will always attempt to update all
156 branch refs, and does not stop on the first failure.
158 Branch updates can be forced with \--force, but it's recommended that
159 this only be used on an otherwise quiet repository.  Using \--force
160 is not necessary for an initial import into an empty repository.
163 Technical Discussion
164 --------------------
165 fast-import tracks a set of branches in memory.  Any branch can be created
166 or modified at any point during the import process by sending a
167 `commit` command on the input stream.  This design allows a frontend
168 program to process an unlimited number of branches simultaneously,
169 generating commits in the order they are available from the source
170 data.  It also simplifies the frontend programs considerably.
172 fast-import does not use or alter the current working directory, or any
173 file within it.  (It does however update the current Git repository,
174 as referenced by `GIT_DIR`.)  Therefore an import frontend may use
175 the working directory for its own purposes, such as extracting file
176 revisions from the foreign source.  This ignorance of the working
177 directory also allows fast-import to run very quickly, as it does not
178 need to perform any costly file update operations when switching
179 between branches.
181 Input Format
182 ------------
183 With the exception of raw file data (which Git does not interpret)
184 the fast-import input format is text (ASCII) based.  This text based
185 format simplifies development and debugging of frontend programs,
186 especially when a higher level language such as Perl, Python or
187 Ruby is being used.
189 fast-import is very strict about its input.  Where we say SP below we mean
190 *exactly* one space.  Likewise LF means one (and only one) linefeed.
191 Supplying additional whitespace characters will cause unexpected
192 results, such as branch names or file names with leading or trailing
193 spaces in their name, or early termination of fast-import when it encounters
194 unexpected input.
196 Stream Comments
197 ~~~~~~~~~~~~~~~
198 To aid in debugging frontends fast-import ignores any line that
199 begins with `#` (ASCII pound/hash) up to and including the line
200 ending `LF`.  A comment line may contain any sequence of bytes
201 that does not contain an LF and therefore may be used to include
202 any detailed debugging information that might be specific to the
203 frontend and useful when inspecting a fast-import data stream.
205 Date Formats
206 ~~~~~~~~~~~~
207 The following date formats are supported.  A frontend should select
208 the format it will use for this import by passing the format name
209 in the \--date-format=<fmt> command line option.
211 `raw`::
212         This is the Git native format and is `<time> SP <offutc>`.
213         It is also fast-import's default format, if \--date-format was
214         not specified.
216 The time of the event is specified by `<time>` as the number of
217 seconds since the UNIX epoch (midnight, Jan 1, 1970, UTC) and is
218 written as an ASCII decimal integer.
220 The local offset is specified by `<offutc>` as a positive or negative
221 offset from UTC.  For example EST (which is 5 hours behind UTC)
222 would be expressed in `<tz>` by ``-0500'' while UTC is ``+0000''.
223 The local offset does not affect `<time>`; it is used only as an
224 advisement to help formatting routines display the timestamp.
226 If the local offset is not available in the source material, use
227 ``+0000'', or the most common local offset.  For example many
228 organizations have a CVS repository which has only ever been accessed
229 by users who are located in the same location and timezone.  In this
230 case a reasonable offset from UTC could be assumed.
232 Unlike the `rfc2822` format, this format is very strict.  Any
233 variation in formatting will cause fast-import to reject the value.
235 `rfc2822`::
236         This is the standard email format as described by RFC 2822.
238 An example value is ``Tue Feb 6 11:22:18 2007 -0500''.  The Git
239 parser is accurate, but a little on the lenient side.  It is the
240 same parser used by 'git am' when applying patches
241 received from email.
243 Some malformed strings may be accepted as valid dates.  In some of
244 these cases Git will still be able to obtain the correct date from
245 the malformed string.  There are also some types of malformed
246 strings which Git will parse wrong, and yet consider valid.
247 Seriously malformed strings will be rejected.
249 Unlike the `raw` format above, the timezone/UTC offset information
250 contained in an RFC 2822 date string is used to adjust the date
251 value to UTC prior to storage.  Therefore it is important that
252 this information be as accurate as possible.
254 If the source material uses RFC 2822 style dates,
255 the frontend should let fast-import handle the parsing and conversion
256 (rather than attempting to do it itself) as the Git parser has
257 been well tested in the wild.
259 Frontends should prefer the `raw` format if the source material
260 already uses UNIX-epoch format, can be coaxed to give dates in that
261 format, or its format is easily convertible to it, as there is no
262 ambiguity in parsing.
264 `now`::
265         Always use the current time and timezone.  The literal
266         `now` must always be supplied for `<when>`.
268 This is a toy format.  The current time and timezone of this system
269 is always copied into the identity string at the time it is being
270 created by fast-import.  There is no way to specify a different time or
271 timezone.
273 This particular format is supplied as it's short to implement and
274 may be useful to a process that wants to create a new commit
275 right now, without needing to use a working directory or
276 'git update-index'.
278 If separate `author` and `committer` commands are used in a `commit`
279 the timestamps may not match, as the system clock will be polled
280 twice (once for each command).  The only way to ensure that both
281 author and committer identity information has the same timestamp
282 is to omit `author` (thus copying from `committer`) or to use a
283 date format other than `now`.
285 Commands
286 ~~~~~~~~
287 fast-import accepts several commands to update the current repository
288 and control the current import process.  More detailed discussion
289 (with examples) of each command follows later.
291 `commit`::
292         Creates a new branch or updates an existing branch by
293         creating a new commit and updating the branch to point at
294         the newly created commit.
296 `tag`::
297         Creates an annotated tag object from an existing commit or
298         branch.  Lightweight tags are not supported by this command,
299         as they are not recommended for recording meaningful points
300         in time.
302 `reset`::
303         Reset an existing branch (or a new branch) to a specific
304         revision.  This command must be used to change a branch to
305         a specific revision without making a commit on it.
307 `blob`::
308         Convert raw file data into a blob, for future use in a
309         `commit` command.  This command is optional and is not
310         needed to perform an import.
312 `checkpoint`::
313         Forces fast-import to close the current packfile, generate its
314         unique SHA-1 checksum and index, and start a new packfile.
315         This command is optional and is not needed to perform
316         an import.
318 `progress`::
319         Causes fast-import to echo the entire line to its own
320         standard output.  This command is optional and is not needed
321         to perform an import.
323 `feature`::
324         Require that fast-import supports the specified feature, or
325         abort if it does not.
327 `option`::
328         Specify any of the options listed under OPTIONS that do not
329         change stream semantic to suit the frontend's needs. This
330         command is optional and is not needed to perform an import.
332 `commit`
333 ~~~~~~~~
334 Create or update a branch with a new commit, recording one logical
335 change to the project.
337 ....
338         'commit' SP <ref> LF
339         mark?
340         ('author' (SP <name>)? SP LT <email> GT SP <when> LF)?
341         'committer' (SP <name>)? SP LT <email> GT SP <when> LF
342         data
343         ('from' SP <committish> LF)?
344         ('merge' SP <committish> LF)?
345         (filemodify | filedelete | filecopy | filerename | filedeleteall | notemodify)*
346         LF?
347 ....
349 where `<ref>` is the name of the branch to make the commit on.
350 Typically branch names are prefixed with `refs/heads/` in
351 Git, so importing the CVS branch symbol `RELENG-1_0` would use
352 `refs/heads/RELENG-1_0` for the value of `<ref>`.  The value of
353 `<ref>` must be a valid refname in Git.  As `LF` is not valid in
354 a Git refname, no quoting or escaping syntax is supported here.
356 A `mark` command may optionally appear, requesting fast-import to save a
357 reference to the newly created commit for future use by the frontend
358 (see below for format).  It is very common for frontends to mark
359 every commit they create, thereby allowing future branch creation
360 from any imported commit.
362 The `data` command following `committer` must supply the commit
363 message (see below for `data` command syntax).  To import an empty
364 commit message use a 0 length data.  Commit messages are free-form
365 and are not interpreted by Git.  Currently they must be encoded in
366 UTF-8, as fast-import does not permit other encodings to be specified.
368 Zero or more `filemodify`, `filedelete`, `filecopy`, `filerename`,
369 `filedeleteall` and `notemodify` commands
370 may be included to update the contents of the branch prior to
371 creating the commit.  These commands may be supplied in any order.
372 However it is recommended that a `filedeleteall` command precede
373 all `filemodify`, `filecopy`, `filerename` and `notemodify` commands in
374 the same commit, as `filedeleteall` wipes the branch clean (see below).
376 The `LF` after the command is optional (it used to be required).
378 `author`
379 ^^^^^^^^
380 An `author` command may optionally appear, if the author information
381 might differ from the committer information.  If `author` is omitted
382 then fast-import will automatically use the committer's information for
383 the author portion of the commit.  See below for a description of
384 the fields in `author`, as they are identical to `committer`.
386 `committer`
387 ^^^^^^^^^^^
388 The `committer` command indicates who made this commit, and when
389 they made it.
391 Here `<name>` is the person's display name (for example
392 ``Com M Itter'') and `<email>` is the person's email address
393 (``cm@example.com'').  `LT` and `GT` are the literal less-than (\x3c)
394 and greater-than (\x3e) symbols.  These are required to delimit
395 the email address from the other fields in the line.  Note that
396 `<name>` is free-form and may contain any sequence of bytes, except
397 `LT` and `LF`.  It is typically UTF-8 encoded.
399 The time of the change is specified by `<when>` using the date format
400 that was selected by the \--date-format=<fmt> command line option.
401 See ``Date Formats'' above for the set of supported formats, and
402 their syntax.
404 `from`
405 ^^^^^^
406 The `from` command is used to specify the commit to initialize
407 this branch from.  This revision will be the first ancestor of the
408 new commit.
410 Omitting the `from` command in the first commit of a new branch
411 will cause fast-import to create that commit with no ancestor. This
412 tends to be desired only for the initial commit of a project.
413 If the frontend creates all files from scratch when making a new
414 branch, a `merge` command may be used instead of `from` to start
415 the commit with an empty tree.
416 Omitting the `from` command on existing branches is usually desired,
417 as the current commit on that branch is automatically assumed to
418 be the first ancestor of the new commit.
420 As `LF` is not valid in a Git refname or SHA-1 expression, no
421 quoting or escaping syntax is supported within `<committish>`.
423 Here `<committish>` is any of the following:
425 * The name of an existing branch already in fast-import's internal branch
426   table.  If fast-import doesn't know the name, it's treated as a SHA-1
427   expression.
429 * A mark reference, `:<idnum>`, where `<idnum>` is the mark number.
431 The reason fast-import uses `:` to denote a mark reference is this character
432 is not legal in a Git branch name.  The leading `:` makes it easy
433 to distinguish between the mark 42 (`:42`) and the branch 42 (`42`
434 or `refs/heads/42`), or an abbreviated SHA-1 which happened to
435 consist only of base-10 digits.
437 Marks must be declared (via `mark`) before they can be used.
439 * A complete 40 byte or abbreviated commit SHA-1 in hex.
441 * Any valid Git SHA-1 expression that resolves to a commit.  See
442   ``SPECIFYING REVISIONS'' in linkgit:gitrevisions[7] for details.
444 The special case of restarting an incremental import from the
445 current branch value should be written as:
446 ----
447         from refs/heads/branch^0
448 ----
449 The `{caret}0` suffix is necessary as fast-import does not permit a branch to
450 start from itself, and the branch is created in memory before the
451 `from` command is even read from the input.  Adding `{caret}0` will force
452 fast-import to resolve the commit through Git's revision parsing library,
453 rather than its internal branch table, thereby loading in the
454 existing value of the branch.
456 `merge`
457 ^^^^^^^
458 Includes one additional ancestor commit.  If the `from` command is
459 omitted when creating a new branch, the first `merge` commit will be
460 the first ancestor of the current commit, and the branch will start
461 out with no files.  An unlimited number of `merge` commands per
462 commit are permitted by fast-import, thereby establishing an n-way merge.
463 However Git's other tools never create commits with more than 15
464 additional ancestors (forming a 16-way merge).  For this reason
465 it is suggested that frontends do not use more than 15 `merge`
466 commands per commit; 16, if starting a new, empty branch.
468 Here `<committish>` is any of the commit specification expressions
469 also accepted by `from` (see above).
471 `filemodify`
472 ^^^^^^^^^^^^
473 Included in a `commit` command to add a new file or change the
474 content of an existing file.  This command has two different means
475 of specifying the content of the file.
477 External data format::
478         The data content for the file was already supplied by a prior
479         `blob` command.  The frontend just needs to connect it.
481 ....
482         'M' SP <mode> SP <dataref> SP <path> LF
483 ....
485 Here usually `<dataref>` must be either a mark reference (`:<idnum>`)
486 set by a prior `blob` command, or a full 40-byte SHA-1 of an
487 existing Git blob object.  If `<mode>` is `040000`` then
488 `<dataref>` must be the full 40-byte SHA-1 of an existing
489 Git tree object or a mark reference set with `--import-marks`.
491 Inline data format::
492         The data content for the file has not been supplied yet.
493         The frontend wants to supply it as part of this modify
494         command.
496 ....
497         'M' SP <mode> SP 'inline' SP <path> LF
498         data
499 ....
501 See below for a detailed description of the `data` command.
503 In both formats `<mode>` is the type of file entry, specified
504 in octal.  Git only supports the following modes:
506 * `100644` or `644`: A normal (not-executable) file.  The majority
507   of files in most projects use this mode.  If in doubt, this is
508   what you want.
509 * `100755` or `755`: A normal, but executable, file.
510 * `120000`: A symlink, the content of the file will be the link target.
511 * `160000`: A gitlink, SHA-1 of the object refers to a commit in
512   another repository. Git links can only be specified by SHA or through
513   a commit mark. They are used to implement submodules.
514 * `040000`: A subdirectory.  Subdirectories can only be specified by
515   SHA or through a tree mark set with `--import-marks`.
517 In both formats `<path>` is the complete path of the file to be added
518 (if not already existing) or modified (if already existing).
520 A `<path>` string must use UNIX-style directory separators (forward
521 slash `/`), may contain any byte other than `LF`, and must not
522 start with double quote (`"`).
524 If an `LF` or double quote must be encoded into `<path>` shell-style
525 quoting should be used, e.g. `"path/with\n and \" in it"`.
527 The value of `<path>` must be in canonical form. That is it must not:
529 * contain an empty directory component (e.g. `foo//bar` is invalid),
530 * end with a directory separator (e.g. `foo/` is invalid),
531 * start with a directory separator (e.g. `/foo` is invalid),
532 * contain the special component `.` or `..` (e.g. `foo/./bar` and
533   `foo/../bar` are invalid).
535 It is recommended that `<path>` always be encoded using UTF-8.
537 `filedelete`
538 ^^^^^^^^^^^^
539 Included in a `commit` command to remove a file or recursively
540 delete an entire directory from the branch.  If the file or directory
541 removal makes its parent directory empty, the parent directory will
542 be automatically removed too.  This cascades up the tree until the
543 first non-empty directory or the root is reached.
545 ....
546         'D' SP <path> LF
547 ....
549 here `<path>` is the complete path of the file or subdirectory to
550 be removed from the branch.
551 See `filemodify` above for a detailed description of `<path>`.
553 `filecopy`
554 ^^^^^^^^^^^^
555 Recursively copies an existing file or subdirectory to a different
556 location within the branch.  The existing file or directory must
557 exist.  If the destination exists it will be completely replaced
558 by the content copied from the source.
560 ....
561         'C' SP <path> SP <path> LF
562 ....
564 here the first `<path>` is the source location and the second
565 `<path>` is the destination.  See `filemodify` above for a detailed
566 description of what `<path>` may look like.  To use a source path
567 that contains SP the path must be quoted.
569 A `filecopy` command takes effect immediately.  Once the source
570 location has been copied to the destination any future commands
571 applied to the source location will not impact the destination of
572 the copy.
574 `filerename`
575 ^^^^^^^^^^^^
576 Renames an existing file or subdirectory to a different location
577 within the branch.  The existing file or directory must exist. If
578 the destination exists it will be replaced by the source directory.
580 ....
581         'R' SP <path> SP <path> LF
582 ....
584 here the first `<path>` is the source location and the second
585 `<path>` is the destination.  See `filemodify` above for a detailed
586 description of what `<path>` may look like.  To use a source path
587 that contains SP the path must be quoted.
589 A `filerename` command takes effect immediately.  Once the source
590 location has been renamed to the destination any future commands
591 applied to the source location will create new files there and not
592 impact the destination of the rename.
594 Note that a `filerename` is the same as a `filecopy` followed by a
595 `filedelete` of the source location.  There is a slight performance
596 advantage to using `filerename`, but the advantage is so small
597 that it is never worth trying to convert a delete/add pair in
598 source material into a rename for fast-import.  This `filerename`
599 command is provided just to simplify frontends that already have
600 rename information and don't want bother with decomposing it into a
601 `filecopy` followed by a `filedelete`.
603 `filedeleteall`
604 ^^^^^^^^^^^^^^^
605 Included in a `commit` command to remove all files (and also all
606 directories) from the branch.  This command resets the internal
607 branch structure to have no files in it, allowing the frontend
608 to subsequently add all interesting files from scratch.
610 ....
611         'deleteall' LF
612 ....
614 This command is extremely useful if the frontend does not know
615 (or does not care to know) what files are currently on the branch,
616 and therefore cannot generate the proper `filedelete` commands to
617 update the content.
619 Issuing a `filedeleteall` followed by the needed `filemodify`
620 commands to set the correct content will produce the same results
621 as sending only the needed `filemodify` and `filedelete` commands.
622 The `filedeleteall` approach may however require fast-import to use slightly
623 more memory per active branch (less than 1 MiB for even most large
624 projects); so frontends that can easily obtain only the affected
625 paths for a commit are encouraged to do so.
627 `notemodify`
628 ^^^^^^^^^^^^
629 Included in a `commit` command to add a new note (annotating a given
630 commit) or change the content of an existing note.  This command has
631 two different means of specifying the content of the note.
633 External data format::
634         The data content for the note was already supplied by a prior
635         `blob` command.  The frontend just needs to connect it to the
636         commit that is to be annotated.
638 ....
639         'N' SP <dataref> SP <committish> LF
640 ....
642 Here `<dataref>` can be either a mark reference (`:<idnum>`)
643 set by a prior `blob` command, or a full 40-byte SHA-1 of an
644 existing Git blob object.
646 Inline data format::
647         The data content for the note has not been supplied yet.
648         The frontend wants to supply it as part of this modify
649         command.
651 ....
652         'N' SP 'inline' SP <committish> LF
653         data
654 ....
656 See below for a detailed description of the `data` command.
658 In both formats `<committish>` is any of the commit specification
659 expressions also accepted by `from` (see above).
661 `mark`
662 ~~~~~~
663 Arranges for fast-import to save a reference to the current object, allowing
664 the frontend to recall this object at a future point in time, without
665 knowing its SHA-1.  Here the current object is the object creation
666 command the `mark` command appears within.  This can be `commit`,
667 `tag`, and `blob`, but `commit` is the most common usage.
669 ....
670         'mark' SP ':' <idnum> LF
671 ....
673 where `<idnum>` is the number assigned by the frontend to this mark.
674 The value of `<idnum>` is expressed as an ASCII decimal integer.
675 The value 0 is reserved and cannot be used as
676 a mark.  Only values greater than or equal to 1 may be used as marks.
678 New marks are created automatically.  Existing marks can be moved
679 to another object simply by reusing the same `<idnum>` in another
680 `mark` command.
682 `tag`
683 ~~~~~
684 Creates an annotated tag referring to a specific commit.  To create
685 lightweight (non-annotated) tags see the `reset` command below.
687 ....
688         'tag' SP <name> LF
689         'from' SP <committish> LF
690         'tagger' (SP <name>)? SP LT <email> GT SP <when> LF
691         data
692 ....
694 where `<name>` is the name of the tag to create.
696 Tag names are automatically prefixed with `refs/tags/` when stored
697 in Git, so importing the CVS branch symbol `RELENG-1_0-FINAL` would
698 use just `RELENG-1_0-FINAL` for `<name>`, and fast-import will write the
699 corresponding ref as `refs/tags/RELENG-1_0-FINAL`.
701 The value of `<name>` must be a valid refname in Git and therefore
702 may contain forward slashes.  As `LF` is not valid in a Git refname,
703 no quoting or escaping syntax is supported here.
705 The `from` command is the same as in the `commit` command; see
706 above for details.
708 The `tagger` command uses the same format as `committer` within
709 `commit`; again see above for details.
711 The `data` command following `tagger` must supply the annotated tag
712 message (see below for `data` command syntax).  To import an empty
713 tag message use a 0 length data.  Tag messages are free-form and are
714 not interpreted by Git.  Currently they must be encoded in UTF-8,
715 as fast-import does not permit other encodings to be specified.
717 Signing annotated tags during import from within fast-import is not
718 supported.  Trying to include your own PGP/GPG signature is not
719 recommended, as the frontend does not (easily) have access to the
720 complete set of bytes which normally goes into such a signature.
721 If signing is required, create lightweight tags from within fast-import with
722 `reset`, then create the annotated versions of those tags offline
723 with the standard 'git tag' process.
725 `reset`
726 ~~~~~~~
727 Creates (or recreates) the named branch, optionally starting from
728 a specific revision.  The reset command allows a frontend to issue
729 a new `from` command for an existing branch, or to create a new
730 branch from an existing commit without creating a new commit.
732 ....
733         'reset' SP <ref> LF
734         ('from' SP <committish> LF)?
735         LF?
736 ....
738 For a detailed description of `<ref>` and `<committish>` see above
739 under `commit` and `from`.
741 The `LF` after the command is optional (it used to be required).
743 The `reset` command can also be used to create lightweight
744 (non-annotated) tags.  For example:
746 ====
747         reset refs/tags/938
748         from :938
749 ====
751 would create the lightweight tag `refs/tags/938` referring to
752 whatever commit mark `:938` references.
754 `blob`
755 ~~~~~~
756 Requests writing one file revision to the packfile.  The revision
757 is not connected to any commit; this connection must be formed in
758 a subsequent `commit` command by referencing the blob through an
759 assigned mark.
761 ....
762         'blob' LF
763         mark?
764         data
765 ....
767 The mark command is optional here as some frontends have chosen
768 to generate the Git SHA-1 for the blob on their own, and feed that
769 directly to `commit`.  This is typically more work than it's worth
770 however, as marks are inexpensive to store and easy to use.
772 `data`
773 ~~~~~~
774 Supplies raw data (for use as blob/file content, commit messages, or
775 annotated tag messages) to fast-import.  Data can be supplied using an exact
776 byte count or delimited with a terminating line.  Real frontends
777 intended for production-quality conversions should always use the
778 exact byte count format, as it is more robust and performs better.
779 The delimited format is intended primarily for testing fast-import.
781 Comment lines appearing within the `<raw>` part of `data` commands
782 are always taken to be part of the body of the data and are therefore
783 never ignored by fast-import.  This makes it safe to import any
784 file/message content whose lines might start with `#`.
786 Exact byte count format::
787         The frontend must specify the number of bytes of data.
789 ....
790         'data' SP <count> LF
791         <raw> LF?
792 ....
794 where `<count>` is the exact number of bytes appearing within
795 `<raw>`.  The value of `<count>` is expressed as an ASCII decimal
796 integer.  The `LF` on either side of `<raw>` is not
797 included in `<count>` and will not be included in the imported data.
799 The `LF` after `<raw>` is optional (it used to be required) but
800 recommended.  Always including it makes debugging a fast-import
801 stream easier as the next command always starts in column 0
802 of the next line, even if `<raw>` did not end with an `LF`.
804 Delimited format::
805         A delimiter string is used to mark the end of the data.
806         fast-import will compute the length by searching for the delimiter.
807         This format is primarily useful for testing and is not
808         recommended for real data.
810 ....
811         'data' SP '<<' <delim> LF
812         <raw> LF
813         <delim> LF
814         LF?
815 ....
817 where `<delim>` is the chosen delimiter string.  The string `<delim>`
818 must not appear on a line by itself within `<raw>`, as otherwise
819 fast-import will think the data ends earlier than it really does.  The `LF`
820 immediately trailing `<raw>` is part of `<raw>`.  This is one of
821 the limitations of the delimited format, it is impossible to supply
822 a data chunk which does not have an LF as its last byte.
824 The `LF` after `<delim> LF` is optional (it used to be required).
826 `checkpoint`
827 ~~~~~~~~~~~~
828 Forces fast-import to close the current packfile, start a new one, and to
829 save out all current branch refs, tags and marks.
831 ....
832         'checkpoint' LF
833         LF?
834 ....
836 Note that fast-import automatically switches packfiles when the current
837 packfile reaches \--max-pack-size, or 4 GiB, whichever limit is
838 smaller.  During an automatic packfile switch fast-import does not update
839 the branch refs, tags or marks.
841 As a `checkpoint` can require a significant amount of CPU time and
842 disk IO (to compute the overall pack SHA-1 checksum, generate the
843 corresponding index file, and update the refs) it can easily take
844 several minutes for a single `checkpoint` command to complete.
846 Frontends may choose to issue checkpoints during extremely large
847 and long running imports, or when they need to allow another Git
848 process access to a branch.  However given that a 30 GiB Subversion
849 repository can be loaded into Git through fast-import in about 3 hours,
850 explicit checkpointing may not be necessary.
852 The `LF` after the command is optional (it used to be required).
854 `progress`
855 ~~~~~~~~~~
856 Causes fast-import to print the entire `progress` line unmodified to
857 its standard output channel (file descriptor 1) when the command is
858 processed from the input stream.  The command otherwise has no impact
859 on the current import, or on any of fast-import's internal state.
861 ....
862         'progress' SP <any> LF
863         LF?
864 ....
866 The `<any>` part of the command may contain any sequence of bytes
867 that does not contain `LF`.  The `LF` after the command is optional.
868 Callers may wish to process the output through a tool such as sed to
869 remove the leading part of the line, for example:
871 ====
872         frontend | git fast-import | sed 's/^progress //'
873 ====
875 Placing a `progress` command immediately after a `checkpoint` will
876 inform the reader when the `checkpoint` has been completed and it
877 can safely access the refs that fast-import updated.
879 `feature`
880 ~~~~~~~~~
881 Require that fast-import supports the specified feature, or abort if
882 it does not.
884 ....
885         'feature' SP <feature> LF
886 ....
888 The <feature> part of the command may be any string matching
889 ^[a-zA-Z][a-zA-Z-]*$ and should be understood by fast-import.
891 Feature work identical as their option counterparts with the
892 exception of the import-marks feature, see below.
894 The following features are currently supported:
896 * date-format
897 * import-marks
898 * export-marks
899 * relative-marks
900 * no-relative-marks
901 * force
903 The import-marks behaves differently from when it is specified as
904 commandline option in that only one "feature import-marks" is allowed
905 per stream. Also, any --import-marks= specified on the commandline
906 will override those from the stream (if any).
908 `option`
909 ~~~~~~~~
910 Processes the specified option so that git fast-import behaves in a
911 way that suits the frontend's needs.
912 Note that options specified by the frontend are overridden by any
913 options the user may specify to git fast-import itself.
915 ....
916     'option' SP <option> LF
917 ....
919 The `<option>` part of the command may contain any of the options
920 listed in the OPTIONS section that do not change import semantics,
921 without the leading '--' and is treated in the same way.
923 Option commands must be the first commands on the input (not counting
924 feature commands), to give an option command after any non-option
925 command is an error.
927 The following commandline options change import semantics and may therefore
928 not be passed as option:
930 * date-format
931 * import-marks
932 * export-marks
933 * force
935 Crash Reports
936 -------------
937 If fast-import is supplied invalid input it will terminate with a
938 non-zero exit status and create a crash report in the top level of
939 the Git repository it was importing into.  Crash reports contain
940 a snapshot of the internal fast-import state as well as the most
941 recent commands that lead up to the crash.
943 All recent commands (including stream comments, file changes and
944 progress commands) are shown in the command history within the crash
945 report, but raw file data and commit messages are excluded from the
946 crash report.  This exclusion saves space within the report file
947 and reduces the amount of buffering that fast-import must perform
948 during execution.
950 After writing a crash report fast-import will close the current
951 packfile and export the marks table.  This allows the frontend
952 developer to inspect the repository state and resume the import from
953 the point where it crashed.  The modified branches and tags are not
954 updated during a crash, as the import did not complete successfully.
955 Branch and tag information can be found in the crash report and
956 must be applied manually if the update is needed.
958 An example crash:
960 ====
961         $ cat >in <<END_OF_INPUT
962         # my very first test commit
963         commit refs/heads/master
964         committer Shawn O. Pearce <spearce> 19283 -0400
965         # who is that guy anyway?
966         data <<EOF
967         this is my commit
968         EOF
969         M 644 inline .gitignore
970         data <<EOF
971         .gitignore
972         EOF
973         M 777 inline bob
974         END_OF_INPUT
976         $ git fast-import <in
977         fatal: Corrupt mode: M 777 inline bob
978         fast-import: dumping crash report to .git/fast_import_crash_8434
980         $ cat .git/fast_import_crash_8434
981         fast-import crash report:
982             fast-import process: 8434
983             parent process     : 1391
984             at Sat Sep 1 00:58:12 2007
986         fatal: Corrupt mode: M 777 inline bob
988         Most Recent Commands Before Crash
989         ---------------------------------
990           # my very first test commit
991           commit refs/heads/master
992           committer Shawn O. Pearce <spearce> 19283 -0400
993           # who is that guy anyway?
994           data <<EOF
995           M 644 inline .gitignore
996           data <<EOF
997         * M 777 inline bob
999         Active Branch LRU
1000         -----------------
1001             active_branches = 1 cur, 5 max
1003           pos  clock name
1004           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1005            1)      0 refs/heads/master
1007         Inactive Branches
1008         -----------------
1009         refs/heads/master:
1010           status      : active loaded dirty
1011           tip commit  : 0000000000000000000000000000000000000000
1012           old tree    : 0000000000000000000000000000000000000000
1013           cur tree    : 0000000000000000000000000000000000000000
1014           commit clock: 0
1015           last pack   :
1018         -------------------
1019         END OF CRASH REPORT
1020 ====
1022 Tips and Tricks
1023 ---------------
1024 The following tips and tricks have been collected from various
1025 users of fast-import, and are offered here as suggestions.
1027 Use One Mark Per Commit
1028 ~~~~~~~~~~~~~~~~~~~~~~~
1029 When doing a repository conversion, use a unique mark per commit
1030 (`mark :<n>`) and supply the \--export-marks option on the command
1031 line.  fast-import will dump a file which lists every mark and the Git
1032 object SHA-1 that corresponds to it.  If the frontend can tie
1033 the marks back to the source repository, it is easy to verify the
1034 accuracy and completeness of the import by comparing each Git
1035 commit to the corresponding source revision.
1037 Coming from a system such as Perforce or Subversion this should be
1038 quite simple, as the fast-import mark can also be the Perforce changeset
1039 number or the Subversion revision number.
1041 Freely Skip Around Branches
1042 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
1043 Don't bother trying to optimize the frontend to stick to one branch
1044 at a time during an import.  Although doing so might be slightly
1045 faster for fast-import, it tends to increase the complexity of the frontend
1046 code considerably.
1048 The branch LRU builtin to fast-import tends to behave very well, and the
1049 cost of activating an inactive branch is so low that bouncing around
1050 between branches has virtually no impact on import performance.
1052 Handling Renames
1053 ~~~~~~~~~~~~~~~~
1054 When importing a renamed file or directory, simply delete the old
1055 name(s) and modify the new name(s) during the corresponding commit.
1056 Git performs rename detection after-the-fact, rather than explicitly
1057 during a commit.
1059 Use Tag Fixup Branches
1060 ~~~~~~~~~~~~~~~~~~~~~~
1061 Some other SCM systems let the user create a tag from multiple
1062 files which are not from the same commit/changeset.  Or to create
1063 tags which are a subset of the files available in the repository.
1065 Importing these tags as-is in Git is impossible without making at
1066 least one commit which ``fixes up'' the files to match the content
1067 of the tag.  Use fast-import's `reset` command to reset a dummy branch
1068 outside of your normal branch space to the base commit for the tag,
1069 then commit one or more file fixup commits, and finally tag the
1070 dummy branch.
1072 For example since all normal branches are stored under `refs/heads/`
1073 name the tag fixup branch `TAG_FIXUP`.  This way it is impossible for
1074 the fixup branch used by the importer to have namespace conflicts
1075 with real branches imported from the source (the name `TAG_FIXUP`
1076 is not `refs/heads/TAG_FIXUP`).
1078 When committing fixups, consider using `merge` to connect the
1079 commit(s) which are supplying file revisions to the fixup branch.
1080 Doing so will allow tools such as 'git blame' to track
1081 through the real commit history and properly annotate the source
1082 files.
1084 After fast-import terminates the frontend will need to do `rm .git/TAG_FIXUP`
1085 to remove the dummy branch.
1087 Import Now, Repack Later
1088 ~~~~~~~~~~~~~~~~~~~~~~~~
1089 As soon as fast-import completes the Git repository is completely valid
1090 and ready for use.  Typically this takes only a very short time,
1091 even for considerably large projects (100,000+ commits).
1093 However repacking the repository is necessary to improve data
1094 locality and access performance.  It can also take hours on extremely
1095 large projects (especially if -f and a large \--window parameter is
1096 used).  Since repacking is safe to run alongside readers and writers,
1097 run the repack in the background and let it finish when it finishes.
1098 There is no reason to wait to explore your new Git project!
1100 If you choose to wait for the repack, don't try to run benchmarks
1101 or performance tests until repacking is completed.  fast-import outputs
1102 suboptimal packfiles that are simply never seen in real use
1103 situations.
1105 Repacking Historical Data
1106 ~~~~~~~~~~~~~~~~~~~~~~~~~
1107 If you are repacking very old imported data (e.g. older than the
1108 last year), consider expending some extra CPU time and supplying
1109 \--window=50 (or higher) when you run 'git repack'.
1110 This will take longer, but will also produce a smaller packfile.
1111 You only need to expend the effort once, and everyone using your
1112 project will benefit from the smaller repository.
1114 Include Some Progress Messages
1115 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1116 Every once in a while have your frontend emit a `progress` message
1117 to fast-import.  The contents of the messages are entirely free-form,
1118 so one suggestion would be to output the current month and year
1119 each time the current commit date moves into the next month.
1120 Your users will feel better knowing how much of the data stream
1121 has been processed.
1124 Packfile Optimization
1125 ---------------------
1126 When packing a blob fast-import always attempts to deltify against the last
1127 blob written.  Unless specifically arranged for by the frontend,
1128 this will probably not be a prior version of the same file, so the
1129 generated delta will not be the smallest possible.  The resulting
1130 packfile will be compressed, but will not be optimal.
1132 Frontends which have efficient access to all revisions of a
1133 single file (for example reading an RCS/CVS ,v file) can choose
1134 to supply all revisions of that file as a sequence of consecutive
1135 `blob` commands.  This allows fast-import to deltify the different file
1136 revisions against each other, saving space in the final packfile.
1137 Marks can be used to later identify individual file revisions during
1138 a sequence of `commit` commands.
1140 The packfile(s) created by fast-import do not encourage good disk access
1141 patterns.  This is caused by fast-import writing the data in the order
1142 it is received on standard input, while Git typically organizes
1143 data within packfiles to make the most recent (current tip) data
1144 appear before historical data.  Git also clusters commits together,
1145 speeding up revision traversal through better cache locality.
1147 For this reason it is strongly recommended that users repack the
1148 repository with `git repack -a -d` after fast-import completes, allowing
1149 Git to reorganize the packfiles for faster data access.  If blob
1150 deltas are suboptimal (see above) then also adding the `-f` option
1151 to force recomputation of all deltas can significantly reduce the
1152 final packfile size (30-50% smaller can be quite typical).
1155 Memory Utilization
1156 ------------------
1157 There are a number of factors which affect how much memory fast-import
1158 requires to perform an import.  Like critical sections of core
1159 Git, fast-import uses its own memory allocators to amortize any overheads
1160 associated with malloc.  In practice fast-import tends to amortize any
1161 malloc overheads to 0, due to its use of large block allocations.
1163 per object
1164 ~~~~~~~~~~
1165 fast-import maintains an in-memory structure for every object written in
1166 this execution.  On a 32 bit system the structure is 32 bytes,
1167 on a 64 bit system the structure is 40 bytes (due to the larger
1168 pointer sizes).  Objects in the table are not deallocated until
1169 fast-import terminates.  Importing 2 million objects on a 32 bit system
1170 will require approximately 64 MiB of memory.
1172 The object table is actually a hashtable keyed on the object name
1173 (the unique SHA-1).  This storage configuration allows fast-import to reuse
1174 an existing or already written object and avoid writing duplicates
1175 to the output packfile.  Duplicate blobs are surprisingly common
1176 in an import, typically due to branch merges in the source.
1178 per mark
1179 ~~~~~~~~
1180 Marks are stored in a sparse array, using 1 pointer (4 bytes or 8
1181 bytes, depending on pointer size) per mark.  Although the array
1182 is sparse, frontends are still strongly encouraged to use marks
1183 between 1 and n, where n is the total number of marks required for
1184 this import.
1186 per branch
1187 ~~~~~~~~~~
1188 Branches are classified as active and inactive.  The memory usage
1189 of the two classes is significantly different.
1191 Inactive branches are stored in a structure which uses 96 or 120
1192 bytes (32 bit or 64 bit systems, respectively), plus the length of
1193 the branch name (typically under 200 bytes), per branch.  fast-import will
1194 easily handle as many as 10,000 inactive branches in under 2 MiB
1195 of memory.
1197 Active branches have the same overhead as inactive branches, but
1198 also contain copies of every tree that has been recently modified on
1199 that branch.  If subtree `include` has not been modified since the
1200 branch became active, its contents will not be loaded into memory,
1201 but if subtree `src` has been modified by a commit since the branch
1202 became active, then its contents will be loaded in memory.
1204 As active branches store metadata about the files contained on that
1205 branch, their in-memory storage size can grow to a considerable size
1206 (see below).
1208 fast-import automatically moves active branches to inactive status based on
1209 a simple least-recently-used algorithm.  The LRU chain is updated on
1210 each `commit` command.  The maximum number of active branches can be
1211 increased or decreased on the command line with \--active-branches=.
1213 per active tree
1214 ~~~~~~~~~~~~~~~
1215 Trees (aka directories) use just 12 bytes of memory on top of the
1216 memory required for their entries (see ``per active file'' below).
1217 The cost of a tree is virtually 0, as its overhead amortizes out
1218 over the individual file entries.
1220 per active file entry
1221 ~~~~~~~~~~~~~~~~~~~~~
1222 Files (and pointers to subtrees) within active trees require 52 or 64
1223 bytes (32/64 bit platforms) per entry.  To conserve space, file and
1224 tree names are pooled in a common string table, allowing the filename
1225 ``Makefile'' to use just 16 bytes (after including the string header
1226 overhead) no matter how many times it occurs within the project.
1228 The active branch LRU, when coupled with the filename string pool
1229 and lazy loading of subtrees, allows fast-import to efficiently import
1230 projects with 2,000+ branches and 45,114+ files in a very limited
1231 memory footprint (less than 2.7 MiB per active branch).
1234 Author
1235 ------
1236 Written by Shawn O. Pearce <spearce@spearce.org>.
1238 Documentation
1239 --------------
1240 Documentation by Shawn O. Pearce <spearce@spearce.org>.
1244 Part of the linkgit:git[1] suite