blob: 2969388880a6d827a9970dd9d67fd81224a5bc34 [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 Hamano15567bc2011-07-23 00:51:5911[verse]
Junio C Hamanofce7c7e2008-07-02 03:06:3812frontend | 'git fast-import' [options]
Junio C Hamanodf60f442007-02-07 05:52:3713
14DESCRIPTION
15-----------
16This program is usually not what the end user wants to run directly.
17Most end users want to use one of the existing frontend programs,
18which parses a specific type of foreign source and feeds the contents
Junio C Hamano1aa40d22010-01-21 17:46:4319stored there to 'git fast-import'.
Junio C Hamanodf60f442007-02-07 05:52:3720
Junio C Hamanod3339982007-02-09 08:38:4821fast-import reads a mixed command/data stream from standard input and
Junio C Hamanodf60f442007-02-07 05:52:3722writes one or more packfiles directly into the current repository.
23When EOF is received on standard input, fast import writes out
24updated branch and tag refs, fully updating the current repository
25with the newly imported data.
26
Junio C Hamanod3339982007-02-09 08:38:4827The fast-import backend itself can import into an empty repository (one that
Junio C Hamano1aa40d22010-01-21 17:46:4328has already been initialized by 'git init') or incrementally
Junio C Hamanodf60f442007-02-07 05:52:3729update an existing populated repository. Whether or not incremental
30imports are supported from a particular foreign source depends on
31the frontend program in use.
32
33
34OPTIONS
35-------
36--date-format=<fmt>::
37Specify the type of dates the frontend will supply to
Junio C Hamanod3339982007-02-09 08:38:4838fast-import within `author`, `committer` and `tagger` commands.
Junio C Hamanodf60f442007-02-07 05:52:3739See ``Date Formats'' below for details about which formats
40are supported, and their syntax.
41
42--force::
43Force updating modified existing branches, even if doing
44so would cause commits to be lost (as the new commit does
45not contain the old commit).
46
47--max-pack-size=<n>::
Junio C Hamanod3304322010-02-05 03:28:2748Maximum size of each output packfile.
Junio C Hamano4fdccb22010-02-19 09:58:1449The default is unlimited.
Junio C Hamanodf60f442007-02-07 05:52:3750
Junio C Hamano5c246f22010-02-03 07:34:5351--big-file-threshold=<n>::
52Maximum size of a blob that fast-import will attempt to
53create a delta for, expressed in bytes. The default is 512m
54(512 MiB). Some importers may wish to lower this on systems
55with constrained memory.
56
Junio C Hamanodf60f442007-02-07 05:52:3757--depth=<n>::
58Maximum delta depth, for blob and tree deltification.
59Default is 10.
60
61--active-branches=<n>::
62Maximum number of branches to maintain active at once.
63See ``Memory Utilization'' below for details. Default is 5.
64
65--export-marks=<file>::
66Dumps the internal marks table to <file> when complete.
67Marks are written one per line as `:markid SHA-1`.
68Frontends can use this file to validate imports after they
Junio C Hamanod15328a2007-03-09 09:06:4069have been completed, or to save the marks table across
70incremental runs. As <file> is only opened and truncated
71at checkpoint (or completion) the same path can also be
72safely given to \--import-marks.
73
74--import-marks=<file>::
75Before processing any input, load the marks specified in
76<file>. The input file must exist, must be readable, and
77must use the same format as produced by \--export-marks.
78Multiple options may be supplied to import more than one
79set of marks. If a mark is defined to different values,
80the last file wins.
Junio C Hamanodf60f442007-02-07 05:52:3781
Junio C Hamano23e3f532011-02-10 02:05:2982--import-marks-if-exists=<file>::
83Like --import-marks but instead of erroring out, silently
84skips the file if it does not exist.
85
Junio C Hamano6ce6b6c2010-01-18 01:25:5086--relative-marks::
Junio C Hamanoa0dac242011-05-06 05:10:2987After specifying --relative-marks the paths specified
Junio C Hamano6ce6b6c2010-01-18 01:25:5088with --import-marks= and --export-marks= are relative
89to an internal directory in the current repository.
90In git-fast-import this means that the paths are relative
91to the .git/info/fast-import directory. However, other
92importers may use a different location.
93
94--no-relative-marks::
95Negates a previous --relative-marks. Allows for combining
96relative and non-relative marks by interweaving
Junio C Hamanoa0dac242011-05-06 05:10:2997--(no-)-relative-marks with the --(import|export)-marks=
Junio C Hamano6ce6b6c2010-01-18 01:25:5098options.
99
Junio C Hamano0d75e872010-12-17 06:57:26100--cat-blob-fd=<fd>::
101Specify the file descriptor that will be written to
102when the `cat-blob` command is encountered in the stream.
103The default behaviour is to write to `stdout`.
104
Junio C Hamanofbc773c2011-08-02 00:09:12105--done::
106Require a `done` command at the end of the stream.
107This option might be useful for detecting errors that
108cause the frontend to terminate before it has started to
109write a stream.
110
Junio C Hamano9dd8bb02007-02-12 07:15:35111--export-pack-edges=<file>::
112After creating a packfile, print a line of data to
113<file> listing the filename of the packfile and the last
114commit on each branch that was written to that packfile.
115This information may be useful after importing projects
116whose total object set exceeds the 4 GiB packfile limit,
117as these commits can be used as edge points during calls
Junio C Hamano1aa40d22010-01-21 17:46:43118to 'git pack-objects'.
Junio C Hamano9dd8bb02007-02-12 07:15:35119
Junio C Hamanodfc4ce72007-02-07 23:17:29120--quiet::
Junio C Hamanod3339982007-02-09 08:38:48121Disable all non-fatal output, making fast-import silent when it
Junio C Hamanoba4b9282008-07-06 05:20:31122is successful. This option disables the output shown by
Junio C Hamanodfc4ce72007-02-07 23:17:29123\--stats.
124
125--stats::
Junio C Hamanod3339982007-02-09 08:38:48126Display some basic statistics about the objects fast-import has
Junio C Hamanodfc4ce72007-02-07 23:17:29127created, the packfiles they were stored into, and the
Junio C Hamanod3339982007-02-09 08:38:48128memory used by fast-import during this run. Showing this output
Junio C Hamanodfc4ce72007-02-07 23:17:29129is currently the default, but can be disabled with \--quiet.
130
131
Junio C Hamanodf60f442007-02-07 05:52:37132Performance
133-----------
Junio C Hamanod3339982007-02-09 08:38:48134The design of fast-import allows it to import large projects in a minimum
Junio C Hamanodf60f442007-02-07 05:52:37135amount of memory usage and processing time. Assuming the frontend
Junio C Hamanod3339982007-02-09 08:38:48136is able to keep up with fast-import and feed it a constant stream of data,
Junio C Hamanodf60f442007-02-07 05:52:37137import times for projects holding 10+ years of history and containing
138100,000+ individual commits are generally completed in just 1-2
139hours on quite modest (~$2,000 USD) hardware.
140
141Most bottlenecks appear to be in foreign source data access (the
Junio C Hamanod3339982007-02-09 08:38:48142source just cannot extract revisions fast enough) or disk IO (fast-import
Junio C Hamanodf60f442007-02-07 05:52:37143writes as fast as the disk will take the data). Imports will run
144faster if the source data is stored on a different drive than the
145destination Git repository (due to less IO contention).
146
147
148Development Cost
149----------------
Junio C Hamanod3339982007-02-09 08:38:48150A typical frontend for fast-import tends to weigh in at approximately 200
Junio C Hamanodf60f442007-02-07 05:52:37151lines of Perl/Python/Ruby code. Most developers have been able to
152create working importers in just a couple of hours, even though it
Junio C Hamanod3339982007-02-09 08:38:48153is their first exposure to fast-import, and sometimes even to Git. This is
Junio C Hamanodf60f442007-02-07 05:52:37154an ideal situation, given that most conversion tools are throw-away
155(use once, and never look back).
156
157
158Parallel Operation
159------------------
Junio C Hamano1aa40d22010-01-21 17:46:43160Like 'git push' or 'git fetch', imports handled by fast-import are safe to
Junio C Hamanodf60f442007-02-07 05:52:37161run alongside parallel `git repack -a -d` or `git gc` invocations,
Junio C Hamano1aa40d22010-01-21 17:46:43162or any other Git operation (including 'git prune', as loose objects
Junio C Hamanod3339982007-02-09 08:38:48163are never used by fast-import).
Junio C Hamanodf60f442007-02-07 05:52:37164
Junio C Hamanod3339982007-02-09 08:38:48165fast-import does not lock the branch or tag refs it is actively importing.
166After the import, during its ref update phase, fast-import tests each
Junio C Hamanodf60f442007-02-07 05:52:37167existing branch ref to verify the update will be a fast-forward
168update (the commit stored in the ref is contained in the new
169history of the commit to be written). If the update is not a
Junio C Hamanod3339982007-02-09 08:38:48170fast-forward update, fast-import will skip updating that ref and instead
171prints a warning message. fast-import will always attempt to update all
Junio C Hamanodf60f442007-02-07 05:52:37172branch refs, and does not stop on the first failure.
173
Junio C Hamano167b1382010-01-31 23:04:31174Branch updates can be forced with \--force, but it's recommended that
Junio C Hamanodfc4ce72007-02-07 23:17:29175this only be used on an otherwise quiet repository. Using \--force
Junio C Hamanodf60f442007-02-07 05:52:37176is not necessary for an initial import into an empty repository.
177
178
179Technical Discussion
180--------------------
Junio C Hamanod3339982007-02-09 08:38:48181fast-import tracks a set of branches in memory. Any branch can be created
Junio C Hamanodf60f442007-02-07 05:52:37182or modified at any point during the import process by sending a
183`commit` command on the input stream. This design allows a frontend
184program to process an unlimited number of branches simultaneously,
185generating commits in the order they are available from the source
186data. It also simplifies the frontend programs considerably.
187
Junio C Hamanod3339982007-02-09 08:38:48188fast-import does not use or alter the current working directory, or any
Junio C Hamanodf60f442007-02-07 05:52:37189file within it. (It does however update the current Git repository,
190as referenced by `GIT_DIR`.) Therefore an import frontend may use
191the working directory for its own purposes, such as extracting file
192revisions from the foreign source. This ignorance of the working
Junio C Hamanod3339982007-02-09 08:38:48193directory also allows fast-import to run very quickly, as it does not
Junio C Hamanodf60f442007-02-07 05:52:37194need to perform any costly file update operations when switching
195between branches.
196
197Input Format
198------------
199With the exception of raw file data (which Git does not interpret)
Junio C Hamanod3339982007-02-09 08:38:48200the fast-import input format is text (ASCII) based. This text based
Junio C Hamanodf60f442007-02-07 05:52:37201format simplifies development and debugging of frontend programs,
202especially when a higher level language such as Perl, Python or
203Ruby is being used.
204
Junio C Hamanod3339982007-02-09 08:38:48205fast-import is very strict about its input. Where we say SP below we mean
Junio C Hamano73d10512011-03-01 01:02:38206*exactly* one space. Likewise LF means one (and only one) linefeed
207and HT one (and only one) horizontal tab.
Junio C Hamanodf60f442007-02-07 05:52:37208Supplying additional whitespace characters will cause unexpected
209results, such as branch names or file names with leading or trailing
Junio C Hamanod3339982007-02-09 08:38:48210spaces in their name, or early termination of fast-import when it encounters
Junio C Hamanodf60f442007-02-07 05:52:37211unexpected input.
212
Junio C Hamanoe52cf782007-08-19 19:15:52213Stream Comments
214~~~~~~~~~~~~~~~
215To aid in debugging frontends fast-import ignores any line that
216begins with `#` (ASCII pound/hash) up to and including the line
217ending `LF`. A comment line may contain any sequence of bytes
218that does not contain an LF and therefore may be used to include
219any detailed debugging information that might be specific to the
220frontend and useful when inspecting a fast-import data stream.
221
Junio C Hamanodf60f442007-02-07 05:52:37222Date Formats
223~~~~~~~~~~~~
224The following date formats are supported. A frontend should select
225the format it will use for this import by passing the format name
Junio C Hamanodfc4ce72007-02-07 23:17:29226in the \--date-format=<fmt> command line option.
Junio C Hamanodf60f442007-02-07 05:52:37227
228`raw`::
Junio C Hamanodfc4ce72007-02-07 23:17:29229This is the Git native format and is `<time> SP <offutc>`.
Junio C Hamanod3339982007-02-09 08:38:48230It is also fast-import's default format, if \--date-format was
Junio C Hamanodf60f442007-02-07 05:52:37231not specified.
232+
233The time of the event is specified by `<time>` as the number of
234seconds since the UNIX epoch (midnight, Jan 1, 1970, UTC) and is
235written as an ASCII decimal integer.
236+
Junio C Hamanodfc4ce72007-02-07 23:17:29237The local offset is specified by `<offutc>` as a positive or negative
238offset from UTC. For example EST (which is 5 hours behind UTC)
239would be expressed in `<tz>` by ``-0500'' while UTC is ``+0000''.
240The local offset does not affect `<time>`; it is used only as an
241advisement to help formatting routines display the timestamp.
Junio C Hamanodf60f442007-02-07 05:52:37242+
Junio C Hamanodfc4ce72007-02-07 23:17:29243If the local offset is not available in the source material, use
244``+0000'', or the most common local offset. For example many
Junio C Hamanodf60f442007-02-07 05:52:37245organizations have a CVS repository which has only ever been accessed
246by users who are located in the same location and timezone. In this
Junio C Hamanod3339982007-02-09 08:38:48247case a reasonable offset from UTC could be assumed.
Junio C Hamanodf60f442007-02-07 05:52:37248+
249Unlike the `rfc2822` format, this format is very strict. Any
Junio C Hamanod3339982007-02-09 08:38:48250variation in formatting will cause fast-import to reject the value.
Junio C Hamanodf60f442007-02-07 05:52:37251
252`rfc2822`::
253This is the standard email format as described by RFC 2822.
254+
255An example value is ``Tue Feb 6 11:22:18 2007 -0500''. The Git
Junio C Hamanod3339982007-02-09 08:38:48256parser is accurate, but a little on the lenient side. It is the
Junio C Hamano1aa40d22010-01-21 17:46:43257same parser used by 'git am' when applying patches
Junio C Hamanodf60f442007-02-07 05:52:37258received from email.
259+
260Some malformed strings may be accepted as valid dates. In some of
261these cases Git will still be able to obtain the correct date from
262the malformed string. There are also some types of malformed
263strings which Git will parse wrong, and yet consider valid.
264Seriously malformed strings will be rejected.
265+
Junio C Hamanodfc4ce72007-02-07 23:17:29266Unlike the `raw` format above, the timezone/UTC offset information
267contained in an RFC 2822 date string is used to adjust the date
268value to UTC prior to storage. Therefore it is important that
269this information be as accurate as possible.
270+
Junio C Hamanod3339982007-02-09 08:38:48271If the source material uses RFC 2822 style dates,
272the frontend should let fast-import handle the parsing and conversion
Junio C Hamanodf60f442007-02-07 05:52:37273(rather than attempting to do it itself) as the Git parser has
274been well tested in the wild.
275+
276Frontends should prefer the `raw` format if the source material
Junio C Hamanod3339982007-02-09 08:38:48277already uses UNIX-epoch format, can be coaxed to give dates in that
Junio C Hamanoa6387422007-08-25 03:54:27278format, or its format is easily convertible to it, as there is no
Junio C Hamanod3339982007-02-09 08:38:48279ambiguity in parsing.
Junio C Hamanodf60f442007-02-07 05:52:37280
281`now`::
282Always use the current time and timezone. The literal
283`now` must always be supplied for `<when>`.
284+
285This is a toy format. The current time and timezone of this system
286is always copied into the identity string at the time it is being
Junio C Hamanod3339982007-02-09 08:38:48287created by fast-import. There is no way to specify a different time or
Junio C Hamanodf60f442007-02-07 05:52:37288timezone.
289+
Junio C Hamano167b1382010-01-31 23:04:31290This particular format is supplied as it's short to implement and
Junio C Hamanodf60f442007-02-07 05:52:37291may be useful to a process that wants to create a new commit
292right now, without needing to use a working directory or
Junio C Hamano1aa40d22010-01-21 17:46:43293'git update-index'.
Junio C Hamanodf60f442007-02-07 05:52:37294+
295If separate `author` and `committer` commands are used in a `commit`
296the timestamps may not match, as the system clock will be polled
297twice (once for each command). The only way to ensure that both
298author and committer identity information has the same timestamp
299is to omit `author` (thus copying from `committer`) or to use a
300date format other than `now`.
301
302Commands
303~~~~~~~~
Junio C Hamanod3339982007-02-09 08:38:48304fast-import accepts several commands to update the current repository
Junio C Hamanodf60f442007-02-07 05:52:37305and control the current import process. More detailed discussion
306(with examples) of each command follows later.
307
308`commit`::
309Creates a new branch or updates an existing branch by
310creating a new commit and updating the branch to point at
311the newly created commit.
312
313`tag`::
314Creates an annotated tag object from an existing commit or
315branch. Lightweight tags are not supported by this command,
316as they are not recommended for recording meaningful points
317in time.
318
319`reset`::
320Reset an existing branch (or a new branch) to a specific
321revision. This command must be used to change a branch to
322a specific revision without making a commit on it.
323
324`blob`::
325Convert raw file data into a blob, for future use in a
326`commit` command. This command is optional and is not
327needed to perform an import.
328
329`checkpoint`::
Junio C Hamanod3339982007-02-09 08:38:48330Forces fast-import to close the current packfile, generate its
Junio C Hamanodf60f442007-02-07 05:52:37331unique SHA-1 checksum and index, and start a new packfile.
332This command is optional and is not needed to perform
333an import.
334
Junio C Hamanoe52cf782007-08-19 19:15:52335`progress`::
336Causes fast-import to echo the entire line to its own
337standard output. This command is optional and is not needed
338to perform an import.
339
Junio C Hamanofbc773c2011-08-02 00:09:12340`done`::
341Marks the end of the stream. This command is optional
342unless the `done` feature was requested using the
343`--done` command line option or `feature done` command.
344
Junio C Hamano0d75e872010-12-17 06:57:26345`cat-blob`::
346Causes fast-import to print a blob in 'cat-file --batch'
347format to the file descriptor set with `--cat-blob-fd` or
348`stdout` if unspecified.
349
Junio C Hamano73d10512011-03-01 01:02:38350`ls`::
351Causes fast-import to print a line describing a directory
352entry in 'ls-tree' format to the file descriptor set with
353`--cat-blob-fd` or `stdout` if unspecified.
354
Junio C Hamano6ce6b6c2010-01-18 01:25:50355`feature`::
356Require that fast-import supports the specified feature, or
357abort if it does not.
358
359`option`::
360Specify any of the options listed under OPTIONS that do not
361change stream semantic to suit the frontend's needs. This
362command is optional and is not needed to perform an import.
363
Junio C Hamanodf60f442007-02-07 05:52:37364`commit`
365~~~~~~~~
366Create or update a branch with a new commit, recording one logical
367change to the project.
368
369....
370'commit' SP <ref> LF
371mark?
Junio C Hamano6d325df2010-01-01 00:02:47372('author' (SP <name>)? SP LT <email> GT SP <when> LF)?
373'committer' (SP <name>)? SP LT <email> GT SP <when> LF
Junio C Hamanodf60f442007-02-07 05:52:37374data
375('from' SP <committish> LF)?
376('merge' SP <committish> LF)?
Junio C Hamano3b70d3c2009-11-21 17:37:37377(filemodify | filedelete | filecopy | filerename | filedeleteall | notemodify)*
Junio C Hamanoe52cf782007-08-19 19:15:52378LF?
Junio C Hamanodf60f442007-02-07 05:52:37379....
380
381where `<ref>` is the name of the branch to make the commit on.
382Typically branch names are prefixed with `refs/heads/` in
383Git, so importing the CVS branch symbol `RELENG-1_0` would use
384`refs/heads/RELENG-1_0` for the value of `<ref>`. The value of
385`<ref>` must be a valid refname in Git. As `LF` is not valid in
386a Git refname, no quoting or escaping syntax is supported here.
387
Junio C Hamanod3339982007-02-09 08:38:48388A `mark` command may optionally appear, requesting fast-import to save a
Junio C Hamanodf60f442007-02-07 05:52:37389reference to the newly created commit for future use by the frontend
390(see below for format). It is very common for frontends to mark
391every commit they create, thereby allowing future branch creation
392from any imported commit.
393
394The `data` command following `committer` must supply the commit
395message (see below for `data` command syntax). To import an empty
396commit message use a 0 length data. Commit messages are free-form
397and are not interpreted by Git. Currently they must be encoded in
Junio C Hamanod3339982007-02-09 08:38:48398UTF-8, as fast-import does not permit other encodings to be specified.
Junio C Hamanodf60f442007-02-07 05:52:37399
Junio C Hamano3b70d3c2009-11-21 17:37:37400Zero or more `filemodify`, `filedelete`, `filecopy`, `filerename`,
401`filedeleteall` and `notemodify` commands
Junio C Hamanodfc4ce72007-02-07 23:17:29402may be included to update the contents of the branch prior to
403creating the commit. These commands may be supplied in any order.
Junio C Hamanoa6387422007-08-25 03:54:27404However it is recommended that a `filedeleteall` command precede
Junio C Hamano3b70d3c2009-11-21 17:37:37405all `filemodify`, `filecopy`, `filerename` and `notemodify` commands in
406the same commit, as `filedeleteall` wipes the branch clean (see below).
Junio C Hamanodf60f442007-02-07 05:52:37407
Junio C Hamanoe52cf782007-08-19 19:15:52408The `LF` after the command is optional (it used to be required).
409
Junio C Hamanodf60f442007-02-07 05:52:37410`author`
411^^^^^^^^
412An `author` command may optionally appear, if the author information
413might differ from the committer information. If `author` is omitted
Junio C Hamanod3339982007-02-09 08:38:48414then fast-import will automatically use the committer's information for
Junio C Hamanodf60f442007-02-07 05:52:37415the author portion of the commit. See below for a description of
416the fields in `author`, as they are identical to `committer`.
417
418`committer`
419^^^^^^^^^^^
420The `committer` command indicates who made this commit, and when
421they made it.
422
423Here `<name>` is the person's display name (for example
424``Com M Itter'') and `<email>` is the person's email address
425(``cm@example.com''). `LT` and `GT` are the literal less-than (\x3c)
426and greater-than (\x3e) symbols. These are required to delimit
427the email address from the other fields in the line. Note that
428`<name>` is free-form and may contain any sequence of bytes, except
429`LT` and `LF`. It is typically UTF-8 encoded.
430
431The time of the change is specified by `<when>` using the date format
Junio C Hamanodfc4ce72007-02-07 23:17:29432that was selected by the \--date-format=<fmt> command line option.
Junio C Hamanodf60f442007-02-07 05:52:37433See ``Date Formats'' above for the set of supported formats, and
434their syntax.
435
436`from`
437^^^^^^
Junio C Hamano5dad0832007-02-13 05:16:23438The `from` command is used to specify the commit to initialize
439this branch from. This revision will be the first ancestor of the
440new commit.
Junio C Hamanodf60f442007-02-07 05:52:37441
Junio C Hamano5dad0832007-02-13 05:16:23442Omitting the `from` command in the first commit of a new branch
443will cause fast-import to create that commit with no ancestor. This
444tends to be desired only for the initial commit of a project.
Junio C Hamano25c0b702008-03-23 09:41:37445If the frontend creates all files from scratch when making a new
446branch, a `merge` command may be used instead of `from` to start
447the commit with an empty tree.
Junio C Hamano5dad0832007-02-13 05:16:23448Omitting the `from` command on existing branches is usually desired,
449as the current commit on that branch is automatically assumed to
450be the first ancestor of the new commit.
Junio C Hamanodf60f442007-02-07 05:52:37451
452As `LF` is not valid in a Git refname or SHA-1 expression, no
453quoting or escaping syntax is supported within `<committish>`.
454
455Here `<committish>` is any of the following:
456
Junio C Hamanod3339982007-02-09 08:38:48457* The name of an existing branch already in fast-import's internal branch
Junio C Hamano167b1382010-01-31 23:04:31458 table. If fast-import doesn't know the name, it's treated as a SHA-1
Junio C Hamanodf60f442007-02-07 05:52:37459 expression.
460
461* A mark reference, `:<idnum>`, where `<idnum>` is the mark number.
462+
Junio C Hamanod3339982007-02-09 08:38:48463The reason fast-import uses `:` to denote a mark reference is this character
Junio C Hamanodf60f442007-02-07 05:52:37464is not legal in a Git branch name. The leading `:` makes it easy
Junio C Hamanoa6387422007-08-25 03:54:27465to distinguish between the mark 42 (`:42`) and the branch 42 (`42`
Junio C Hamanodf60f442007-02-07 05:52:37466or `refs/heads/42`), or an abbreviated SHA-1 which happened to
467consist only of base-10 digits.
468+
469Marks must be declared (via `mark`) before they can be used.
470
471* A complete 40 byte or abbreviated commit SHA-1 in hex.
472
473* Any valid Git SHA-1 expression that resolves to a commit. See
Junio C Hamanoc27b7332010-10-14 04:37:28474 ``SPECIFYING REVISIONS'' in linkgit:gitrevisions[7] for details.
Junio C Hamanodf60f442007-02-07 05:52:37475
476The special case of restarting an incremental import from the
477current branch value should be written as:
478----
479from refs/heads/branch^0
480----
Junio C Hamanod3339982007-02-09 08:38:48481The `{caret}0` suffix is necessary as fast-import does not permit a branch to
Junio C Hamanodf60f442007-02-07 05:52:37482start from itself, and the branch is created in memory before the
Junio C Hamanod3339982007-02-09 08:38:48483`from` command is even read from the input. Adding `{caret}0` will force
484fast-import to resolve the commit through Git's revision parsing library,
Junio C Hamanodf60f442007-02-07 05:52:37485rather than its internal branch table, thereby loading in the
486existing value of the branch.
487
488`merge`
489^^^^^^^
Junio C Hamano25c0b702008-03-23 09:41:37490Includes one additional ancestor commit. If the `from` command is
491omitted when creating a new branch, the first `merge` commit will be
492the first ancestor of the current commit, and the branch will start
493out with no files. An unlimited number of `merge` commands per
Junio C Hamanod3339982007-02-09 08:38:48494commit are permitted by fast-import, thereby establishing an n-way merge.
Junio C Hamanodf60f442007-02-07 05:52:37495However Git's other tools never create commits with more than 15
496additional ancestors (forming a 16-way merge). For this reason
497it is suggested that frontends do not use more than 15 `merge`
Junio C Hamano25c0b702008-03-23 09:41:37498commands per commit; 16, if starting a new, empty branch.
Junio C Hamanodf60f442007-02-07 05:52:37499
500Here `<committish>` is any of the commit specification expressions
501also accepted by `from` (see above).
502
503`filemodify`
504^^^^^^^^^^^^
505Included in a `commit` command to add a new file or change the
506content of an existing file. This command has two different means
507of specifying the content of the file.
508
509External data format::
510The data content for the file was already supplied by a prior
511`blob` command. The frontend just needs to connect it.
512+
513....
514'M' SP <mode> SP <dataref> SP <path> LF
515....
516+
Junio C Hamano619596a2010-08-18 22:15:35517Here usually `<dataref>` must be either a mark reference (`:<idnum>`)
Junio C Hamanodf60f442007-02-07 05:52:37518set by a prior `blob` command, or a full 40-byte SHA-1 of an
Junio C Hamano619596a2010-08-18 22:15:35519existing Git blob object. If `<mode>` is `040000`` then
520`<dataref>` must be the full 40-byte SHA-1 of an existing
521Git tree object or a mark reference set with `--import-marks`.
Junio C Hamanodf60f442007-02-07 05:52:37522
523Inline data format::
524The data content for the file has not been supplied yet.
525The frontend wants to supply it as part of this modify
526command.
527+
528....
529'M' SP <mode> SP 'inline' SP <path> LF
530data
531....
532+
533See below for a detailed description of the `data` command.
534
535In both formats `<mode>` is the type of file entry, specified
536in octal. Git only supports the following modes:
537
538* `100644` or `644`: A normal (not-executable) file. The majority
539 of files in most projects use this mode. If in doubt, this is
540 what you want.
541* `100755` or `755`: A normal, but executable, file.
542* `120000`: A symlink, the content of the file will be the link target.
Junio C Hamano915cd9b2008-07-20 01:24:17543* `160000`: A gitlink, SHA-1 of the object refers to a commit in
544 another repository. Git links can only be specified by SHA or through
545 a commit mark. They are used to implement submodules.
Junio C Hamano619596a2010-08-18 22:15:35546* `040000`: A subdirectory. Subdirectories can only be specified by
547 SHA or through a tree mark set with `--import-marks`.
Junio C Hamanodf60f442007-02-07 05:52:37548
549In both formats `<path>` is the complete path of the file to be added
550(if not already existing) or modified (if already existing).
551
Junio C Hamanoc51fede2007-03-12 07:29:20552A `<path>` string must use UNIX-style directory separators (forward
Junio C Hamanodf60f442007-02-07 05:52:37553slash `/`), may contain any byte other than `LF`, and must not
554start with double quote (`"`).
555
556If an `LF` or double quote must be encoded into `<path>` shell-style
557quoting should be used, e.g. `"path/with\n and \" in it"`.
558
Junio C Hamanoa6387422007-08-25 03:54:27559The value of `<path>` must be in canonical form. That is it must not:
Junio C Hamanodf60f442007-02-07 05:52:37560
561* contain an empty directory component (e.g. `foo//bar` is invalid),
Junio C Hamanoc51fede2007-03-12 07:29:20562* end with a directory separator (e.g. `foo/` is invalid),
563* start with a directory separator (e.g. `/foo` is invalid),
Junio C Hamanodf60f442007-02-07 05:52:37564* contain the special component `.` or `..` (e.g. `foo/./bar` and
565 `foo/../bar` are invalid).
566
Junio C Hamanoe089c4e2011-01-19 22:34:12567The root of the tree can be represented by an empty string as `<path>`.
568
Junio C Hamanodf60f442007-02-07 05:52:37569It is recommended that `<path>` always be encoded using UTF-8.
570
571`filedelete`
572^^^^^^^^^^^^
Junio C Hamano06216df2007-07-10 07:49:37573Included in a `commit` command to remove a file or recursively
574delete an entire directory from the branch. If the file or directory
575removal makes its parent directory empty, the parent directory will
Junio C Hamanodf60f442007-02-07 05:52:37576be automatically removed too. This cascades up the tree until the
577first non-empty directory or the root is reached.
578
579....
580'D' SP <path> LF
581....
582
Junio C Hamano06216df2007-07-10 07:49:37583here `<path>` is the complete path of the file or subdirectory to
584be removed from the branch.
Junio C Hamanodf60f442007-02-07 05:52:37585See `filemodify` above for a detailed description of `<path>`.
586
Junio C Hamanoc0ea7c62007-07-15 07:19:06587`filecopy`
588^^^^^^^^^^^^
589Recursively copies an existing file or subdirectory to a different
590location within the branch. The existing file or directory must
591exist. If the destination exists it will be completely replaced
592by the content copied from the source.
593
594....
595'C' SP <path> SP <path> LF
596....
597
598here the first `<path>` is the source location and the second
599`<path>` is the destination. See `filemodify` above for a detailed
600description of what `<path>` may look like. To use a source path
601that contains SP the path must be quoted.
602
603A `filecopy` command takes effect immediately. Once the source
604location has been copied to the destination any future commands
605applied to the source location will not impact the destination of
606the copy.
607
Junio C Hamano06216df2007-07-10 07:49:37608`filerename`
609^^^^^^^^^^^^
610Renames an existing file or subdirectory to a different location
611within the branch. The existing file or directory must exist. If
612the destination exists it will be replaced by the source directory.
613
614....
615'R' SP <path> SP <path> LF
616....
617
618here the first `<path>` is the source location and the second
619`<path>` is the destination. See `filemodify` above for a detailed
620description of what `<path>` may look like. To use a source path
621that contains SP the path must be quoted.
622
623A `filerename` command takes effect immediately. Once the source
624location has been renamed to the destination any future commands
625applied to the source location will create new files there and not
626impact the destination of the rename.
627
Junio C Hamanoc0ea7c62007-07-15 07:19:06628Note that a `filerename` is the same as a `filecopy` followed by a
629`filedelete` of the source location. There is a slight performance
630advantage to using `filerename`, but the advantage is so small
631that it is never worth trying to convert a delete/add pair in
632source material into a rename for fast-import. This `filerename`
633command is provided just to simplify frontends that already have
634rename information and don't want bother with decomposing it into a
635`filecopy` followed by a `filedelete`.
636
Junio C Hamanodfc4ce72007-02-07 23:17:29637`filedeleteall`
638^^^^^^^^^^^^^^^
639Included in a `commit` command to remove all files (and also all
640directories) from the branch. This command resets the internal
641branch structure to have no files in it, allowing the frontend
642to subsequently add all interesting files from scratch.
643
644....
645'deleteall' LF
646....
647
648This command is extremely useful if the frontend does not know
649(or does not care to know) what files are currently on the branch,
650and therefore cannot generate the proper `filedelete` commands to
651update the content.
652
653Issuing a `filedeleteall` followed by the needed `filemodify`
654commands to set the correct content will produce the same results
655as sending only the needed `filemodify` and `filedelete` commands.
Junio C Hamanod3339982007-02-09 08:38:48656The `filedeleteall` approach may however require fast-import to use slightly
Junio C Hamanodfc4ce72007-02-07 23:17:29657more memory per active branch (less than 1 MiB for even most large
658projects); so frontends that can easily obtain only the affected
659paths for a commit are encouraged to do so.
660
Junio C Hamano3b70d3c2009-11-21 17:37:37661`notemodify`
662^^^^^^^^^^^^
Junio C Hamano15567bc2011-07-23 00:51:59663Included in a `commit` `<notes_ref>` command to add a new note
664annotating a `<committish>` or change this annotation contents.
665Internally it is similar to filemodify 100644 on `<committish>`
666path (maybe split into subdirectories). It's not advised to
667use any other commands to write to the `<notes_ref>` tree except
668`filedeleteall` to delete all existing notes in this tree.
669This command has two different means of specifying the content
670of the note.
Junio C Hamano3b70d3c2009-11-21 17:37:37671
672External data format::
673The data content for the note was already supplied by a prior
674`blob` command. The frontend just needs to connect it to the
675commit that is to be annotated.
676+
677....
678'N' SP <dataref> SP <committish> LF
679....
680+
681Here `<dataref>` can be either a mark reference (`:<idnum>`)
682set by a prior `blob` command, or a full 40-byte SHA-1 of an
683existing Git blob object.
684
685Inline data format::
686The data content for the note has not been supplied yet.
687The frontend wants to supply it as part of this modify
688command.
689+
690....
691'N' SP 'inline' SP <committish> LF
692data
693....
694+
695See below for a detailed description of the `data` command.
696
697In both formats `<committish>` is any of the commit specification
698expressions also accepted by `from` (see above).
699
Junio C Hamanodf60f442007-02-07 05:52:37700`mark`
701~~~~~~
Junio C Hamanod3339982007-02-09 08:38:48702Arranges for fast-import to save a reference to the current object, allowing
Junio C Hamanodf60f442007-02-07 05:52:37703the frontend to recall this object at a future point in time, without
704knowing its SHA-1. Here the current object is the object creation
705command the `mark` command appears within. This can be `commit`,
706`tag`, and `blob`, but `commit` is the most common usage.
707
708....
709'mark' SP ':' <idnum> LF
710....
711
712where `<idnum>` is the number assigned by the frontend to this mark.
713The value of `<idnum>` is expressed as an ASCII decimal integer.
714The value 0 is reserved and cannot be used as
715a mark. Only values greater than or equal to 1 may be used as marks.
716
717New marks are created automatically. Existing marks can be moved
718to another object simply by reusing the same `<idnum>` in another
719`mark` command.
720
721`tag`
722~~~~~
723Creates an annotated tag referring to a specific commit. To create
724lightweight (non-annotated) tags see the `reset` command below.
725
726....
727'tag' SP <name> LF
728'from' SP <committish> LF
Junio C Hamano6d325df2010-01-01 00:02:47729'tagger' (SP <name>)? SP LT <email> GT SP <when> LF
Junio C Hamanodf60f442007-02-07 05:52:37730data
Junio C Hamanodf60f442007-02-07 05:52:37731....
732
733where `<name>` is the name of the tag to create.
734
735Tag names are automatically prefixed with `refs/tags/` when stored
736in Git, so importing the CVS branch symbol `RELENG-1_0-FINAL` would
Junio C Hamanod3339982007-02-09 08:38:48737use just `RELENG-1_0-FINAL` for `<name>`, and fast-import will write the
Junio C Hamanodf60f442007-02-07 05:52:37738corresponding ref as `refs/tags/RELENG-1_0-FINAL`.
739
740The value of `<name>` must be a valid refname in Git and therefore
741may contain forward slashes. As `LF` is not valid in a Git refname,
742no quoting or escaping syntax is supported here.
743
744The `from` command is the same as in the `commit` command; see
745above for details.
746
747The `tagger` command uses the same format as `committer` within
748`commit`; again see above for details.
749
750The `data` command following `tagger` must supply the annotated tag
751message (see below for `data` command syntax). To import an empty
752tag message use a 0 length data. Tag messages are free-form and are
753not interpreted by Git. Currently they must be encoded in UTF-8,
Junio C Hamanod3339982007-02-09 08:38:48754as fast-import does not permit other encodings to be specified.
Junio C Hamanodf60f442007-02-07 05:52:37755
Junio C Hamanod3339982007-02-09 08:38:48756Signing annotated tags during import from within fast-import is not
Junio C Hamanodf60f442007-02-07 05:52:37757supported. Trying to include your own PGP/GPG signature is not
758recommended, as the frontend does not (easily) have access to the
759complete set of bytes which normally goes into such a signature.
Junio C Hamanod3339982007-02-09 08:38:48760If signing is required, create lightweight tags from within fast-import with
Junio C Hamanodf60f442007-02-07 05:52:37761`reset`, then create the annotated versions of those tags offline
Junio C Hamano1aa40d22010-01-21 17:46:43762with the standard 'git tag' process.
Junio C Hamanodf60f442007-02-07 05:52:37763
764`reset`
765~~~~~~~
766Creates (or recreates) the named branch, optionally starting from
767a specific revision. The reset command allows a frontend to issue
768a new `from` command for an existing branch, or to create a new
769branch from an existing commit without creating a new commit.
770
771....
772'reset' SP <ref> LF
773('from' SP <committish> LF)?
Junio C Hamanoe52cf782007-08-19 19:15:52774LF?
Junio C Hamanodf60f442007-02-07 05:52:37775....
776
777For a detailed description of `<ref>` and `<committish>` see above
778under `commit` and `from`.
779
Junio C Hamanoe52cf782007-08-19 19:15:52780The `LF` after the command is optional (it used to be required).
781
Junio C Hamanodf60f442007-02-07 05:52:37782The `reset` command can also be used to create lightweight
783(non-annotated) tags. For example:
784
785====
786reset refs/tags/938
787from :938
788====
789
790would create the lightweight tag `refs/tags/938` referring to
791whatever commit mark `:938` references.
792
793`blob`
794~~~~~~
795Requests writing one file revision to the packfile. The revision
796is not connected to any commit; this connection must be formed in
797a subsequent `commit` command by referencing the blob through an
798assigned mark.
799
800....
801'blob' LF
802mark?
803data
804....
805
806The mark command is optional here as some frontends have chosen
807to generate the Git SHA-1 for the blob on their own, and feed that
Junio C Hamano167b1382010-01-31 23:04:31808directly to `commit`. This is typically more work than it's worth
Junio C Hamanodf60f442007-02-07 05:52:37809however, as marks are inexpensive to store and easy to use.
810
811`data`
812~~~~~~
813Supplies raw data (for use as blob/file content, commit messages, or
Junio C Hamanod3339982007-02-09 08:38:48814annotated tag messages) to fast-import. Data can be supplied using an exact
Junio C Hamanodf60f442007-02-07 05:52:37815byte count or delimited with a terminating line. Real frontends
816intended for production-quality conversions should always use the
817exact byte count format, as it is more robust and performs better.
Junio C Hamanod3339982007-02-09 08:38:48818The delimited format is intended primarily for testing fast-import.
Junio C Hamanodf60f442007-02-07 05:52:37819
Junio C Hamanoe52cf782007-08-19 19:15:52820Comment lines appearing within the `<raw>` part of `data` commands
821are always taken to be part of the body of the data and are therefore
822never ignored by fast-import. This makes it safe to import any
823file/message content whose lines might start with `#`.
824
Junio C Hamanodf60f442007-02-07 05:52:37825Exact byte count format::
826The frontend must specify the number of bytes of data.
827+
828....
829'data' SP <count> LF
Junio C Hamanoe52cf782007-08-19 19:15:52830<raw> LF?
Junio C Hamanodf60f442007-02-07 05:52:37831....
832+
833where `<count>` is the exact number of bytes appearing within
834`<raw>`. The value of `<count>` is expressed as an ASCII decimal
835integer. The `LF` on either side of `<raw>` is not
836included in `<count>` and will not be included in the imported data.
Junio C Hamanoe52cf782007-08-19 19:15:52837+
838The `LF` after `<raw>` is optional (it used to be required) but
839recommended. Always including it makes debugging a fast-import
840stream easier as the next command always starts in column 0
841of the next line, even if `<raw>` did not end with an `LF`.
Junio C Hamanodf60f442007-02-07 05:52:37842
843Delimited format::
844A delimiter string is used to mark the end of the data.
Junio C Hamanod3339982007-02-09 08:38:48845fast-import will compute the length by searching for the delimiter.
Junio C Hamanoa6387422007-08-25 03:54:27846This format is primarily useful for testing and is not
Junio C Hamanodf60f442007-02-07 05:52:37847recommended for real data.
848+
849....
850'data' SP '<<' <delim> LF
851<raw> LF
852<delim> LF
Junio C Hamanoe52cf782007-08-19 19:15:52853LF?
Junio C Hamanodf60f442007-02-07 05:52:37854....
855+
856where `<delim>` is the chosen delimiter string. The string `<delim>`
857must not appear on a line by itself within `<raw>`, as otherwise
Junio C Hamanod3339982007-02-09 08:38:48858fast-import will think the data ends earlier than it really does. The `LF`
Junio C Hamanodf60f442007-02-07 05:52:37859immediately trailing `<raw>` is part of `<raw>`. This is one of
860the limitations of the delimited format, it is impossible to supply
861a data chunk which does not have an LF as its last byte.
Junio C Hamanoe52cf782007-08-19 19:15:52862+
863The `LF` after `<delim> LF` is optional (it used to be required).
Junio C Hamanodf60f442007-02-07 05:52:37864
865`checkpoint`
866~~~~~~~~~~~~
Junio C Hamanod3339982007-02-09 08:38:48867Forces fast-import to close the current packfile, start a new one, and to
Junio C Hamanodfc4ce72007-02-07 23:17:29868save out all current branch refs, tags and marks.
Junio C Hamanodf60f442007-02-07 05:52:37869
870....
871'checkpoint' LF
Junio C Hamanoe52cf782007-08-19 19:15:52872LF?
Junio C Hamanodf60f442007-02-07 05:52:37873....
874
Junio C Hamanod3339982007-02-09 08:38:48875Note that fast-import automatically switches packfiles when the current
Junio C Hamanodfc4ce72007-02-07 23:17:29876packfile reaches \--max-pack-size, or 4 GiB, whichever limit is
Junio C Hamanod3339982007-02-09 08:38:48877smaller. During an automatic packfile switch fast-import does not update
Junio C Hamanodfc4ce72007-02-07 23:17:29878the branch refs, tags or marks.
879
880As a `checkpoint` can require a significant amount of CPU time and
881disk IO (to compute the overall pack SHA-1 checksum, generate the
882corresponding index file, and update the refs) it can easily take
883several minutes for a single `checkpoint` command to complete.
884
885Frontends may choose to issue checkpoints during extremely large
886and long running imports, or when they need to allow another Git
887process access to a branch. However given that a 30 GiB Subversion
Junio C Hamanod3339982007-02-09 08:38:48888repository can be loaded into Git through fast-import in about 3 hours,
Junio C Hamanodfc4ce72007-02-07 23:17:29889explicit checkpointing may not be necessary.
890
Junio C Hamanoe52cf782007-08-19 19:15:52891The `LF` after the command is optional (it used to be required).
892
893`progress`
894~~~~~~~~~~
895Causes fast-import to print the entire `progress` line unmodified to
896its standard output channel (file descriptor 1) when the command is
897processed from the input stream. The command otherwise has no impact
898on the current import, or on any of fast-import's internal state.
899
900....
901'progress' SP <any> LF
902LF?
903....
904
905The `<any>` part of the command may contain any sequence of bytes
906that does not contain `LF`. The `LF` after the command is optional.
907Callers may wish to process the output through a tool such as sed to
908remove the leading part of the line, for example:
909
910====
Junio C Hamanofce7c7e2008-07-02 03:06:38911frontend | git fast-import | sed 's/^progress //'
Junio C Hamanoe52cf782007-08-19 19:15:52912====
913
914Placing a `progress` command immediately after a `checkpoint` will
915inform the reader when the `checkpoint` has been completed and it
916can safely access the refs that fast-import updated.
Junio C Hamanodfc4ce72007-02-07 23:17:29917
Junio C Hamano0d75e872010-12-17 06:57:26918`cat-blob`
919~~~~~~~~~~
920Causes fast-import to print a blob to a file descriptor previously
921arranged with the `--cat-blob-fd` argument. The command otherwise
922has no impact on the current import; its main purpose is to
923retrieve blobs that may be in fast-import's memory but not
924accessible from the target repository.
925
926....
927'cat-blob' SP <dataref> LF
928....
929
930The `<dataref>` can be either a mark reference (`:<idnum>`)
931set previously or a full 40-byte SHA-1 of a Git blob, preexisting or
932ready to be written.
933
Junio C Hamano64ebb092011-01-18 18:53:06934Output uses the same format as `git cat-file --batch`:
Junio C Hamano0d75e872010-12-17 06:57:26935
936====
937<sha1> SP 'blob' SP <size> LF
938<contents> LF
939====
940
941This command can be used anywhere in the stream that comments are
942accepted. In particular, the `cat-blob` command can be used in the
943middle of a commit but not in the middle of a `data` command.
944
Junio C Hamano73d10512011-03-01 01:02:38945`ls`
946~~~~
947Prints information about the object at a path to a file descriptor
948previously arranged with the `--cat-blob-fd` argument. This allows
949printing a blob from the active commit (with `cat-blob`) or copying a
950blob or tree from a previous commit for use in the current one (with
951`filemodify`).
952
953The `ls` command can be used anywhere in the stream that comments are
954accepted, including the middle of a commit.
955
956Reading from the active commit::
957This form can only be used in the middle of a `commit`.
958The path names a directory entry within fast-import's
959active commit. The path must be quoted in this case.
960+
961....
962'ls' SP <path> LF
963....
964
965Reading from a named tree::
966The `<dataref>` can be a mark reference (`:<idnum>`) or the
967full 40-byte SHA-1 of a Git tag, commit, or tree object,
968preexisting or waiting to be written.
969The path is relative to the top level of the tree
970named by `<dataref>`.
971+
972....
973'ls' SP <dataref> SP <path> LF
974....
975
976See `filemodify` above for a detailed description of `<path>`.
977
978Output uses the same format as `git ls-tree <tree> {litdd} <path>`:
979
980====
981<mode> SP ('blob' | 'tree' | 'commit') SP <dataref> HT <path> LF
982====
983
984The <dataref> represents the blob, tree, or commit object at <path>
985and can be used in later 'cat-blob', 'filemodify', or 'ls' commands.
986
987If there is no file or subtree at that path, 'git fast-import' will
988instead report
989
990====
991missing SP <path> LF
992====
993
Junio C Hamano6ce6b6c2010-01-18 01:25:50994`feature`
995~~~~~~~~~
996Require that fast-import supports the specified feature, or abort if
997it does not.
998
999....
Junio C Hamano0d75e872010-12-17 06:57:261000'feature' SP <feature> ('=' <argument>)? LF
Junio C Hamano6ce6b6c2010-01-18 01:25:501001....
1002
Junio C Hamano0d75e872010-12-17 06:57:261003The <feature> part of the command may be any one of the following:
Junio C Hamano6ce6b6c2010-01-18 01:25:501004
Junio C Hamano0d75e872010-12-17 06:57:261005date-format::
1006export-marks::
1007relative-marks::
1008no-relative-marks::
1009force::
1010Act as though the corresponding command-line option with
1011a leading '--' was passed on the command line
1012(see OPTIONS, above).
Junio C Hamano6ce6b6c2010-01-18 01:25:501013
Junio C Hamano0d75e872010-12-17 06:57:261014import-marks::
1015Like --import-marks except in two respects: first, only one
1016"feature import-marks" command is allowed per stream;
1017second, an --import-marks= command-line option overrides
1018any "feature import-marks" command in the stream.
Junio C Hamano6ce6b6c2010-01-18 01:25:501019
Junio C Hamano0d75e872010-12-17 06:57:261020cat-blob::
Junio C Hamano73d10512011-03-01 01:02:381021ls::
1022Require that the backend support the 'cat-blob' or 'ls' command.
1023Versions of fast-import not supporting the specified command
1024will exit with a message indicating so.
Junio C Hamano0d75e872010-12-17 06:57:261025This lets the import error out early with a clear message,
1026rather than wasting time on the early part of an import
1027before the unsupported command is detected.
Junio C Hamano6ce6b6c2010-01-18 01:25:501028
Junio C Hamano23e3f532011-02-10 02:05:291029notes::
1030Require that the backend support the 'notemodify' (N)
1031subcommand to the 'commit' command.
1032Versions of fast-import not supporting notes will exit
1033with a message indicating so.
1034
Junio C Hamanofbc773c2011-08-02 00:09:121035done::
1036Error out if the stream ends without a 'done' command.
1037Without this feature, errors causing the frontend to end
1038abruptly at a convenient point in the stream can go
1039undetected.
Junio C Hamano23e3f532011-02-10 02:05:291040
Junio C Hamano6ce6b6c2010-01-18 01:25:501041`option`
1042~~~~~~~~
1043Processes the specified option so that git fast-import behaves in a
1044way that suits the frontend's needs.
1045Note that options specified by the frontend are overridden by any
1046options the user may specify to git fast-import itself.
1047
1048....
1049 'option' SP <option> LF
1050....
1051
1052The `<option>` part of the command may contain any of the options
1053listed in the OPTIONS section that do not change import semantics,
1054without the leading '--' and is treated in the same way.
1055
1056Option commands must be the first commands on the input (not counting
1057feature commands), to give an option command after any non-option
1058command is an error.
1059
1060The following commandline options change import semantics and may therefore
1061not be passed as option:
1062
1063* date-format
1064* import-marks
1065* export-marks
Junio C Hamano0d75e872010-12-17 06:57:261066* cat-blob-fd
Junio C Hamano6ce6b6c2010-01-18 01:25:501067* force
1068
Junio C Hamanofbc773c2011-08-02 00:09:121069`done`
1070~~~~~~
1071If the `done` feature is not in use, treated as if EOF was read.
1072This can be used to tell fast-import to finish early.
1073
1074If the `--done` command line option or `feature done` command is
1075in use, the `done` command is mandatory and marks the end of the
1076stream.
1077
Junio C Hamano21391932008-02-16 10:02:541078Crash Reports
1079-------------
1080If fast-import is supplied invalid input it will terminate with a
1081non-zero exit status and create a crash report in the top level of
1082the Git repository it was importing into. Crash reports contain
1083a snapshot of the internal fast-import state as well as the most
1084recent commands that lead up to the crash.
1085
1086All recent commands (including stream comments, file changes and
1087progress commands) are shown in the command history within the crash
1088report, but raw file data and commit messages are excluded from the
1089crash report. This exclusion saves space within the report file
1090and reduces the amount of buffering that fast-import must perform
1091during execution.
1092
1093After writing a crash report fast-import will close the current
1094packfile and export the marks table. This allows the frontend
1095developer to inspect the repository state and resume the import from
1096the point where it crashed. The modified branches and tags are not
1097updated during a crash, as the import did not complete successfully.
1098Branch and tag information can be found in the crash report and
1099must be applied manually if the update is needed.
1100
1101An example crash:
1102
1103====
1104$ cat >in <<END_OF_INPUT
1105# my very first test commit
1106commit refs/heads/master
1107committer Shawn O. Pearce <spearce> 19283 -0400
1108# who is that guy anyway?
1109data <<EOF
1110this is my commit
1111EOF
1112M 644 inline .gitignore
1113data <<EOF
1114.gitignore
1115EOF
1116M 777 inline bob
1117END_OF_INPUT
1118
Junio C Hamanofce7c7e2008-07-02 03:06:381119$ git fast-import <in
Junio C Hamano21391932008-02-16 10:02:541120fatal: Corrupt mode: M 777 inline bob
1121fast-import: dumping crash report to .git/fast_import_crash_8434
1122
1123$ cat .git/fast_import_crash_8434
1124fast-import crash report:
1125 fast-import process: 8434
1126 parent process : 1391
1127 at Sat Sep 1 00:58:12 2007
1128
1129fatal: Corrupt mode: M 777 inline bob
1130
1131Most Recent Commands Before Crash
1132---------------------------------
1133 # my very first test commit
1134 commit refs/heads/master
1135 committer Shawn O. Pearce <spearce> 19283 -0400
1136 # who is that guy anyway?
1137 data <<EOF
1138 M 644 inline .gitignore
1139 data <<EOF
1140* M 777 inline bob
1141
1142Active Branch LRU
1143-----------------
1144 active_branches = 1 cur, 5 max
1145
1146 pos clock name
1147 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1148 1) 0 refs/heads/master
1149
1150Inactive Branches
1151-----------------
1152refs/heads/master:
1153 status : active loaded dirty
1154 tip commit : 0000000000000000000000000000000000000000
1155 old tree : 0000000000000000000000000000000000000000
1156 cur tree : 0000000000000000000000000000000000000000
1157 commit clock: 0
1158 last pack :
1159
1160
1161-------------------
1162END OF CRASH REPORT
1163====
1164
Junio C Hamanodfc4ce72007-02-07 23:17:291165Tips and Tricks
1166---------------
1167The following tips and tricks have been collected from various
Junio C Hamanod3339982007-02-09 08:38:481168users of fast-import, and are offered here as suggestions.
Junio C Hamanodfc4ce72007-02-07 23:17:291169
1170Use One Mark Per Commit
1171~~~~~~~~~~~~~~~~~~~~~~~
1172When doing a repository conversion, use a unique mark per commit
1173(`mark :<n>`) and supply the \--export-marks option on the command
Junio C Hamanod3339982007-02-09 08:38:481174line. fast-import will dump a file which lists every mark and the Git
Junio C Hamanodfc4ce72007-02-07 23:17:291175object SHA-1 that corresponds to it. If the frontend can tie
1176the marks back to the source repository, it is easy to verify the
1177accuracy and completeness of the import by comparing each Git
1178commit to the corresponding source revision.
1179
1180Coming from a system such as Perforce or Subversion this should be
Junio C Hamanod3339982007-02-09 08:38:481181quite simple, as the fast-import mark can also be the Perforce changeset
Junio C Hamanodfc4ce72007-02-07 23:17:291182number or the Subversion revision number.
1183
1184Freely Skip Around Branches
1185~~~~~~~~~~~~~~~~~~~~~~~~~~~
1186Don't bother trying to optimize the frontend to stick to one branch
1187at a time during an import. Although doing so might be slightly
Junio C Hamanod3339982007-02-09 08:38:481188faster for fast-import, it tends to increase the complexity of the frontend
Junio C Hamanodfc4ce72007-02-07 23:17:291189code considerably.
1190
Junio C Hamanod3339982007-02-09 08:38:481191The branch LRU builtin to fast-import tends to behave very well, and the
Junio C Hamanodfc4ce72007-02-07 23:17:291192cost of activating an inactive branch is so low that bouncing around
1193between branches has virtually no impact on import performance.
1194
Junio C Hamano9dd8bb02007-02-12 07:15:351195Handling Renames
1196~~~~~~~~~~~~~~~~
1197When importing a renamed file or directory, simply delete the old
1198name(s) and modify the new name(s) during the corresponding commit.
1199Git performs rename detection after-the-fact, rather than explicitly
1200during a commit.
1201
Junio C Hamanodfc4ce72007-02-07 23:17:291202Use Tag Fixup Branches
1203~~~~~~~~~~~~~~~~~~~~~~
1204Some other SCM systems let the user create a tag from multiple
1205files which are not from the same commit/changeset. Or to create
1206tags which are a subset of the files available in the repository.
1207
1208Importing these tags as-is in Git is impossible without making at
1209least one commit which ``fixes up'' the files to match the content
Junio C Hamanod3339982007-02-09 08:38:481210of the tag. Use fast-import's `reset` command to reset a dummy branch
Junio C Hamanodfc4ce72007-02-07 23:17:291211outside of your normal branch space to the base commit for the tag,
1212then commit one or more file fixup commits, and finally tag the
1213dummy branch.
1214
1215For example since all normal branches are stored under `refs/heads/`
1216name the tag fixup branch `TAG_FIXUP`. This way it is impossible for
1217the fixup branch used by the importer to have namespace conflicts
1218with real branches imported from the source (the name `TAG_FIXUP`
1219is not `refs/heads/TAG_FIXUP`).
1220
1221When committing fixups, consider using `merge` to connect the
1222commit(s) which are supplying file revisions to the fixup branch.
Junio C Hamano1aa40d22010-01-21 17:46:431223Doing so will allow tools such as 'git blame' to track
Junio C Hamanodfc4ce72007-02-07 23:17:291224through the real commit history and properly annotate the source
1225files.
1226
Junio C Hamanod3339982007-02-09 08:38:481227After fast-import terminates the frontend will need to do `rm .git/TAG_FIXUP`
Junio C Hamanodfc4ce72007-02-07 23:17:291228to remove the dummy branch.
1229
1230Import Now, Repack Later
1231~~~~~~~~~~~~~~~~~~~~~~~~
Junio C Hamanod3339982007-02-09 08:38:481232As soon as fast-import completes the Git repository is completely valid
Junio C Hamanoa6387422007-08-25 03:54:271233and ready for use. Typically this takes only a very short time,
Junio C Hamanodfc4ce72007-02-07 23:17:291234even for considerably large projects (100,000+ commits).
1235
1236However repacking the repository is necessary to improve data
1237locality and access performance. It can also take hours on extremely
1238large projects (especially if -f and a large \--window parameter is
1239used). Since repacking is safe to run alongside readers and writers,
1240run the repack in the background and let it finish when it finishes.
1241There is no reason to wait to explore your new Git project!
1242
1243If you choose to wait for the repack, don't try to run benchmarks
Junio C Hamanod3339982007-02-09 08:38:481244or performance tests until repacking is completed. fast-import outputs
Junio C Hamanodfc4ce72007-02-07 23:17:291245suboptimal packfiles that are simply never seen in real use
1246situations.
1247
1248Repacking Historical Data
1249~~~~~~~~~~~~~~~~~~~~~~~~~
1250If you are repacking very old imported data (e.g. older than the
1251last year), consider expending some extra CPU time and supplying
Junio C Hamano1aa40d22010-01-21 17:46:431252\--window=50 (or higher) when you run 'git repack'.
Junio C Hamanodfc4ce72007-02-07 23:17:291253This will take longer, but will also produce a smaller packfile.
1254You only need to expend the effort once, and everyone using your
1255project will benefit from the smaller repository.
1256
Junio C Hamanoe52cf782007-08-19 19:15:521257Include Some Progress Messages
1258~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1259Every once in a while have your frontend emit a `progress` message
1260to fast-import. The contents of the messages are entirely free-form,
1261so one suggestion would be to output the current month and year
1262each time the current commit date moves into the next month.
1263Your users will feel better knowing how much of the data stream
1264has been processed.
1265
Junio C Hamanodfc4ce72007-02-07 23:17:291266
Junio C Hamanodf60f442007-02-07 05:52:371267Packfile Optimization
1268---------------------
Junio C Hamanod3339982007-02-09 08:38:481269When packing a blob fast-import always attempts to deltify against the last
Junio C Hamanodf60f442007-02-07 05:52:371270blob written. Unless specifically arranged for by the frontend,
1271this will probably not be a prior version of the same file, so the
1272generated delta will not be the smallest possible. The resulting
1273packfile will be compressed, but will not be optimal.
1274
1275Frontends which have efficient access to all revisions of a
1276single file (for example reading an RCS/CVS ,v file) can choose
1277to supply all revisions of that file as a sequence of consecutive
Junio C Hamanod3339982007-02-09 08:38:481278`blob` commands. This allows fast-import to deltify the different file
Junio C Hamanodf60f442007-02-07 05:52:371279revisions against each other, saving space in the final packfile.
1280Marks can be used to later identify individual file revisions during
1281a sequence of `commit` commands.
1282
Junio C Hamanod3339982007-02-09 08:38:481283The packfile(s) created by fast-import do not encourage good disk access
1284patterns. This is caused by fast-import writing the data in the order
Junio C Hamanodf60f442007-02-07 05:52:371285it is received on standard input, while Git typically organizes
1286data within packfiles to make the most recent (current tip) data
1287appear before historical data. Git also clusters commits together,
1288speeding up revision traversal through better cache locality.
1289
1290For this reason it is strongly recommended that users repack the
Junio C Hamanod3339982007-02-09 08:38:481291repository with `git repack -a -d` after fast-import completes, allowing
Junio C Hamanodf60f442007-02-07 05:52:371292Git to reorganize the packfiles for faster data access. If blob
1293deltas are suboptimal (see above) then also adding the `-f` option
1294to force recomputation of all deltas can significantly reduce the
1295final packfile size (30-50% smaller can be quite typical).
1296
Junio C Hamanodfc4ce72007-02-07 23:17:291297
Junio C Hamanodf60f442007-02-07 05:52:371298Memory Utilization
1299------------------
Junio C Hamanod3339982007-02-09 08:38:481300There are a number of factors which affect how much memory fast-import
Junio C Hamanodf60f442007-02-07 05:52:371301requires to perform an import. Like critical sections of core
Junio C Hamanoa6387422007-08-25 03:54:271302Git, fast-import uses its own memory allocators to amortize any overheads
1303associated with malloc. In practice fast-import tends to amortize any
Junio C Hamanodf60f442007-02-07 05:52:371304malloc overheads to 0, due to its use of large block allocations.
1305
1306per object
1307~~~~~~~~~~
Junio C Hamanod3339982007-02-09 08:38:481308fast-import maintains an in-memory structure for every object written in
Junio C Hamanodf60f442007-02-07 05:52:371309this execution. On a 32 bit system the structure is 32 bytes,
1310on a 64 bit system the structure is 40 bytes (due to the larger
1311pointer sizes). Objects in the table are not deallocated until
Junio C Hamanod3339982007-02-09 08:38:481312fast-import terminates. Importing 2 million objects on a 32 bit system
Junio C Hamanodf60f442007-02-07 05:52:371313will require approximately 64 MiB of memory.
1314
1315The object table is actually a hashtable keyed on the object name
Junio C Hamanod3339982007-02-09 08:38:481316(the unique SHA-1). This storage configuration allows fast-import to reuse
Junio C Hamanodf60f442007-02-07 05:52:371317an existing or already written object and avoid writing duplicates
1318to the output packfile. Duplicate blobs are surprisingly common
1319in an import, typically due to branch merges in the source.
1320
1321per mark
1322~~~~~~~~
1323Marks are stored in a sparse array, using 1 pointer (4 bytes or 8
1324bytes, depending on pointer size) per mark. Although the array
1325is sparse, frontends are still strongly encouraged to use marks
1326between 1 and n, where n is the total number of marks required for
1327this import.
1328
1329per branch
1330~~~~~~~~~~
1331Branches are classified as active and inactive. The memory usage
1332of the two classes is significantly different.
1333
1334Inactive branches are stored in a structure which uses 96 or 120
1335bytes (32 bit or 64 bit systems, respectively), plus the length of
Junio C Hamanod3339982007-02-09 08:38:481336the branch name (typically under 200 bytes), per branch. fast-import will
Junio C Hamanodf60f442007-02-07 05:52:371337easily handle as many as 10,000 inactive branches in under 2 MiB
1338of memory.
1339
1340Active branches have the same overhead as inactive branches, but
1341also contain copies of every tree that has been recently modified on
1342that branch. If subtree `include` has not been modified since the
1343branch became active, its contents will not be loaded into memory,
1344but if subtree `src` has been modified by a commit since the branch
1345became active, then its contents will be loaded in memory.
1346
1347As active branches store metadata about the files contained on that
1348branch, their in-memory storage size can grow to a considerable size
1349(see below).
1350
Junio C Hamanod3339982007-02-09 08:38:481351fast-import automatically moves active branches to inactive status based on
Junio C Hamanodf60f442007-02-07 05:52:371352a simple least-recently-used algorithm. The LRU chain is updated on
1353each `commit` command. The maximum number of active branches can be
Junio C Hamanodfc4ce72007-02-07 23:17:291354increased or decreased on the command line with \--active-branches=.
Junio C Hamanodf60f442007-02-07 05:52:371355
1356per active tree
1357~~~~~~~~~~~~~~~
1358Trees (aka directories) use just 12 bytes of memory on top of the
1359memory required for their entries (see ``per active file'' below).
Junio C Hamanoa6387422007-08-25 03:54:271360The cost of a tree is virtually 0, as its overhead amortizes out
Junio C Hamanodf60f442007-02-07 05:52:371361over the individual file entries.
1362
1363per active file entry
1364~~~~~~~~~~~~~~~~~~~~~
1365Files (and pointers to subtrees) within active trees require 52 or 64
1366bytes (32/64 bit platforms) per entry. To conserve space, file and
1367tree names are pooled in a common string table, allowing the filename
1368``Makefile'' to use just 16 bytes (after including the string header
1369overhead) no matter how many times it occurs within the project.
1370
1371The active branch LRU, when coupled with the filename string pool
Junio C Hamanod3339982007-02-09 08:38:481372and lazy loading of subtrees, allows fast-import to efficiently import
Junio C Hamanodf60f442007-02-07 05:52:371373projects with 2,000+ branches and 45,114+ files in a very limited
1374memory footprint (less than 2.7 MiB per active branch).
1375
Junio C Hamano0d75e872010-12-17 06:57:261376Signals
1377-------
1378Sending *SIGUSR1* to the 'git fast-import' process ends the current
1379packfile early, simulating a `checkpoint` command. The impatient
1380operator can use this facility to peek at the objects and refs from an
1381import in progress, at the cost of some added running time and worse
1382compression.
Junio C Hamanodf60f442007-02-07 05:52:371383
Junio C Hamanodf60f442007-02-07 05:52:371384GIT
1385---
Junio C Hamanof7c042d2008-06-06 22:50:531386Part of the linkgit:git[1] suite