blob: 19082b04eb7ec77bcf974e0c76b8d20bb736c021 [file] [log] [blame]
Junio C Hamanodf60f442007-02-07 05:52:371git-fast-import(1)
2==================
3
4NAME
5----
Junio C Hamano053827f2007-02-14 07:23:586git-fast-import - Backend for fast Git data importers
Junio C Hamanodf60f442007-02-07 05:52:377
8
9SYNOPSIS
10--------
Junio C Hamanofce7c7e2008-07-02 03:06:3811frontend | 'git fast-import' [options]
Junio C Hamanodf60f442007-02-07 05:52:3712
13DESCRIPTION
14-----------
15This program is usually not what the end user wants to run directly.
16Most end users want to use one of the existing frontend programs,
17which parses a specific type of foreign source and feeds the contents
Junio C Hamano1aa40d22010-01-21 17:46:4318stored there to 'git fast-import'.
Junio C Hamanodf60f442007-02-07 05:52:3719
Junio C Hamanod3339982007-02-09 08:38:4820fast-import reads a mixed command/data stream from standard input and
Junio C Hamanodf60f442007-02-07 05:52:3721writes one or more packfiles directly into the current repository.
22When EOF is received on standard input, fast import writes out
23updated branch and tag refs, fully updating the current repository
24with the newly imported data.
25
Junio C Hamanod3339982007-02-09 08:38:4826The fast-import backend itself can import into an empty repository (one that
Junio C Hamano1aa40d22010-01-21 17:46:4327has already been initialized by 'git init') or incrementally
Junio C Hamanodf60f442007-02-07 05:52:3728update an existing populated repository. Whether or not incremental
29imports are supported from a particular foreign source depends on
30the frontend program in use.
31
32
33OPTIONS
34-------
35--date-format=<fmt>::
36Specify the type of dates the frontend will supply to
Junio C Hamanod3339982007-02-09 08:38:4837fast-import within `author`, `committer` and `tagger` commands.
Junio C Hamanodf60f442007-02-07 05:52:3738See ``Date Formats'' below for details about which formats
39are supported, and their syntax.
40
41--force::
42Force updating modified existing branches, even if doing
43so would cause commits to be lost (as the new commit does
44not contain the old commit).
45
46--max-pack-size=<n>::
Junio C Hamanod3304322010-02-05 03:28:2747Maximum size of each output packfile.
Junio C Hamano4fdccb22010-02-19 09:58:1448The default is unlimited.
Junio C Hamanodf60f442007-02-07 05:52:3749
Junio C Hamano5c246f22010-02-03 07:34:5350--big-file-threshold=<n>::
51Maximum size of a blob that fast-import will attempt to
52create a delta for, expressed in bytes. The default is 512m
53(512 MiB). Some importers may wish to lower this on systems
54with constrained memory.
55
Junio C Hamanodf60f442007-02-07 05:52:3756--depth=<n>::
57Maximum delta depth, for blob and tree deltification.
58Default is 10.
59
60--active-branches=<n>::
61Maximum number of branches to maintain active at once.
62See ``Memory Utilization'' below for details. Default is 5.
63
64--export-marks=<file>::
65Dumps the internal marks table to <file> when complete.
66Marks are written one per line as `:markid SHA-1`.
67Frontends can use this file to validate imports after they
Junio C Hamanod15328a2007-03-09 09:06:4068have been completed, or to save the marks table across
69incremental runs. As <file> is only opened and truncated
70at checkpoint (or completion) the same path can also be
71safely given to \--import-marks.
72
73--import-marks=<file>::
74Before processing any input, load the marks specified in
75<file>. The input file must exist, must be readable, and
76must use the same format as produced by \--export-marks.
77Multiple options may be supplied to import more than one
78set of marks. If a mark is defined to different values,
79the last file wins.
Junio C Hamanodf60f442007-02-07 05:52:3780
Junio C Hamano6ce6b6c2010-01-18 01:25:5081--relative-marks::
82After specifying --relative-marks= the paths specified
83with --import-marks= and --export-marks= are relative
84to an internal directory in the current repository.
85In git-fast-import this means that the paths are relative
86to the .git/info/fast-import directory. However, other
87importers may use a different location.
88
89--no-relative-marks::
90Negates a previous --relative-marks. Allows for combining
91relative and non-relative marks by interweaving
92--(no-)-relative-marks= with the --(import|export)-marks=
93options.
94
Junio C Hamano9dd8bb02007-02-12 07:15:3595--export-pack-edges=<file>::
96After creating a packfile, print a line of data to
97<file> listing the filename of the packfile and the last
98commit on each branch that was written to that packfile.
99This information may be useful after importing projects
100whose total object set exceeds the 4 GiB packfile limit,
101as these commits can be used as edge points during calls
Junio C Hamano1aa40d22010-01-21 17:46:43102to 'git pack-objects'.
Junio C Hamano9dd8bb02007-02-12 07:15:35103
Junio C Hamanodfc4ce72007-02-07 23:17:29104--quiet::
Junio C Hamanod3339982007-02-09 08:38:48105Disable all non-fatal output, making fast-import silent when it
Junio C Hamanoba4b9282008-07-06 05:20:31106is successful. This option disables the output shown by
Junio C Hamanodfc4ce72007-02-07 23:17:29107\--stats.
108
109--stats::
Junio C Hamanod3339982007-02-09 08:38:48110Display some basic statistics about the objects fast-import has
Junio C Hamanodfc4ce72007-02-07 23:17:29111created, the packfiles they were stored into, and the
Junio C Hamanod3339982007-02-09 08:38:48112memory used by fast-import during this run. Showing this output
Junio C Hamanodfc4ce72007-02-07 23:17:29113is currently the default, but can be disabled with \--quiet.
114
115
Junio C Hamanodf60f442007-02-07 05:52:37116Performance
117-----------
Junio C Hamanod3339982007-02-09 08:38:48118The design of fast-import allows it to import large projects in a minimum
Junio C Hamanodf60f442007-02-07 05:52:37119amount of memory usage and processing time. Assuming the frontend
Junio C Hamanod3339982007-02-09 08:38:48120is able to keep up with fast-import and feed it a constant stream of data,
Junio C Hamanodf60f442007-02-07 05:52:37121import times for projects holding 10+ years of history and containing
122100,000+ individual commits are generally completed in just 1-2
123hours on quite modest (~$2,000 USD) hardware.
124
125Most bottlenecks appear to be in foreign source data access (the
Junio C Hamanod3339982007-02-09 08:38:48126source just cannot extract revisions fast enough) or disk IO (fast-import
Junio C Hamanodf60f442007-02-07 05:52:37127writes as fast as the disk will take the data). Imports will run
128faster if the source data is stored on a different drive than the
129destination Git repository (due to less IO contention).
130
131
132Development Cost
133----------------
Junio C Hamanod3339982007-02-09 08:38:48134A typical frontend for fast-import tends to weigh in at approximately 200
Junio C Hamanodf60f442007-02-07 05:52:37135lines of Perl/Python/Ruby code. Most developers have been able to
136create working importers in just a couple of hours, even though it
Junio C Hamanod3339982007-02-09 08:38:48137is their first exposure to fast-import, and sometimes even to Git. This is
Junio C Hamanodf60f442007-02-07 05:52:37138an ideal situation, given that most conversion tools are throw-away
139(use once, and never look back).
140
141
142Parallel Operation
143------------------
Junio C Hamano1aa40d22010-01-21 17:46:43144Like 'git push' or 'git fetch', imports handled by fast-import are safe to
Junio C Hamanodf60f442007-02-07 05:52:37145run alongside parallel `git repack -a -d` or `git gc` invocations,
Junio C Hamano1aa40d22010-01-21 17:46:43146or any other Git operation (including 'git prune', as loose objects
Junio C Hamanod3339982007-02-09 08:38:48147are never used by fast-import).
Junio C Hamanodf60f442007-02-07 05:52:37148
Junio C Hamanod3339982007-02-09 08:38:48149fast-import does not lock the branch or tag refs it is actively importing.
150After the import, during its ref update phase, fast-import tests each
Junio C Hamanodf60f442007-02-07 05:52:37151existing branch ref to verify the update will be a fast-forward
152update (the commit stored in the ref is contained in the new
153history of the commit to be written). If the update is not a
Junio C Hamanod3339982007-02-09 08:38:48154fast-forward update, fast-import will skip updating that ref and instead
155prints a warning message. fast-import will always attempt to update all
Junio C Hamanodf60f442007-02-07 05:52:37156branch refs, and does not stop on the first failure.
157
Junio C Hamano167b1382010-01-31 23:04:31158Branch updates can be forced with \--force, but it's recommended that
Junio C Hamanodfc4ce72007-02-07 23:17:29159this only be used on an otherwise quiet repository. Using \--force
Junio C Hamanodf60f442007-02-07 05:52:37160is not necessary for an initial import into an empty repository.
161
162
163Technical Discussion
164--------------------
Junio C Hamanod3339982007-02-09 08:38:48165fast-import tracks a set of branches in memory. Any branch can be created
Junio C Hamanodf60f442007-02-07 05:52:37166or modified at any point during the import process by sending a
167`commit` command on the input stream. This design allows a frontend
168program to process an unlimited number of branches simultaneously,
169generating commits in the order they are available from the source
170data. It also simplifies the frontend programs considerably.
171
Junio C Hamanod3339982007-02-09 08:38:48172fast-import does not use or alter the current working directory, or any
Junio C Hamanodf60f442007-02-07 05:52:37173file within it. (It does however update the current Git repository,
174as referenced by `GIT_DIR`.) Therefore an import frontend may use
175the working directory for its own purposes, such as extracting file
176revisions from the foreign source. This ignorance of the working
Junio C Hamanod3339982007-02-09 08:38:48177directory also allows fast-import to run very quickly, as it does not
Junio C Hamanodf60f442007-02-07 05:52:37178need to perform any costly file update operations when switching
179between branches.
180
181Input Format
182------------
183With the exception of raw file data (which Git does not interpret)
Junio C Hamanod3339982007-02-09 08:38:48184the fast-import input format is text (ASCII) based. This text based
Junio C Hamanodf60f442007-02-07 05:52:37185format simplifies development and debugging of frontend programs,
186especially when a higher level language such as Perl, Python or
187Ruby is being used.
188
Junio C Hamanod3339982007-02-09 08:38:48189fast-import is very strict about its input. Where we say SP below we mean
Junio C Hamanodf60f442007-02-07 05:52:37190*exactly* one space. Likewise LF means one (and only one) linefeed.
191Supplying additional whitespace characters will cause unexpected
192results, such as branch names or file names with leading or trailing
Junio C Hamanod3339982007-02-09 08:38:48193spaces in their name, or early termination of fast-import when it encounters
Junio C Hamanodf60f442007-02-07 05:52:37194unexpected input.
195
Junio C Hamanoe52cf782007-08-19 19:15:52196Stream Comments
197~~~~~~~~~~~~~~~
198To aid in debugging frontends fast-import ignores any line that
199begins with `#` (ASCII pound/hash) up to and including the line
200ending `LF`. A comment line may contain any sequence of bytes
201that does not contain an LF and therefore may be used to include
202any detailed debugging information that might be specific to the
203frontend and useful when inspecting a fast-import data stream.
204
Junio C Hamanodf60f442007-02-07 05:52:37205Date Formats
206~~~~~~~~~~~~
207The following date formats are supported. A frontend should select
208the format it will use for this import by passing the format name
Junio C Hamanodfc4ce72007-02-07 23:17:29209in the \--date-format=<fmt> command line option.
Junio C Hamanodf60f442007-02-07 05:52:37210
211`raw`::
Junio C Hamanodfc4ce72007-02-07 23:17:29212This is the Git native format and is `<time> SP <offutc>`.
Junio C Hamanod3339982007-02-09 08:38:48213It is also fast-import's default format, if \--date-format was
Junio C Hamanodf60f442007-02-07 05:52:37214not specified.
215+
216The time of the event is specified by `<time>` as the number of
217seconds since the UNIX epoch (midnight, Jan 1, 1970, UTC) and is
218written as an ASCII decimal integer.
219+
Junio C Hamanodfc4ce72007-02-07 23:17:29220The local offset is specified by `<offutc>` as a positive or negative
221offset from UTC. For example EST (which is 5 hours behind UTC)
222would be expressed in `<tz>` by ``-0500'' while UTC is ``+0000''.
223The local offset does not affect `<time>`; it is used only as an
224advisement to help formatting routines display the timestamp.
Junio C Hamanodf60f442007-02-07 05:52:37225+
Junio C Hamanodfc4ce72007-02-07 23:17:29226If the local offset is not available in the source material, use
227``+0000'', or the most common local offset. For example many
Junio C Hamanodf60f442007-02-07 05:52:37228organizations have a CVS repository which has only ever been accessed
229by users who are located in the same location and timezone. In this
Junio C Hamanod3339982007-02-09 08:38:48230case a reasonable offset from UTC could be assumed.
Junio C Hamanodf60f442007-02-07 05:52:37231+
232Unlike the `rfc2822` format, this format is very strict. Any
Junio C Hamanod3339982007-02-09 08:38:48233variation in formatting will cause fast-import to reject the value.
Junio C Hamanodf60f442007-02-07 05:52:37234
235`rfc2822`::
236This is the standard email format as described by RFC 2822.
237+
238An example value is ``Tue Feb 6 11:22:18 2007 -0500''. The Git
Junio C Hamanod3339982007-02-09 08:38:48239parser is accurate, but a little on the lenient side. It is the
Junio C Hamano1aa40d22010-01-21 17:46:43240same parser used by 'git am' when applying patches
Junio C Hamanodf60f442007-02-07 05:52:37241received from email.
242+
243Some malformed strings may be accepted as valid dates. In some of
244these cases Git will still be able to obtain the correct date from
245the malformed string. There are also some types of malformed
246strings which Git will parse wrong, and yet consider valid.
247Seriously malformed strings will be rejected.
248+
Junio C Hamanodfc4ce72007-02-07 23:17:29249Unlike the `raw` format above, the timezone/UTC offset information
250contained in an RFC 2822 date string is used to adjust the date
251value to UTC prior to storage. Therefore it is important that
252this information be as accurate as possible.
253+
Junio C Hamanod3339982007-02-09 08:38:48254If the source material uses RFC 2822 style dates,
255the frontend should let fast-import handle the parsing and conversion
Junio C Hamanodf60f442007-02-07 05:52:37256(rather than attempting to do it itself) as the Git parser has
257been well tested in the wild.
258+
259Frontends should prefer the `raw` format if the source material
Junio C Hamanod3339982007-02-09 08:38:48260already uses UNIX-epoch format, can be coaxed to give dates in that
Junio C Hamanoa6387422007-08-25 03:54:27261format, or its format is easily convertible to it, as there is no
Junio C Hamanod3339982007-02-09 08:38:48262ambiguity in parsing.
Junio C Hamanodf60f442007-02-07 05:52:37263
264`now`::
265Always use the current time and timezone. The literal
266`now` must always be supplied for `<when>`.
267+
268This is a toy format. The current time and timezone of this system
269is always copied into the identity string at the time it is being
Junio C Hamanod3339982007-02-09 08:38:48270created by fast-import. There is no way to specify a different time or
Junio C Hamanodf60f442007-02-07 05:52:37271timezone.
272+
Junio C Hamano167b1382010-01-31 23:04:31273This particular format is supplied as it's short to implement and
Junio C Hamanodf60f442007-02-07 05:52:37274may be useful to a process that wants to create a new commit
275right now, without needing to use a working directory or
Junio C Hamano1aa40d22010-01-21 17:46:43276'git update-index'.
Junio C Hamanodf60f442007-02-07 05:52:37277+
278If separate `author` and `committer` commands are used in a `commit`
279the timestamps may not match, as the system clock will be polled
280twice (once for each command). The only way to ensure that both
281author and committer identity information has the same timestamp
282is to omit `author` (thus copying from `committer`) or to use a
283date format other than `now`.
284
285Commands
286~~~~~~~~
Junio C Hamanod3339982007-02-09 08:38:48287fast-import accepts several commands to update the current repository
Junio C Hamanodf60f442007-02-07 05:52:37288and control the current import process. More detailed discussion
289(with examples) of each command follows later.
290
291`commit`::
292Creates a new branch or updates an existing branch by
293creating a new commit and updating the branch to point at
294the newly created commit.
295
296`tag`::
297Creates an annotated tag object from an existing commit or
298branch. Lightweight tags are not supported by this command,
299as they are not recommended for recording meaningful points
300in time.
301
302`reset`::
303Reset an existing branch (or a new branch) to a specific
304revision. This command must be used to change a branch to
305a specific revision without making a commit on it.
306
307`blob`::
308Convert raw file data into a blob, for future use in a
309`commit` command. This command is optional and is not
310needed to perform an import.
311
312`checkpoint`::
Junio C Hamanod3339982007-02-09 08:38:48313Forces fast-import to close the current packfile, generate its
Junio C Hamanodf60f442007-02-07 05:52:37314unique SHA-1 checksum and index, and start a new packfile.
315This command is optional and is not needed to perform
316an import.
317
Junio C Hamanoe52cf782007-08-19 19:15:52318`progress`::
319Causes fast-import to echo the entire line to its own
320standard output. This command is optional and is not needed
321to perform an import.
322
Junio C Hamano6ce6b6c2010-01-18 01:25:50323`feature`::
324Require that fast-import supports the specified feature, or
325abort if it does not.
326
327`option`::
328Specify any of the options listed under OPTIONS that do not
329change stream semantic to suit the frontend's needs. This
330command is optional and is not needed to perform an import.
331
Junio C Hamanodf60f442007-02-07 05:52:37332`commit`
333~~~~~~~~
334Create or update a branch with a new commit, recording one logical
335change to the project.
336
337....
338'commit' SP <ref> LF
339mark?
Junio C Hamano6d325df2010-01-01 00:02:47340('author' (SP <name>)? SP LT <email> GT SP <when> LF)?
341'committer' (SP <name>)? SP LT <email> GT SP <when> LF
Junio C Hamanodf60f442007-02-07 05:52:37342data
343('from' SP <committish> LF)?
344('merge' SP <committish> LF)?
Junio C Hamano3b70d3c2009-11-21 17:37:37345(filemodify | filedelete | filecopy | filerename | filedeleteall | notemodify)*
Junio C Hamanoe52cf782007-08-19 19:15:52346LF?
Junio C Hamanodf60f442007-02-07 05:52:37347....
348
349where `<ref>` is the name of the branch to make the commit on.
350Typically branch names are prefixed with `refs/heads/` in
351Git, 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
354a Git refname, no quoting or escaping syntax is supported here.
355
Junio C Hamanod3339982007-02-09 08:38:48356A `mark` command may optionally appear, requesting fast-import to save a
Junio C Hamanodf60f442007-02-07 05:52:37357reference to the newly created commit for future use by the frontend
358(see below for format). It is very common for frontends to mark
359every commit they create, thereby allowing future branch creation
360from any imported commit.
361
362The `data` command following `committer` must supply the commit
363message (see below for `data` command syntax). To import an empty
364commit message use a 0 length data. Commit messages are free-form
365and are not interpreted by Git. Currently they must be encoded in
Junio C Hamanod3339982007-02-09 08:38:48366UTF-8, as fast-import does not permit other encodings to be specified.
Junio C Hamanodf60f442007-02-07 05:52:37367
Junio C Hamano3b70d3c2009-11-21 17:37:37368Zero or more `filemodify`, `filedelete`, `filecopy`, `filerename`,
369`filedeleteall` and `notemodify` commands
Junio C Hamanodfc4ce72007-02-07 23:17:29370may be included to update the contents of the branch prior to
371creating the commit. These commands may be supplied in any order.
Junio C Hamanoa6387422007-08-25 03:54:27372However it is recommended that a `filedeleteall` command precede
Junio C Hamano3b70d3c2009-11-21 17:37:37373all `filemodify`, `filecopy`, `filerename` and `notemodify` commands in
374the same commit, as `filedeleteall` wipes the branch clean (see below).
Junio C Hamanodf60f442007-02-07 05:52:37375
Junio C Hamanoe52cf782007-08-19 19:15:52376The `LF` after the command is optional (it used to be required).
377
Junio C Hamanodf60f442007-02-07 05:52:37378`author`
379^^^^^^^^
380An `author` command may optionally appear, if the author information
381might differ from the committer information. If `author` is omitted
Junio C Hamanod3339982007-02-09 08:38:48382then fast-import will automatically use the committer's information for
Junio C Hamanodf60f442007-02-07 05:52:37383the author portion of the commit. See below for a description of
384the fields in `author`, as they are identical to `committer`.
385
386`committer`
387^^^^^^^^^^^
388The `committer` command indicates who made this commit, and when
389they made it.
390
391Here `<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)
394and greater-than (\x3e) symbols. These are required to delimit
395the 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.
398
399The time of the change is specified by `<when>` using the date format
Junio C Hamanodfc4ce72007-02-07 23:17:29400that was selected by the \--date-format=<fmt> command line option.
Junio C Hamanodf60f442007-02-07 05:52:37401See ``Date Formats'' above for the set of supported formats, and
402their syntax.
403
404`from`
405^^^^^^
Junio C Hamano5dad0832007-02-13 05:16:23406The `from` command is used to specify the commit to initialize
407this branch from. This revision will be the first ancestor of the
408new commit.
Junio C Hamanodf60f442007-02-07 05:52:37409
Junio C Hamano5dad0832007-02-13 05:16:23410Omitting the `from` command in the first commit of a new branch
411will cause fast-import to create that commit with no ancestor. This
412tends to be desired only for the initial commit of a project.
Junio C Hamano25c0b702008-03-23 09:41:37413If the frontend creates all files from scratch when making a new
414branch, a `merge` command may be used instead of `from` to start
415the commit with an empty tree.
Junio C Hamano5dad0832007-02-13 05:16:23416Omitting the `from` command on existing branches is usually desired,
417as the current commit on that branch is automatically assumed to
418be the first ancestor of the new commit.
Junio C Hamanodf60f442007-02-07 05:52:37419
420As `LF` is not valid in a Git refname or SHA-1 expression, no
421quoting or escaping syntax is supported within `<committish>`.
422
423Here `<committish>` is any of the following:
424
Junio C Hamanod3339982007-02-09 08:38:48425* The name of an existing branch already in fast-import's internal branch
Junio C Hamano167b1382010-01-31 23:04:31426 table. If fast-import doesn't know the name, it's treated as a SHA-1
Junio C Hamanodf60f442007-02-07 05:52:37427 expression.
428
429* A mark reference, `:<idnum>`, where `<idnum>` is the mark number.
430+
Junio C Hamanod3339982007-02-09 08:38:48431The reason fast-import uses `:` to denote a mark reference is this character
Junio C Hamanodf60f442007-02-07 05:52:37432is not legal in a Git branch name. The leading `:` makes it easy
Junio C Hamanoa6387422007-08-25 03:54:27433to distinguish between the mark 42 (`:42`) and the branch 42 (`42`
Junio C Hamanodf60f442007-02-07 05:52:37434or `refs/heads/42`), or an abbreviated SHA-1 which happened to
435consist only of base-10 digits.
436+
437Marks must be declared (via `mark`) before they can be used.
438
439* A complete 40 byte or abbreviated commit SHA-1 in hex.
440
441* Any valid Git SHA-1 expression that resolves to a commit. See
Junio C Hamano35738e82008-01-07 07:55:46442 ``SPECIFYING REVISIONS'' in linkgit:git-rev-parse[1] for details.
Junio C Hamanodf60f442007-02-07 05:52:37443
444The special case of restarting an incremental import from the
445current branch value should be written as:
446----
447from refs/heads/branch^0
448----
Junio C Hamanod3339982007-02-09 08:38:48449The `{caret}0` suffix is necessary as fast-import does not permit a branch to
Junio C Hamanodf60f442007-02-07 05:52:37450start from itself, and the branch is created in memory before the
Junio C Hamanod3339982007-02-09 08:38:48451`from` command is even read from the input. Adding `{caret}0` will force
452fast-import to resolve the commit through Git's revision parsing library,
Junio C Hamanodf60f442007-02-07 05:52:37453rather than its internal branch table, thereby loading in the
454existing value of the branch.
455
456`merge`
457^^^^^^^
Junio C Hamano25c0b702008-03-23 09:41:37458Includes one additional ancestor commit. If the `from` command is
459omitted when creating a new branch, the first `merge` commit will be
460the first ancestor of the current commit, and the branch will start
461out with no files. An unlimited number of `merge` commands per
Junio C Hamanod3339982007-02-09 08:38:48462commit are permitted by fast-import, thereby establishing an n-way merge.
Junio C Hamanodf60f442007-02-07 05:52:37463However Git's other tools never create commits with more than 15
464additional ancestors (forming a 16-way merge). For this reason
465it is suggested that frontends do not use more than 15 `merge`
Junio C Hamano25c0b702008-03-23 09:41:37466commands per commit; 16, if starting a new, empty branch.
Junio C Hamanodf60f442007-02-07 05:52:37467
468Here `<committish>` is any of the commit specification expressions
469also accepted by `from` (see above).
470
471`filemodify`
472^^^^^^^^^^^^
473Included in a `commit` command to add a new file or change the
474content of an existing file. This command has two different means
475of specifying the content of the file.
476
477External data format::
478The data content for the file was already supplied by a prior
479`blob` command. The frontend just needs to connect it.
480+
481....
482'M' SP <mode> SP <dataref> SP <path> LF
483....
484+
485Here `<dataref>` can be either a mark reference (`:<idnum>`)
486set by a prior `blob` command, or a full 40-byte SHA-1 of an
487existing Git blob object.
488
489Inline data format::
490The data content for the file has not been supplied yet.
491The frontend wants to supply it as part of this modify
492command.
493+
494....
495'M' SP <mode> SP 'inline' SP <path> LF
496data
497....
498+
499See below for a detailed description of the `data` command.
500
501In both formats `<mode>` is the type of file entry, specified
502in octal. Git only supports the following modes:
503
504* `100644` or `644`: A normal (not-executable) file. The majority
505 of files in most projects use this mode. If in doubt, this is
506 what you want.
507* `100755` or `755`: A normal, but executable, file.
508* `120000`: A symlink, the content of the file will be the link target.
Junio C Hamano915cd9b2008-07-20 01:24:17509* `160000`: A gitlink, SHA-1 of the object refers to a commit in
510 another repository. Git links can only be specified by SHA or through
511 a commit mark. They are used to implement submodules.
Junio C Hamanodf60f442007-02-07 05:52:37512
513In both formats `<path>` is the complete path of the file to be added
514(if not already existing) or modified (if already existing).
515
Junio C Hamanoc51fede2007-03-12 07:29:20516A `<path>` string must use UNIX-style directory separators (forward
Junio C Hamanodf60f442007-02-07 05:52:37517slash `/`), may contain any byte other than `LF`, and must not
518start with double quote (`"`).
519
520If an `LF` or double quote must be encoded into `<path>` shell-style
521quoting should be used, e.g. `"path/with\n and \" in it"`.
522
Junio C Hamanoa6387422007-08-25 03:54:27523The value of `<path>` must be in canonical form. That is it must not:
Junio C Hamanodf60f442007-02-07 05:52:37524
525* contain an empty directory component (e.g. `foo//bar` is invalid),
Junio C Hamanoc51fede2007-03-12 07:29:20526* end with a directory separator (e.g. `foo/` is invalid),
527* start with a directory separator (e.g. `/foo` is invalid),
Junio C Hamanodf60f442007-02-07 05:52:37528* contain the special component `.` or `..` (e.g. `foo/./bar` and
529 `foo/../bar` are invalid).
530
531It is recommended that `<path>` always be encoded using UTF-8.
532
533`filedelete`
534^^^^^^^^^^^^
Junio C Hamano06216df2007-07-10 07:49:37535Included in a `commit` command to remove a file or recursively
536delete an entire directory from the branch. If the file or directory
537removal makes its parent directory empty, the parent directory will
Junio C Hamanodf60f442007-02-07 05:52:37538be automatically removed too. This cascades up the tree until the
539first non-empty directory or the root is reached.
540
541....
542'D' SP <path> LF
543....
544
Junio C Hamano06216df2007-07-10 07:49:37545here `<path>` is the complete path of the file or subdirectory to
546be removed from the branch.
Junio C Hamanodf60f442007-02-07 05:52:37547See `filemodify` above for a detailed description of `<path>`.
548
Junio C Hamanoc0ea7c62007-07-15 07:19:06549`filecopy`
550^^^^^^^^^^^^
551Recursively copies an existing file or subdirectory to a different
552location within the branch. The existing file or directory must
553exist. If the destination exists it will be completely replaced
554by the content copied from the source.
555
556....
557'C' SP <path> SP <path> LF
558....
559
560here the first `<path>` is the source location and the second
561`<path>` is the destination. See `filemodify` above for a detailed
562description of what `<path>` may look like. To use a source path
563that contains SP the path must be quoted.
564
565A `filecopy` command takes effect immediately. Once the source
566location has been copied to the destination any future commands
567applied to the source location will not impact the destination of
568the copy.
569
Junio C Hamano06216df2007-07-10 07:49:37570`filerename`
571^^^^^^^^^^^^
572Renames an existing file or subdirectory to a different location
573within the branch. The existing file or directory must exist. If
574the destination exists it will be replaced by the source directory.
575
576....
577'R' SP <path> SP <path> LF
578....
579
580here the first `<path>` is the source location and the second
581`<path>` is the destination. See `filemodify` above for a detailed
582description of what `<path>` may look like. To use a source path
583that contains SP the path must be quoted.
584
585A `filerename` command takes effect immediately. Once the source
586location has been renamed to the destination any future commands
587applied to the source location will create new files there and not
588impact the destination of the rename.
589
Junio C Hamanoc0ea7c62007-07-15 07:19:06590Note that a `filerename` is the same as a `filecopy` followed by a
591`filedelete` of the source location. There is a slight performance
592advantage to using `filerename`, but the advantage is so small
593that it is never worth trying to convert a delete/add pair in
594source material into a rename for fast-import. This `filerename`
595command is provided just to simplify frontends that already have
596rename information and don't want bother with decomposing it into a
597`filecopy` followed by a `filedelete`.
598
Junio C Hamanodfc4ce72007-02-07 23:17:29599`filedeleteall`
600^^^^^^^^^^^^^^^
601Included in a `commit` command to remove all files (and also all
602directories) from the branch. This command resets the internal
603branch structure to have no files in it, allowing the frontend
604to subsequently add all interesting files from scratch.
605
606....
607'deleteall' LF
608....
609
610This command is extremely useful if the frontend does not know
611(or does not care to know) what files are currently on the branch,
612and therefore cannot generate the proper `filedelete` commands to
613update the content.
614
615Issuing a `filedeleteall` followed by the needed `filemodify`
616commands to set the correct content will produce the same results
617as sending only the needed `filemodify` and `filedelete` commands.
Junio C Hamanod3339982007-02-09 08:38:48618The `filedeleteall` approach may however require fast-import to use slightly
Junio C Hamanodfc4ce72007-02-07 23:17:29619more memory per active branch (less than 1 MiB for even most large
620projects); so frontends that can easily obtain only the affected
621paths for a commit are encouraged to do so.
622
Junio C Hamano3b70d3c2009-11-21 17:37:37623`notemodify`
624^^^^^^^^^^^^
625Included in a `commit` command to add a new note (annotating a given
626commit) or change the content of an existing note. This command has
627two different means of specifying the content of the note.
628
629External data format::
630The data content for the note was already supplied by a prior
631`blob` command. The frontend just needs to connect it to the
632commit that is to be annotated.
633+
634....
635'N' SP <dataref> SP <committish> LF
636....
637+
638Here `<dataref>` can be either a mark reference (`:<idnum>`)
639set by a prior `blob` command, or a full 40-byte SHA-1 of an
640existing Git blob object.
641
642Inline data format::
643The data content for the note has not been supplied yet.
644The frontend wants to supply it as part of this modify
645command.
646+
647....
648'N' SP 'inline' SP <committish> LF
649data
650....
651+
652See below for a detailed description of the `data` command.
653
654In both formats `<committish>` is any of the commit specification
655expressions also accepted by `from` (see above).
656
Junio C Hamanodf60f442007-02-07 05:52:37657`mark`
658~~~~~~
Junio C Hamanod3339982007-02-09 08:38:48659Arranges for fast-import to save a reference to the current object, allowing
Junio C Hamanodf60f442007-02-07 05:52:37660the frontend to recall this object at a future point in time, without
661knowing its SHA-1. Here the current object is the object creation
662command the `mark` command appears within. This can be `commit`,
663`tag`, and `blob`, but `commit` is the most common usage.
664
665....
666'mark' SP ':' <idnum> LF
667....
668
669where `<idnum>` is the number assigned by the frontend to this mark.
670The value of `<idnum>` is expressed as an ASCII decimal integer.
671The value 0 is reserved and cannot be used as
672a mark. Only values greater than or equal to 1 may be used as marks.
673
674New marks are created automatically. Existing marks can be moved
675to another object simply by reusing the same `<idnum>` in another
676`mark` command.
677
678`tag`
679~~~~~
680Creates an annotated tag referring to a specific commit. To create
681lightweight (non-annotated) tags see the `reset` command below.
682
683....
684'tag' SP <name> LF
685'from' SP <committish> LF
Junio C Hamano6d325df2010-01-01 00:02:47686'tagger' (SP <name>)? SP LT <email> GT SP <when> LF
Junio C Hamanodf60f442007-02-07 05:52:37687data
Junio C Hamanodf60f442007-02-07 05:52:37688....
689
690where `<name>` is the name of the tag to create.
691
692Tag names are automatically prefixed with `refs/tags/` when stored
693in Git, so importing the CVS branch symbol `RELENG-1_0-FINAL` would
Junio C Hamanod3339982007-02-09 08:38:48694use just `RELENG-1_0-FINAL` for `<name>`, and fast-import will write the
Junio C Hamanodf60f442007-02-07 05:52:37695corresponding ref as `refs/tags/RELENG-1_0-FINAL`.
696
697The value of `<name>` must be a valid refname in Git and therefore
698may contain forward slashes. As `LF` is not valid in a Git refname,
699no quoting or escaping syntax is supported here.
700
701The `from` command is the same as in the `commit` command; see
702above for details.
703
704The `tagger` command uses the same format as `committer` within
705`commit`; again see above for details.
706
707The `data` command following `tagger` must supply the annotated tag
708message (see below for `data` command syntax). To import an empty
709tag message use a 0 length data. Tag messages are free-form and are
710not interpreted by Git. Currently they must be encoded in UTF-8,
Junio C Hamanod3339982007-02-09 08:38:48711as fast-import does not permit other encodings to be specified.
Junio C Hamanodf60f442007-02-07 05:52:37712
Junio C Hamanod3339982007-02-09 08:38:48713Signing annotated tags during import from within fast-import is not
Junio C Hamanodf60f442007-02-07 05:52:37714supported. Trying to include your own PGP/GPG signature is not
715recommended, as the frontend does not (easily) have access to the
716complete set of bytes which normally goes into such a signature.
Junio C Hamanod3339982007-02-09 08:38:48717If signing is required, create lightweight tags from within fast-import with
Junio C Hamanodf60f442007-02-07 05:52:37718`reset`, then create the annotated versions of those tags offline
Junio C Hamano1aa40d22010-01-21 17:46:43719with the standard 'git tag' process.
Junio C Hamanodf60f442007-02-07 05:52:37720
721`reset`
722~~~~~~~
723Creates (or recreates) the named branch, optionally starting from
724a specific revision. The reset command allows a frontend to issue
725a new `from` command for an existing branch, or to create a new
726branch from an existing commit without creating a new commit.
727
728....
729'reset' SP <ref> LF
730('from' SP <committish> LF)?
Junio C Hamanoe52cf782007-08-19 19:15:52731LF?
Junio C Hamanodf60f442007-02-07 05:52:37732....
733
734For a detailed description of `<ref>` and `<committish>` see above
735under `commit` and `from`.
736
Junio C Hamanoe52cf782007-08-19 19:15:52737The `LF` after the command is optional (it used to be required).
738
Junio C Hamanodf60f442007-02-07 05:52:37739The `reset` command can also be used to create lightweight
740(non-annotated) tags. For example:
741
742====
743reset refs/tags/938
744from :938
745====
746
747would create the lightweight tag `refs/tags/938` referring to
748whatever commit mark `:938` references.
749
750`blob`
751~~~~~~
752Requests writing one file revision to the packfile. The revision
753is not connected to any commit; this connection must be formed in
754a subsequent `commit` command by referencing the blob through an
755assigned mark.
756
757....
758'blob' LF
759mark?
760data
761....
762
763The mark command is optional here as some frontends have chosen
764to generate the Git SHA-1 for the blob on their own, and feed that
Junio C Hamano167b1382010-01-31 23:04:31765directly to `commit`. This is typically more work than it's worth
Junio C Hamanodf60f442007-02-07 05:52:37766however, as marks are inexpensive to store and easy to use.
767
768`data`
769~~~~~~
770Supplies raw data (for use as blob/file content, commit messages, or
Junio C Hamanod3339982007-02-09 08:38:48771annotated tag messages) to fast-import. Data can be supplied using an exact
Junio C Hamanodf60f442007-02-07 05:52:37772byte count or delimited with a terminating line. Real frontends
773intended for production-quality conversions should always use the
774exact byte count format, as it is more robust and performs better.
Junio C Hamanod3339982007-02-09 08:38:48775The delimited format is intended primarily for testing fast-import.
Junio C Hamanodf60f442007-02-07 05:52:37776
Junio C Hamanoe52cf782007-08-19 19:15:52777Comment lines appearing within the `<raw>` part of `data` commands
778are always taken to be part of the body of the data and are therefore
779never ignored by fast-import. This makes it safe to import any
780file/message content whose lines might start with `#`.
781
Junio C Hamanodf60f442007-02-07 05:52:37782Exact byte count format::
783The frontend must specify the number of bytes of data.
784+
785....
786'data' SP <count> LF
Junio C Hamanoe52cf782007-08-19 19:15:52787<raw> LF?
Junio C Hamanodf60f442007-02-07 05:52:37788....
789+
790where `<count>` is the exact number of bytes appearing within
791`<raw>`. The value of `<count>` is expressed as an ASCII decimal
792integer. The `LF` on either side of `<raw>` is not
793included in `<count>` and will not be included in the imported data.
Junio C Hamanoe52cf782007-08-19 19:15:52794+
795The `LF` after `<raw>` is optional (it used to be required) but
796recommended. Always including it makes debugging a fast-import
797stream easier as the next command always starts in column 0
798of the next line, even if `<raw>` did not end with an `LF`.
Junio C Hamanodf60f442007-02-07 05:52:37799
800Delimited format::
801A delimiter string is used to mark the end of the data.
Junio C Hamanod3339982007-02-09 08:38:48802fast-import will compute the length by searching for the delimiter.
Junio C Hamanoa6387422007-08-25 03:54:27803This format is primarily useful for testing and is not
Junio C Hamanodf60f442007-02-07 05:52:37804recommended for real data.
805+
806....
807'data' SP '<<' <delim> LF
808<raw> LF
809<delim> LF
Junio C Hamanoe52cf782007-08-19 19:15:52810LF?
Junio C Hamanodf60f442007-02-07 05:52:37811....
812+
813where `<delim>` is the chosen delimiter string. The string `<delim>`
814must not appear on a line by itself within `<raw>`, as otherwise
Junio C Hamanod3339982007-02-09 08:38:48815fast-import will think the data ends earlier than it really does. The `LF`
Junio C Hamanodf60f442007-02-07 05:52:37816immediately trailing `<raw>` is part of `<raw>`. This is one of
817the limitations of the delimited format, it is impossible to supply
818a data chunk which does not have an LF as its last byte.
Junio C Hamanoe52cf782007-08-19 19:15:52819+
820The `LF` after `<delim> LF` is optional (it used to be required).
Junio C Hamanodf60f442007-02-07 05:52:37821
822`checkpoint`
823~~~~~~~~~~~~
Junio C Hamanod3339982007-02-09 08:38:48824Forces fast-import to close the current packfile, start a new one, and to
Junio C Hamanodfc4ce72007-02-07 23:17:29825save out all current branch refs, tags and marks.
Junio C Hamanodf60f442007-02-07 05:52:37826
827....
828'checkpoint' LF
Junio C Hamanoe52cf782007-08-19 19:15:52829LF?
Junio C Hamanodf60f442007-02-07 05:52:37830....
831
Junio C Hamanod3339982007-02-09 08:38:48832Note that fast-import automatically switches packfiles when the current
Junio C Hamanodfc4ce72007-02-07 23:17:29833packfile reaches \--max-pack-size, or 4 GiB, whichever limit is
Junio C Hamanod3339982007-02-09 08:38:48834smaller. During an automatic packfile switch fast-import does not update
Junio C Hamanodfc4ce72007-02-07 23:17:29835the branch refs, tags or marks.
836
837As a `checkpoint` can require a significant amount of CPU time and
838disk IO (to compute the overall pack SHA-1 checksum, generate the
839corresponding index file, and update the refs) it can easily take
840several minutes for a single `checkpoint` command to complete.
841
842Frontends may choose to issue checkpoints during extremely large
843and long running imports, or when they need to allow another Git
844process access to a branch. However given that a 30 GiB Subversion
Junio C Hamanod3339982007-02-09 08:38:48845repository can be loaded into Git through fast-import in about 3 hours,
Junio C Hamanodfc4ce72007-02-07 23:17:29846explicit checkpointing may not be necessary.
847
Junio C Hamanoe52cf782007-08-19 19:15:52848The `LF` after the command is optional (it used to be required).
849
850`progress`
851~~~~~~~~~~
852Causes fast-import to print the entire `progress` line unmodified to
853its standard output channel (file descriptor 1) when the command is
854processed from the input stream. The command otherwise has no impact
855on the current import, or on any of fast-import's internal state.
856
857....
858'progress' SP <any> LF
859LF?
860....
861
862The `<any>` part of the command may contain any sequence of bytes
863that does not contain `LF`. The `LF` after the command is optional.
864Callers may wish to process the output through a tool such as sed to
865remove the leading part of the line, for example:
866
867====
Junio C Hamanofce7c7e2008-07-02 03:06:38868frontend | git fast-import | sed 's/^progress //'
Junio C Hamanoe52cf782007-08-19 19:15:52869====
870
871Placing a `progress` command immediately after a `checkpoint` will
872inform the reader when the `checkpoint` has been completed and it
873can safely access the refs that fast-import updated.
Junio C Hamanodfc4ce72007-02-07 23:17:29874
Junio C Hamano6ce6b6c2010-01-18 01:25:50875`feature`
876~~~~~~~~~
877Require that fast-import supports the specified feature, or abort if
878it does not.
879
880....
881'feature' SP <feature> LF
882....
883
884The <feature> part of the command may be any string matching
885^[a-zA-Z][a-zA-Z-]*$ and should be understood by fast-import.
886
887Feature work identical as their option counterparts with the
888exception of the import-marks feature, see below.
889
890The following features are currently supported:
891
892* date-format
893* import-marks
894* export-marks
895* relative-marks
896* no-relative-marks
897* force
898
899The import-marks behaves differently from when it is specified as
900commandline option in that only one "feature import-marks" is allowed
901per stream. Also, any --import-marks= specified on the commandline
902will override those from the stream (if any).
903
904`option`
905~~~~~~~~
906Processes the specified option so that git fast-import behaves in a
907way that suits the frontend's needs.
908Note that options specified by the frontend are overridden by any
909options the user may specify to git fast-import itself.
910
911....
912 'option' SP <option> LF
913....
914
915The `<option>` part of the command may contain any of the options
916listed in the OPTIONS section that do not change import semantics,
917without the leading '--' and is treated in the same way.
918
919Option commands must be the first commands on the input (not counting
920feature commands), to give an option command after any non-option
921command is an error.
922
923The following commandline options change import semantics and may therefore
924not be passed as option:
925
926* date-format
927* import-marks
928* export-marks
929* force
930
Junio C Hamano21391932008-02-16 10:02:54931Crash Reports
932-------------
933If fast-import is supplied invalid input it will terminate with a
934non-zero exit status and create a crash report in the top level of
935the Git repository it was importing into. Crash reports contain
936a snapshot of the internal fast-import state as well as the most
937recent commands that lead up to the crash.
938
939All recent commands (including stream comments, file changes and
940progress commands) are shown in the command history within the crash
941report, but raw file data and commit messages are excluded from the
942crash report. This exclusion saves space within the report file
943and reduces the amount of buffering that fast-import must perform
944during execution.
945
946After writing a crash report fast-import will close the current
947packfile and export the marks table. This allows the frontend
948developer to inspect the repository state and resume the import from
949the point where it crashed. The modified branches and tags are not
950updated during a crash, as the import did not complete successfully.
951Branch and tag information can be found in the crash report and
952must be applied manually if the update is needed.
953
954An example crash:
955
956====
957$ cat >in <<END_OF_INPUT
958# my very first test commit
959commit refs/heads/master
960committer Shawn O. Pearce <spearce> 19283 -0400
961# who is that guy anyway?
962data <<EOF
963this is my commit
964EOF
965M 644 inline .gitignore
966data <<EOF
967.gitignore
968EOF
969M 777 inline bob
970END_OF_INPUT
971
Junio C Hamanofce7c7e2008-07-02 03:06:38972$ git fast-import <in
Junio C Hamano21391932008-02-16 10:02:54973fatal: Corrupt mode: M 777 inline bob
974fast-import: dumping crash report to .git/fast_import_crash_8434
975
976$ cat .git/fast_import_crash_8434
977fast-import crash report:
978 fast-import process: 8434
979 parent process : 1391
980 at Sat Sep 1 00:58:12 2007
981
982fatal: Corrupt mode: M 777 inline bob
983
984Most Recent Commands Before Crash
985---------------------------------
986 # my very first test commit
987 commit refs/heads/master
988 committer Shawn O. Pearce <spearce> 19283 -0400
989 # who is that guy anyway?
990 data <<EOF
991 M 644 inline .gitignore
992 data <<EOF
993* M 777 inline bob
994
995Active Branch LRU
996-----------------
997 active_branches = 1 cur, 5 max
998
999 pos clock name
1000 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1001 1) 0 refs/heads/master
1002
1003Inactive Branches
1004-----------------
1005refs/heads/master:
1006 status : active loaded dirty
1007 tip commit : 0000000000000000000000000000000000000000
1008 old tree : 0000000000000000000000000000000000000000
1009 cur tree : 0000000000000000000000000000000000000000
1010 commit clock: 0
1011 last pack :
1012
1013
1014-------------------
1015END OF CRASH REPORT
1016====
1017
Junio C Hamanodfc4ce72007-02-07 23:17:291018Tips and Tricks
1019---------------
1020The following tips and tricks have been collected from various
Junio C Hamanod3339982007-02-09 08:38:481021users of fast-import, and are offered here as suggestions.
Junio C Hamanodfc4ce72007-02-07 23:17:291022
1023Use One Mark Per Commit
1024~~~~~~~~~~~~~~~~~~~~~~~
1025When doing a repository conversion, use a unique mark per commit
1026(`mark :<n>`) and supply the \--export-marks option on the command
Junio C Hamanod3339982007-02-09 08:38:481027line. fast-import will dump a file which lists every mark and the Git
Junio C Hamanodfc4ce72007-02-07 23:17:291028object SHA-1 that corresponds to it. If the frontend can tie
1029the marks back to the source repository, it is easy to verify the
1030accuracy and completeness of the import by comparing each Git
1031commit to the corresponding source revision.
1032
1033Coming from a system such as Perforce or Subversion this should be
Junio C Hamanod3339982007-02-09 08:38:481034quite simple, as the fast-import mark can also be the Perforce changeset
Junio C Hamanodfc4ce72007-02-07 23:17:291035number or the Subversion revision number.
1036
1037Freely Skip Around Branches
1038~~~~~~~~~~~~~~~~~~~~~~~~~~~
1039Don't bother trying to optimize the frontend to stick to one branch
1040at a time during an import. Although doing so might be slightly
Junio C Hamanod3339982007-02-09 08:38:481041faster for fast-import, it tends to increase the complexity of the frontend
Junio C Hamanodfc4ce72007-02-07 23:17:291042code considerably.
1043
Junio C Hamanod3339982007-02-09 08:38:481044The branch LRU builtin to fast-import tends to behave very well, and the
Junio C Hamanodfc4ce72007-02-07 23:17:291045cost of activating an inactive branch is so low that bouncing around
1046between branches has virtually no impact on import performance.
1047
Junio C Hamano9dd8bb02007-02-12 07:15:351048Handling Renames
1049~~~~~~~~~~~~~~~~
1050When importing a renamed file or directory, simply delete the old
1051name(s) and modify the new name(s) during the corresponding commit.
1052Git performs rename detection after-the-fact, rather than explicitly
1053during a commit.
1054
Junio C Hamanodfc4ce72007-02-07 23:17:291055Use Tag Fixup Branches
1056~~~~~~~~~~~~~~~~~~~~~~
1057Some other SCM systems let the user create a tag from multiple
1058files which are not from the same commit/changeset. Or to create
1059tags which are a subset of the files available in the repository.
1060
1061Importing these tags as-is in Git is impossible without making at
1062least one commit which ``fixes up'' the files to match the content
Junio C Hamanod3339982007-02-09 08:38:481063of the tag. Use fast-import's `reset` command to reset a dummy branch
Junio C Hamanodfc4ce72007-02-07 23:17:291064outside of your normal branch space to the base commit for the tag,
1065then commit one or more file fixup commits, and finally tag the
1066dummy branch.
1067
1068For example since all normal branches are stored under `refs/heads/`
1069name the tag fixup branch `TAG_FIXUP`. This way it is impossible for
1070the fixup branch used by the importer to have namespace conflicts
1071with real branches imported from the source (the name `TAG_FIXUP`
1072is not `refs/heads/TAG_FIXUP`).
1073
1074When committing fixups, consider using `merge` to connect the
1075commit(s) which are supplying file revisions to the fixup branch.
Junio C Hamano1aa40d22010-01-21 17:46:431076Doing so will allow tools such as 'git blame' to track
Junio C Hamanodfc4ce72007-02-07 23:17:291077through the real commit history and properly annotate the source
1078files.
1079
Junio C Hamanod3339982007-02-09 08:38:481080After fast-import terminates the frontend will need to do `rm .git/TAG_FIXUP`
Junio C Hamanodfc4ce72007-02-07 23:17:291081to remove the dummy branch.
1082
1083Import Now, Repack Later
1084~~~~~~~~~~~~~~~~~~~~~~~~
Junio C Hamanod3339982007-02-09 08:38:481085As soon as fast-import completes the Git repository is completely valid
Junio C Hamanoa6387422007-08-25 03:54:271086and ready for use. Typically this takes only a very short time,
Junio C Hamanodfc4ce72007-02-07 23:17:291087even for considerably large projects (100,000+ commits).
1088
1089However repacking the repository is necessary to improve data
1090locality and access performance. It can also take hours on extremely
1091large projects (especially if -f and a large \--window parameter is
1092used). Since repacking is safe to run alongside readers and writers,
1093run the repack in the background and let it finish when it finishes.
1094There is no reason to wait to explore your new Git project!
1095
1096If you choose to wait for the repack, don't try to run benchmarks
Junio C Hamanod3339982007-02-09 08:38:481097or performance tests until repacking is completed. fast-import outputs
Junio C Hamanodfc4ce72007-02-07 23:17:291098suboptimal packfiles that are simply never seen in real use
1099situations.
1100
1101Repacking Historical Data
1102~~~~~~~~~~~~~~~~~~~~~~~~~
1103If you are repacking very old imported data (e.g. older than the
1104last year), consider expending some extra CPU time and supplying
Junio C Hamano1aa40d22010-01-21 17:46:431105\--window=50 (or higher) when you run 'git repack'.
Junio C Hamanodfc4ce72007-02-07 23:17:291106This will take longer, but will also produce a smaller packfile.
1107You only need to expend the effort once, and everyone using your
1108project will benefit from the smaller repository.
1109
Junio C Hamanoe52cf782007-08-19 19:15:521110Include Some Progress Messages
1111~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1112Every once in a while have your frontend emit a `progress` message
1113to fast-import. The contents of the messages are entirely free-form,
1114so one suggestion would be to output the current month and year
1115each time the current commit date moves into the next month.
1116Your users will feel better knowing how much of the data stream
1117has been processed.
1118
Junio C Hamanodfc4ce72007-02-07 23:17:291119
Junio C Hamanodf60f442007-02-07 05:52:371120Packfile Optimization
1121---------------------
Junio C Hamanod3339982007-02-09 08:38:481122When packing a blob fast-import always attempts to deltify against the last
Junio C Hamanodf60f442007-02-07 05:52:371123blob written. Unless specifically arranged for by the frontend,
1124this will probably not be a prior version of the same file, so the
1125generated delta will not be the smallest possible. The resulting
1126packfile will be compressed, but will not be optimal.
1127
1128Frontends which have efficient access to all revisions of a
1129single file (for example reading an RCS/CVS ,v file) can choose
1130to supply all revisions of that file as a sequence of consecutive
Junio C Hamanod3339982007-02-09 08:38:481131`blob` commands. This allows fast-import to deltify the different file
Junio C Hamanodf60f442007-02-07 05:52:371132revisions against each other, saving space in the final packfile.
1133Marks can be used to later identify individual file revisions during
1134a sequence of `commit` commands.
1135
Junio C Hamanod3339982007-02-09 08:38:481136The packfile(s) created by fast-import do not encourage good disk access
1137patterns. This is caused by fast-import writing the data in the order
Junio C Hamanodf60f442007-02-07 05:52:371138it is received on standard input, while Git typically organizes
1139data within packfiles to make the most recent (current tip) data
1140appear before historical data. Git also clusters commits together,
1141speeding up revision traversal through better cache locality.
1142
1143For this reason it is strongly recommended that users repack the
Junio C Hamanod3339982007-02-09 08:38:481144repository with `git repack -a -d` after fast-import completes, allowing
Junio C Hamanodf60f442007-02-07 05:52:371145Git to reorganize the packfiles for faster data access. If blob
1146deltas are suboptimal (see above) then also adding the `-f` option
1147to force recomputation of all deltas can significantly reduce the
1148final packfile size (30-50% smaller can be quite typical).
1149
Junio C Hamanodfc4ce72007-02-07 23:17:291150
Junio C Hamanodf60f442007-02-07 05:52:371151Memory Utilization
1152------------------
Junio C Hamanod3339982007-02-09 08:38:481153There are a number of factors which affect how much memory fast-import
Junio C Hamanodf60f442007-02-07 05:52:371154requires to perform an import. Like critical sections of core
Junio C Hamanoa6387422007-08-25 03:54:271155Git, fast-import uses its own memory allocators to amortize any overheads
1156associated with malloc. In practice fast-import tends to amortize any
Junio C Hamanodf60f442007-02-07 05:52:371157malloc overheads to 0, due to its use of large block allocations.
1158
1159per object
1160~~~~~~~~~~
Junio C Hamanod3339982007-02-09 08:38:481161fast-import maintains an in-memory structure for every object written in
Junio C Hamanodf60f442007-02-07 05:52:371162this execution. On a 32 bit system the structure is 32 bytes,
1163on a 64 bit system the structure is 40 bytes (due to the larger
1164pointer sizes). Objects in the table are not deallocated until
Junio C Hamanod3339982007-02-09 08:38:481165fast-import terminates. Importing 2 million objects on a 32 bit system
Junio C Hamanodf60f442007-02-07 05:52:371166will require approximately 64 MiB of memory.
1167
1168The object table is actually a hashtable keyed on the object name
Junio C Hamanod3339982007-02-09 08:38:481169(the unique SHA-1). This storage configuration allows fast-import to reuse
Junio C Hamanodf60f442007-02-07 05:52:371170an existing or already written object and avoid writing duplicates
1171to the output packfile. Duplicate blobs are surprisingly common
1172in an import, typically due to branch merges in the source.
1173
1174per mark
1175~~~~~~~~
1176Marks are stored in a sparse array, using 1 pointer (4 bytes or 8
1177bytes, depending on pointer size) per mark. Although the array
1178is sparse, frontends are still strongly encouraged to use marks
1179between 1 and n, where n is the total number of marks required for
1180this import.
1181
1182per branch
1183~~~~~~~~~~
1184Branches are classified as active and inactive. The memory usage
1185of the two classes is significantly different.
1186
1187Inactive branches are stored in a structure which uses 96 or 120
1188bytes (32 bit or 64 bit systems, respectively), plus the length of
Junio C Hamanod3339982007-02-09 08:38:481189the branch name (typically under 200 bytes), per branch. fast-import will
Junio C Hamanodf60f442007-02-07 05:52:371190easily handle as many as 10,000 inactive branches in under 2 MiB
1191of memory.
1192
1193Active branches have the same overhead as inactive branches, but
1194also contain copies of every tree that has been recently modified on
1195that branch. If subtree `include` has not been modified since the
1196branch became active, its contents will not be loaded into memory,
1197but if subtree `src` has been modified by a commit since the branch
1198became active, then its contents will be loaded in memory.
1199
1200As active branches store metadata about the files contained on that
1201branch, their in-memory storage size can grow to a considerable size
1202(see below).
1203
Junio C Hamanod3339982007-02-09 08:38:481204fast-import automatically moves active branches to inactive status based on
Junio C Hamanodf60f442007-02-07 05:52:371205a simple least-recently-used algorithm. The LRU chain is updated on
1206each `commit` command. The maximum number of active branches can be
Junio C Hamanodfc4ce72007-02-07 23:17:291207increased or decreased on the command line with \--active-branches=.
Junio C Hamanodf60f442007-02-07 05:52:371208
1209per active tree
1210~~~~~~~~~~~~~~~
1211Trees (aka directories) use just 12 bytes of memory on top of the
1212memory required for their entries (see ``per active file'' below).
Junio C Hamanoa6387422007-08-25 03:54:271213The cost of a tree is virtually 0, as its overhead amortizes out
Junio C Hamanodf60f442007-02-07 05:52:371214over the individual file entries.
1215
1216per active file entry
1217~~~~~~~~~~~~~~~~~~~~~
1218Files (and pointers to subtrees) within active trees require 52 or 64
1219bytes (32/64 bit platforms) per entry. To conserve space, file and
1220tree names are pooled in a common string table, allowing the filename
1221``Makefile'' to use just 16 bytes (after including the string header
1222overhead) no matter how many times it occurs within the project.
1223
1224The active branch LRU, when coupled with the filename string pool
Junio C Hamanod3339982007-02-09 08:38:481225and lazy loading of subtrees, allows fast-import to efficiently import
Junio C Hamanodf60f442007-02-07 05:52:371226projects with 2,000+ branches and 45,114+ files in a very limited
1227memory footprint (less than 2.7 MiB per active branch).
1228
1229
1230Author
1231------
1232Written by Shawn O. Pearce <spearce@spearce.org>.
1233
1234Documentation
1235--------------
1236Documentation by Shawn O. Pearce <spearce@spearce.org>.
1237
1238GIT
1239---
Junio C Hamanof7c042d2008-06-06 22:50:531240Part of the linkgit:git[1] suite