blob: 8d0c421b80b5ff110d33583cb1bc5a3b417cad90 [file] [log] [blame]
Junio C Hamano9ae1a062006-07-10 08:12:341git-svn(1)
2==========
3
4NAME
5----
Junio C Hamano7c73c662007-01-19 00:37:506git-svn - Bidirectional operation between a single Subversion branch and git
Junio C Hamano9ae1a062006-07-10 08:12:347
8SYNOPSIS
9--------
Junio C Hamanofce7c7e2008-07-02 03:06:3810'git svn' <command> [options] [arguments]
Junio C Hamano9ae1a062006-07-10 08:12:3411
12DESCRIPTION
13-----------
Junio C Hamanoba4b9282008-07-06 05:20:3114'git-svn' is a simple conduit for changesets between Subversion and git.
Junio C Hamano7f80ae82008-07-30 18:31:3515It provides a bidirectional flow of changes between a Subversion and a git
Junio C Hamanocb1c44f2008-08-06 06:19:3316repository.
Junio C Hamano9ae1a062006-07-10 08:12:3417
Junio C Hamano7f80ae82008-07-30 18:31:3518'git-svn' can track a single Subversion branch simply by using a
19URL to the branch, follow branches laid out in the Subversion recommended
20method (trunk, branches, tags directories) with the --stdlayout option, or
21follow branches in any layout with the -T/-t/-b options (see options to
22'init' below, and also the 'clone' command).
Junio C Hamano9ae1a062006-07-10 08:12:3423
Junio C Hamano7f80ae82008-07-30 18:31:3524Once tracking a Subversion branch (with any of the above methods), the git
25repository can be updated from Subversion by the 'fetch' command and
26Subversion updated from git by the 'dcommit' command.
Junio C Hamano9ae1a062006-07-10 08:12:3427
28COMMANDS
29--------
Junio C Hamano6b2cee12006-08-26 08:43:3130--
31
32'init'::
Junio C Hamano00cb3712007-02-23 11:13:5233Initializes an empty git repository with additional
Junio C Hamanoba4b9282008-07-06 05:20:3134metadata directories for 'git-svn'. The Subversion URL
Junio C Hamano00cb3712007-02-23 11:13:5235may be specified as a command-line argument, or as full
36URL arguments to -T/-t/-b. Optionally, the target
37directory to operate on can be specified as a second
38argument. Normally this command initializes the current
39directory.
40
Junio C Hamano67fad6d2007-05-06 08:53:1241-T<trunk_subdir>;;
42--trunk=<trunk_subdir>;;
43-t<tags_subdir>;;
44--tags=<tags_subdir>;;
45-b<branches_subdir>;;
46--branches=<branches_subdir>;;
Junio C Hamano377018d2007-08-23 08:41:3147-s;;
48--stdlayout;;
Junio C Hamano00cb3712007-02-23 11:13:5249These are optional command-line options for init. Each of
50these flags can point to a relative repository path
51(--tags=project/tags') or a full url
Junio C Hamano377018d2007-08-23 08:41:3152(--tags=https://foo.org/project/tags). The option --stdlayout is
53a shorthand way of setting trunk,tags,branches as the relative paths,
54which is the Subversion default. If any of the other options are given
55as well, they take precedence.
Junio C Hamano67fad6d2007-05-06 08:53:1256--no-metadata;;
Junio C Hamano00cb3712007-02-23 11:13:5257Set the 'noMetadata' option in the [svn-remote] config.
Junio C Hamano67fad6d2007-05-06 08:53:1258--use-svm-props;;
Junio C Hamano00cb3712007-02-23 11:13:5259Set the 'useSvmProps' option in the [svn-remote] config.
Junio C Hamano67fad6d2007-05-06 08:53:1260--use-svnsync-props;;
Junio C Hamano00cb3712007-02-23 11:13:5261Set the 'useSvnsyncProps' option in the [svn-remote] config.
Junio C Hamano67fad6d2007-05-06 08:53:1262--rewrite-root=<URL>;;
Junio C Hamano00cb3712007-02-23 11:13:5263Set the 'rewriteRoot' option in the [svn-remote] config.
Junio C Hamanodfccbb02008-05-26 01:16:1464--use-log-author;;
65When retrieving svn commits into git (as part of fetch, rebase, or
66dcommit operations), look for the first From: or Signed-off-by: line
67in the log message and use that as the author string.
68--add-author-from;;
69When committing to svn from git (as part of commit or dcommit
70operations), if the existing log message doesn't already have a
71From: or Signed-off-by: line, append a From: line based on the
72git commit's author string. If you use this, then --use-log-author
73will retrieve a valid author string for all commits.
Junio C Hamano67fad6d2007-05-06 08:53:1274--username=<USER>;;
Junio C Hamano00cb3712007-02-23 11:13:5275For transports that SVN handles authentication for (http,
76https, and plain svn), specify the username. For other
77transports (eg svn+ssh://), you must include the username in
78the URL, eg svn+ssh://foo@svn.bar.com/project
Junio C Hamano67fad6d2007-05-06 08:53:1279--prefix=<prefix>;;
Junio C Hamano00cb3712007-02-23 11:13:5280This allows one to specify a prefix which is prepended
81to the names of remotes if trunk/branches/tags are
82specified. The prefix does not automatically include a
83trailing slash, so be sure you include one in the
Junio C Hamano0a2ad892007-06-24 22:23:1284argument if that is what you want. If --branches/-b is
85specified, the prefix must include a trailing slash.
86Setting a prefix is useful if you wish to track multiple
87projects that share a common repository.
Junio C Hamano9ae1a062006-07-10 08:12:3488
Junio C Hamano6b2cee12006-08-26 08:43:3189'fetch'::
Junio C Hamano00cb3712007-02-23 11:13:5290Fetch unfetched revisions from the Subversion remote we are
91tracking. The name of the [svn-remote "..."] section in the
92.git/config file may be specified as an optional command-line
93argument.
Junio C Hamano9ae1a062006-07-10 08:12:3494
Junio C Hamano00cb3712007-02-23 11:13:5295'clone'::
96Runs 'init' and 'fetch'. It will automatically create a
97directory based on the basename of the URL passed to it;
98or if a second argument is passed; it will create a directory
99and work within that. It accepts all arguments that the
100'init' and 'fetch' commands accept; with the exception of
101'--fetch-all'. After a repository is cloned, the 'fetch'
102command will be able to update revisions without affecting
103the working tree; and the 'rebase' command will be able
104to update the working tree with the latest changes.
Junio C Hamano9ae1a062006-07-10 08:12:34105
Junio C Hamano00cb3712007-02-23 11:13:52106'rebase'::
107This fetches revisions from the SVN parent of the current HEAD
108and rebases the current (uncommitted to SVN) work against it.
109
Junio C Hamanoba4b9282008-07-06 05:20:31110This works similarly to `svn update` or 'git-pull' except that
111it preserves linear history with 'git-rebase' instead of
Junio C Hamano610d1762008-11-28 06:27:13112'git-merge' for ease of dcommitting with 'git-svn'.
Junio C Hamano00cb3712007-02-23 11:13:52113
Junio C Hamanoba4b9282008-07-06 05:20:31114This accepts all options that 'git-svn fetch' and 'git-rebase'
Junio C Hamanofce7c7e2008-07-02 03:06:38115accept. However, '--fetch-all' only fetches from the current
Junio C Hamanoa3fd83c2007-03-02 10:34:36116[svn-remote], and not all [svn-remote] definitions.
Junio C Hamano00cb3712007-02-23 11:13:52117
Junio C Hamanoba4b9282008-07-06 05:20:31118Like 'git-rebase'; this requires that the working tree be clean
Junio C Hamanoa3fd83c2007-03-02 10:34:36119and have no uncommitted changes.
Junio C Hamano67fad6d2007-05-06 08:53:12120
Junio C Hamano103ad7f2007-03-14 11:19:26121-l;;
122--local;;
Junio C Hamanoba4b9282008-07-06 05:20:31123Do not fetch remotely; only run 'git-rebase' against the
Junio C Hamano103ad7f2007-03-14 11:19:26124last fetched commit from the upstream SVN.
Junio C Hamano6b2cee12006-08-26 08:43:31125
126'dcommit'::
Junio C Hamano79770b62007-01-07 07:43:58127Commit each diff from a specified head directly to the SVN
Junio C Hamano6b2cee12006-08-26 08:43:31128repository, and then rebase or reset (depending on whether or
Junio C Hamano79770b62007-01-07 07:43:58129not there is a diff between SVN and head). This will create
130a revision in SVN for each commit in git.
Junio C Hamanoba4b9282008-07-06 05:20:31131It is recommended that you run 'git-svn' fetch and rebase (not
Junio C Hamano79770b62007-01-07 07:43:58132pull or merge) your commits against the latest changes in the
133SVN repository.
Junio C Hamano511162f2006-12-13 06:35:48134An optional command-line argument may be specified as an
135alternative to HEAD.
Junio C Hamano4bf6dca2006-12-21 02:25:57136This is advantageous over 'set-tree' (below) because it produces
Junio C Hamano6b2cee12006-08-26 08:43:31137cleaner, more linear history.
Junio C Hamano67fad6d2007-05-06 08:53:12138+
139--no-rebase;;
140After committing, do not rebase or reset.
Junio C Hamanofaa1e502008-08-10 03:55:58141--commit-url <URL>;;
142Commit to this SVN URL (the full path). This is intended to
143allow existing git-svn repositories created with one transport
144method (e.g. `svn://` or `http://` for anonymous read) to be
145reused if a user is later given access to an alternate transport
146method (e.g. `svn+ssh://` or `https://`) for commit.
147
148Using this option for any other purpose (don't ask)
149is very strongly discouraged.
Junio C Hamanoa3fd83c2007-03-02 10:34:36150--
Junio C Hamano6b2cee12006-08-26 08:43:31151
Junio C Hamanoa476efa2008-10-10 15:31:42152'branch'::
153Create a branch in the SVN repository.
154
155-m;;
156--message;;
157Allows to specify the commit message.
158
159-t;;
160--tag;;
161Create a tag by using the tags_subdir instead of the branches_subdir
162specified during git svn init.
163
164'tag'::
165Create a tag in the SVN repository. This is a shorthand for
166'branch -t'.
167
Junio C Hamano43d01342006-10-12 04:07:32168'log'::
169This should make it easy to look up svn log messages when svn
170users refer to -r/--revision numbers.
Junio C Hamanoa3fd83c2007-03-02 10:34:36171+
172The following features from `svn log' are supported:
173+
174--
175--revision=<n>[:<n>];;
176is supported, non-numeric args are not:
177HEAD, NEXT, BASE, PREV, etc ...
178-v/--verbose;;
179it's not completely compatible with the --verbose
180output in svn log, but reasonably close.
181--limit=<n>;;
182is NOT the same as --max-count, doesn't count
183merged/excluded commits
184--incremental;;
185supported
186--
187+
188New features:
189+
190--
191--show-commit;;
192shows the git commit sha1, as well
193--oneline;;
194our version of --pretty=oneline
195--
196+
Junio C Hamano24bc09a2008-02-28 00:27:44197NOTE: SVN itself only stores times in UTC and nothing else. The regular svn
198client converts the UTC time to the local time (or based on the TZ=
199environment). This command has the same behaviour.
200+
Junio C Hamanoba4b9282008-07-06 05:20:31201Any other arguments are passed directly to 'git-log'
Junio C Hamano43d01342006-10-12 04:07:32202
Junio C Hamano9c334152008-02-12 03:18:52203'blame'::
Junio C Hamano869bb802008-05-12 00:29:47204 Show what revision and author last modified each line of a file. The
205 output of this mode is format-compatible with the output of
206 `svn blame' by default. Like the SVN blame command,
207 local uncommitted changes in the working copy are ignored;
208 the version of the file in the HEAD revision is annotated. Unknown
Junio C Hamanoba4b9282008-07-06 05:20:31209 arguments are passed directly to 'git-blame'.
Junio C Hamano9c334152008-02-12 03:18:52210+
Junio C Hamano869bb802008-05-12 00:29:47211--git-format;;
Junio C Hamanoba4b9282008-07-06 05:20:31212Produce output in the same format as 'git-blame', but with
Junio C Hamano869bb802008-05-12 00:29:47213SVN revision numbers instead of git commit hashes. In this mode,
214changes that haven't been committed to SVN (including local
215working-copy edits) are shown as revision 0.
Junio C Hamano9c334152008-02-12 03:18:52216
Junio C Hamanoa3fd83c2007-03-02 10:34:36217--
Junio C Hamano469d60e2007-04-29 18:30:34218'find-rev'::
219When given an SVN revision number of the form 'rN', returns the
Junio C Hamanob63afff2007-05-01 03:05:55220corresponding git commit hash (this can optionally be followed by a
221tree-ish to specify which branch should be searched). When given a
222tree-ish, returns the corresponding SVN revision number.
Junio C Hamano469d60e2007-04-29 18:30:34223
Junio C Hamano4bf6dca2006-12-21 02:25:57224'set-tree'::
Junio C Hamano43d01342006-10-12 04:07:32225You should consider using 'dcommit' instead of this command.
Junio C Hamano9ae1a062006-07-10 08:12:34226Commit specified commit or tree objects to SVN. This relies on
227your imported fetch data being up-to-date. This makes
228absolutely no attempts to do patching when committing to SVN, it
229simply overwrites files with those specified in the tree or
230commit. All merging is assumed to have taken place
Junio C Hamanoba4b9282008-07-06 05:20:31231independently of 'git-svn' functions.
Junio C Hamano9ae1a062006-07-10 08:12:34232
Junio C Hamano47d68a52008-05-06 06:35:40233'create-ignore'::
Junio C Hamano47d68a52008-05-06 06:35:40234Recursively finds the svn:ignore property on directories and
235creates matching .gitignore files. The resulting files are staged to
Junio C Hamanofeeb1be2008-05-22 00:53:35236be committed, but are not committed. Use -r/--revision to refer to a
Junio C Hamanocb1c44f2008-08-06 06:19:33237specific revision.
Junio C Hamano47d68a52008-05-06 06:35:40238
Junio C Hamano6b2cee12006-08-26 08:43:31239'show-ignore'::
Junio C Hamano9ae1a062006-07-10 08:12:34240Recursively finds and lists the svn:ignore property on
241directories. The output is suitable for appending to
242the $GIT_DIR/info/exclude file.
243
Junio C Hamano43d01342006-10-12 04:07:32244'commit-diff'::
245Commits the diff of two tree-ish arguments from the
Junio C Hamano7f80ae82008-07-30 18:31:35246command-line. This command does not rely on being inside an `git-svn
Junio C Hamanofce7c7e2008-07-02 03:06:38247init`-ed repository. This command takes three arguments, (a) the
Junio C Hamano43d01342006-10-12 04:07:32248original tree to diff against, (b) the new tree result, (c) the
249URL of the target Subversion repository. The final argument
Junio C Hamanoba4b9282008-07-06 05:20:31250(URL) may be omitted if you are working from a 'git-svn'-aware
251repository (that has been `init`-ed with 'git-svn').
Junio C Hamano23db8852006-11-09 23:35:53252The -r<revision> option is required for this.
Junio C Hamano43d01342006-10-12 04:07:32253
Junio C Hamanoa0970542007-11-23 08:43:30254'info'::
255Shows information about a file or directory similar to what
256`svn info' provides. Does not currently support a -r/--revision
257argument. Use the --url option to output only the value of the
258'URL:' field.
259
Junio C Hamanofeeb1be2008-05-22 00:53:35260'proplist'::
261Lists the properties stored in the Subversion repository about a
262given file or directory. Use -r/--revision to refer to a specific
263Subversion revision.
264
265'propget'::
266Gets the Subversion property given as the first argument, for a
267file. A specific revision can be specified with -r/--revision.
268
269'show-externals'::
270Shows the Subversion externals. Use -r/--revision to specify a
271specific revision.
272
Junio C Hamano6b2cee12006-08-26 08:43:31273--
274
Junio C Hamano9ae1a062006-07-10 08:12:34275OPTIONS
276-------
Junio C Hamano6b2cee12006-08-26 08:43:31277--
278
Junio C Hamano00cb3712007-02-23 11:13:52279--shared[={false|true|umask|group|all|world|everybody}]::
Junio C Hamano43d01342006-10-12 04:07:32280--template=<template_directory>::
281Only used with the 'init' command.
Junio C Hamanoba4b9282008-07-06 05:20:31282These are passed directly to 'git-init'.
Junio C Hamano43d01342006-10-12 04:07:32283
Junio C Hamano9ae1a062006-07-10 08:12:34284-r <ARG>::
285--revision <ARG>::
Junio C Hamano9ae1a062006-07-10 08:12:34286
Junio C Hamano00cb3712007-02-23 11:13:52287Used with the 'fetch' command.
Junio C Hamano9ae1a062006-07-10 08:12:34288
Junio C Hamano00cb3712007-02-23 11:13:52289This allows revision ranges for partial/cauterized history
290to be supported. $NUMBER, $NUMBER1:$NUMBER2 (numeric ranges),
291$NUMBER:HEAD, and BASE:$NUMBER are all supported.
Junio C Hamano6b2cee12006-08-26 08:43:31292
Junio C Hamano00cb3712007-02-23 11:13:52293This can allow you to make partial mirrors when running fetch;
294but is generally not recommended because history will be skipped
295and lost.
Junio C Hamano9ae1a062006-07-10 08:12:34296
297-::
298--stdin::
Junio C Hamano9ae1a062006-07-10 08:12:34299
Junio C Hamano4bf6dca2006-12-21 02:25:57300Only used with the 'set-tree' command.
Junio C Hamano6b2cee12006-08-26 08:43:31301
302Read a list of commits from stdin and commit them in reverse
303order. Only the leading sha1 is read from each line, so
Junio C Hamanoba4b9282008-07-06 05:20:31304'git-rev-list --pretty=oneline' output can be used.
Junio C Hamano9ae1a062006-07-10 08:12:34305
306--rmdir::
Junio C Hamano9ae1a062006-07-10 08:12:34307
Junio C Hamano4bf6dca2006-12-21 02:25:57308Only used with the 'dcommit', 'set-tree' and 'commit-diff' commands.
Junio C Hamano9ae1a062006-07-10 08:12:34309
Junio C Hamano6b2cee12006-08-26 08:43:31310Remove directories from the SVN tree if there are no files left
311behind. SVN can version empty directories, and they are not
312removed by default if there are no files left in them. git
313cannot version empty directories. Enabling this flag will make
314the commit to SVN act like git.
315
Junio C Hamano7ad22dc2007-01-29 02:55:48316config key: svn.rmdir
Junio C Hamano9ae1a062006-07-10 08:12:34317
318-e::
319--edit::
Junio C Hamano9ae1a062006-07-10 08:12:34320
Junio C Hamano4bf6dca2006-12-21 02:25:57321Only used with the 'dcommit', 'set-tree' and 'commit-diff' commands.
Junio C Hamano9ae1a062006-07-10 08:12:34322
Junio C Hamano6b2cee12006-08-26 08:43:31323Edit the commit message before committing to SVN. This is off by
324default for objects that are commits, and forced on when committing
325tree objects.
326
Junio C Hamano7ad22dc2007-01-29 02:55:48327config key: svn.edit
Junio C Hamano9ae1a062006-07-10 08:12:34328
329-l<num>::
330--find-copies-harder::
Junio C Hamano9ae1a062006-07-10 08:12:34331
Junio C Hamano4bf6dca2006-12-21 02:25:57332Only used with the 'dcommit', 'set-tree' and 'commit-diff' commands.
Junio C Hamano9ae1a062006-07-10 08:12:34333
Junio C Hamanoba4b9282008-07-06 05:20:31334They are both passed directly to 'git-diff-tree'; see
Junio C Hamano35738e82008-01-07 07:55:46335linkgit:git-diff-tree[1] for more information.
Junio C Hamano6b2cee12006-08-26 08:43:31336
337[verse]
Junio C Hamano7ad22dc2007-01-29 02:55:48338config key: svn.l
339config key: svn.findcopiesharder
Junio C Hamano9ae1a062006-07-10 08:12:34340
341-A<filename>::
342--authors-file=<filename>::
343
Junio C Hamano7f80ae82008-07-30 18:31:35344Syntax is compatible with the file used by 'git-cvsimport':
Junio C Hamano9ae1a062006-07-10 08:12:34345
346------------------------------------------------------------------------
Junio C Hamano6b2cee12006-08-26 08:43:31347loginname = Joe User <user@example.com>
Junio C Hamano9ae1a062006-07-10 08:12:34348------------------------------------------------------------------------
349
Junio C Hamanoba4b9282008-07-06 05:20:31350If this option is specified and 'git-svn' encounters an SVN
351committer name that does not exist in the authors-file, 'git-svn'
Junio C Hamano6b2cee12006-08-26 08:43:31352will abort operation. The user will then have to add the
Junio C Hamanoba4b9282008-07-06 05:20:31353appropriate entry. Re-running the previous 'git-svn' command
Junio C Hamano6b2cee12006-08-26 08:43:31354after the authors-file is modified should continue operation.
Junio C Hamano9ae1a062006-07-10 08:12:34355
Junio C Hamano7ad22dc2007-01-29 02:55:48356config key: svn.authorsfile
Junio C Hamano43d01342006-10-12 04:07:32357
358-q::
359--quiet::
Junio C Hamanoba4b9282008-07-06 05:20:31360Make 'git-svn' less verbose.
Junio C Hamano43d01342006-10-12 04:07:32361
362--repack[=<n>]::
Junio C Hamanoa3fd83c2007-03-02 10:34:36363--repack-flags=<flags>::
Junio C Hamano43d01342006-10-12 04:07:32364
Junio C Hamanoa3fd83c2007-03-02 10:34:36365These should help keep disk usage sane for large fetches
366with many revisions.
Junio C Hamano43d01342006-10-12 04:07:32367
Junio C Hamanoa3fd83c2007-03-02 10:34:36368--repack takes an optional argument for the number of revisions
369to fetch before repacking. This defaults to repacking every
3701000 commits fetched if no argument is specified.
Junio C Hamano43d01342006-10-12 04:07:32371
Junio C Hamanoba4b9282008-07-06 05:20:31372--repack-flags are passed directly to 'git-repack'.
Junio C Hamanoa3fd83c2007-03-02 10:34:36373
374[verse]
Junio C Hamano7ad22dc2007-01-29 02:55:48375config key: svn.repack
376config key: svn.repackflags
Junio C Hamano6b2cee12006-08-26 08:43:31377
378-m::
379--merge::
380-s<strategy>::
381--strategy=<strategy>::
382
Junio C Hamano00cb3712007-02-23 11:13:52383These are only used with the 'dcommit' and 'rebase' commands.
Junio C Hamano6b2cee12006-08-26 08:43:31384
Junio C Hamanoba4b9282008-07-06 05:20:31385Passed directly to 'git-rebase' when using 'dcommit' if a
386'git-reset' cannot be used (see 'dcommit').
Junio C Hamano6b2cee12006-08-26 08:43:31387
388-n::
389--dry-run::
390
Junio C Hamanoa476efa2008-10-10 15:31:42391This can be used with the 'dcommit', 'rebase', 'branch' and 'tag'
392commands.
Junio C Hamano6b2cee12006-08-26 08:43:31393
Junio C Hamano9e1793f2008-06-02 07:31:16394For 'dcommit', print out the series of git arguments that would show
Junio C Hamano6b2cee12006-08-26 08:43:31395which diffs would be committed to SVN.
396
Junio C Hamano9e1793f2008-06-02 07:31:16397For 'rebase', display the local branch associated with the upstream svn
398repository associated with the current branch and the URL of svn
399repository that will be fetched from.
400
Junio C Hamanoa476efa2008-10-10 15:31:42401For 'branch' and 'tag', display the urls that will be used for copying when
402creating the branch or tag.
403
Junio C Hamano6b2cee12006-08-26 08:43:31404--
Junio C Hamano9ae1a062006-07-10 08:12:34405
406ADVANCED OPTIONS
407----------------
Junio C Hamano6b2cee12006-08-26 08:43:31408--
409
Junio C Hamano9ae1a062006-07-10 08:12:34410-i<GIT_SVN_ID>::
411--id <GIT_SVN_ID>::
Junio C Hamano6b2cee12006-08-26 08:43:31412
Junio C Hamano00cb3712007-02-23 11:13:52413This sets GIT_SVN_ID (instead of using the environment). This
414allows the user to override the default refname to fetch from
415when tracking a single URL. The 'log' and 'dcommit' commands
416no longer require this switch as an argument.
417
418-R<remote name>::
419--svn-remote <remote name>::
420Specify the [svn-remote "<remote name>"] section to use,
421this allows SVN multiple repositories to be tracked.
422Default: "svn"
Junio C Hamano6b2cee12006-08-26 08:43:31423
Junio C Hamano43d01342006-10-12 04:07:32424--follow-parent::
425This is especially helpful when we're tracking a directory
426that has been moved around within the repository, or if we
427started tracking a branch and never tracked the trunk it was
Junio C Hamano00cb3712007-02-23 11:13:52428descended from. This feature is enabled by default, use
429--no-follow-parent to disable it.
Junio C Hamano43d01342006-10-12 04:07:32430
Junio C Hamano7ad22dc2007-01-29 02:55:48431config key: svn.followparent
Junio C Hamano43d01342006-10-12 04:07:32432
Junio C Hamano00cb3712007-02-23 11:13:52433--
434CONFIG FILE-ONLY OPTIONS
435------------------------
436--
437
438svn.noMetadata::
439svn-remote.<name>.noMetadata::
Junio C Hamano43d01342006-10-12 04:07:32440
Junio C Hamanofce7c7e2008-07-02 03:06:38441This gets rid of the 'git-svn-id:' lines at the end of every commit.
Junio C Hamano43d01342006-10-12 04:07:32442
Junio C Hamanoba4b9282008-07-06 05:20:31443If you lose your .git/svn/git-svn/.rev_db file, 'git-svn' will not
Junio C Hamanoa3fd83c2007-03-02 10:34:36444be able to rebuild it and you won't be able to fetch again,
445either. This is fine for one-shot imports.
446
Junio C Hamanoba4b9282008-07-06 05:20:31447The 'git-svn log' command will not work on repositories using
Junio C Hamanoa3fd83c2007-03-02 10:34:36448this, either. Using this conflicts with the 'useSvmProps'
449option for (hopefully) obvious reasons.
Junio C Hamano43d01342006-10-12 04:07:32450
Junio C Hamano00cb3712007-02-23 11:13:52451svn.useSvmProps::
452svn-remote.<name>.useSvmProps::
Junio C Hamano43d01342006-10-12 04:07:32453
Junio C Hamanoba4b9282008-07-06 05:20:31454This allows 'git-svn' to re-map repository URLs and UUIDs from
Junio C Hamanoa3fd83c2007-03-02 10:34:36455mirrors created using SVN::Mirror (or svk) for metadata.
456
457If an SVN revision has a property, "svm:headrev", it is likely
458that the revision was created by SVN::Mirror (also used by SVK).
459The property contains a repository UUID and a revision. We want
460to make it look like we are mirroring the original URL, so
461introduce a helper function that returns the original identity
462URL and UUID, and use it when generating metadata in commit
463messages.
Junio C Hamano9ae1a062006-07-10 08:12:34464
Junio C Hamano00cb3712007-02-23 11:13:52465svn.useSvnsyncProps::
466svn-remote.<name>.useSvnsyncprops::
467Similar to the useSvmProps option; this is for users
468of the svnsync(1) command distributed with SVN 1.4.x and
469later.
Junio C Hamano9ae1a062006-07-10 08:12:34470
Junio C Hamano00cb3712007-02-23 11:13:52471svn-remote.<name>.rewriteRoot::
472This allows users to create repositories from alternate
Junio C Hamanoba4b9282008-07-06 05:20:31473URLs. For example, an administrator could run 'git-svn' on the
Junio C Hamano00cb3712007-02-23 11:13:52474server locally (accessing via file://) but wish to distribute
475the repository with a public http:// or svn:// URL in the
476metadata so users of it will see the public URL.
Junio C Hamano6b2cee12006-08-26 08:43:31477
Junio C Hamano0538b892008-06-20 04:18:33478--
479
Junio C Hamano00cb3712007-02-23 11:13:52480Since the noMetadata, rewriteRoot, useSvnsyncProps and useSvmProps
Junio C Hamanoba4b9282008-07-06 05:20:31481options all affect the metadata generated and used by 'git-svn'; they
Junio C Hamano00cb3712007-02-23 11:13:52482*must* be set in the configuration file before any history is imported
483and these settings should never be changed once they are set.
Junio C Hamano9ae1a062006-07-10 08:12:34484
Junio C Hamano00cb3712007-02-23 11:13:52485Additionally, only one of these four options can be used per-svn-remote
486section because they affect the 'git-svn-id:' metadata line.
Junio C Hamano47c1e3c2006-09-25 04:45:55487
Junio C Hamano9ae1a062006-07-10 08:12:34488
Junio C Hamanoa3fd83c2007-03-02 10:34:36489BASIC EXAMPLES
490--------------
Junio C Hamano9ae1a062006-07-10 08:12:34491
Junio C Hamano764a6672007-10-23 01:23:31492Tracking and contributing to the trunk of a Subversion-managed project:
Junio C Hamano9ae1a062006-07-10 08:12:34493
494------------------------------------------------------------------------
Junio C Hamano00cb3712007-02-23 11:13:52495# Clone a repo (like git clone):
Junio C Hamanoa476efa2008-10-10 15:31:42496git svn clone http://svn.example.com/project/trunk
Junio C Hamano00cb3712007-02-23 11:13:52497# Enter the newly cloned directory:
498cd trunk
499# You should be on master branch, double-check with git-branch
500git branch
501# Do some work and commit locally to git:
502git commit ...
503# Something is committed to SVN, rebase your local changes against the
504# latest changes in SVN:
Junio C Hamanofce7c7e2008-07-02 03:06:38505git svn rebase
Junio C Hamano00cb3712007-02-23 11:13:52506# Now commit your changes (that were committed previously using git) to SVN,
507# as well as automatically updating your working HEAD:
Junio C Hamanofce7c7e2008-07-02 03:06:38508git svn dcommit
Junio C Hamano9ae1a062006-07-10 08:12:34509# Append svn:ignore settings to the default git exclude file:
Junio C Hamanofce7c7e2008-07-02 03:06:38510git svn show-ignore >> .git/info/exclude
Junio C Hamano9ae1a062006-07-10 08:12:34511------------------------------------------------------------------------
512
Junio C Hamanoa8d072a2007-01-05 07:46:25513Tracking and contributing to an entire Subversion-managed project
514(complete with a trunk, tags and branches):
Junio C Hamanoa8d072a2007-01-05 07:46:25515
516------------------------------------------------------------------------
Junio C Hamano00cb3712007-02-23 11:13:52517# Clone a repo (like git clone):
Junio C Hamanoa476efa2008-10-10 15:31:42518git svn clone http://svn.example.com/project -T trunk -b branches -t tags
Junio C Hamano00cb3712007-02-23 11:13:52519# View all branches and tags you have cloned:
520git branch -r
Junio C Hamanoa476efa2008-10-10 15:31:42521# Create a new branch in SVN
522 git svn branch waldo
Junio C Hamano00cb3712007-02-23 11:13:52523# Reset your master to trunk (or any other branch, replacing 'trunk'
524# with the appropriate name):
525git reset --hard remotes/trunk
526# You may only dcommit to one branch/tag/trunk at a time. The usage
Junio C Hamanoa3fd83c2007-03-02 10:34:36527# of dcommit/rebase/show-ignore should be the same as above.
Junio C Hamanoa8d072a2007-01-05 07:46:25528------------------------------------------------------------------------
529
Junio C Hamanoba4b9282008-07-06 05:20:31530The initial 'git-svn clone' can be quite time-consuming
Junio C Hamanoe9bfa9b2007-08-07 06:06:11531(especially for large Subversion repositories). If multiple
532people (or one person with multiple machines) want to use
Junio C Hamanoba4b9282008-07-06 05:20:31533'git-svn' to interact with the same Subversion repository, you can
534do the initial 'git-svn clone' to a repository on a server and
535have each person clone that repository with 'git-clone':
Junio C Hamanoe9bfa9b2007-08-07 06:06:11536
537------------------------------------------------------------------------
538# Do the initial import on a server
Junio C Hamanoa476efa2008-10-10 15:31:42539ssh server "cd /pub && git svn clone http://svn.example.com/project
Junio C Hamanof7bb6692008-01-27 08:23:46540# Clone locally - make sure the refs/remotes/ space matches the server
541mkdir project
542cd project
Junio C Hamanofce7c7e2008-07-02 03:06:38543git init
Junio C Hamanof7bb6692008-01-27 08:23:46544git remote add origin server:/pub/project
Junio C Hamano9e7b3f32008-06-29 08:49:03545git config --add remote.origin.fetch '+refs/remotes/*:refs/remotes/*'
Junio C Hamanof7bb6692008-01-27 08:23:46546git fetch
Junio C Hamanod3452a02008-11-15 08:07:55547# Create a local branch from one of the branches just fetched
548git checkout -b master FETCH_HEAD
Junio C Hamanoe9bfa9b2007-08-07 06:06:11549# Initialize git-svn locally (be sure to use the same URL and -T/-b/-t options as were used on server)
Junio C Hamanoa476efa2008-10-10 15:31:42550git svn init http://svn.example.com/project
Junio C Hamanoe9bfa9b2007-08-07 06:06:11551# Pull the latest changes from Subversion
Junio C Hamanofce7c7e2008-07-02 03:06:38552git svn rebase
Junio C Hamanoe9bfa9b2007-08-07 06:06:11553------------------------------------------------------------------------
554
Junio C Hamano79770b62007-01-07 07:43:58555REBASE VS. PULL/MERGE
556---------------------
Junio C Hamano6b2cee12006-08-26 08:43:31557
Junio C Hamanoba4b9282008-07-06 05:20:31558Originally, 'git-svn' recommended that the 'remotes/git-svn' branch be
Junio C Hamano79770b62007-01-07 07:43:58559pulled or merged from. This is because the author favored
Junio C Hamanofce7c7e2008-07-02 03:06:38560`git svn set-tree B` to commit a single head rather than the
561`git svn set-tree A..B` notation to commit multiple commits.
Junio C Hamano6b2cee12006-08-26 08:43:31562
Junio C Hamanofce7c7e2008-07-02 03:06:38563If you use `git svn set-tree A..B` to commit several diffs and you do
Junio C Hamano79770b62007-01-07 07:43:58564not have the latest remotes/git-svn merged into my-branch, you should
Junio C Hamanofce7c7e2008-07-02 03:06:38565use `git svn rebase` to update your work branch instead of `git pull` or
566`git merge`. `pull`/`merge' can cause non-linear history to be flattened
Junio C Hamano79770b62007-01-07 07:43:58567when committing into SVN, which can lead to merge commits reversing
568previous commits in SVN.
Junio C Hamano6b2cee12006-08-26 08:43:31569
Junio C Hamano9ae1a062006-07-10 08:12:34570DESIGN PHILOSOPHY
571-----------------
572Merge tracking in Subversion is lacking and doing branched development
Junio C Hamanoba4b9282008-07-06 05:20:31573with Subversion can be cumbersome as a result. While 'git-svn' can track
Junio C Hamanod2d9ae12007-09-19 02:27:57574copy history (including branches and tags) for repositories adopting a
575standard layout, it cannot yet represent merge history that happened
576inside git back upstream to SVN users. Therefore it is advised that
577users keep history as linear as possible inside git to ease
578compatibility with SVN (see the CAVEATS section below).
Junio C Hamano9ae1a062006-07-10 08:12:34579
Junio C Hamanobdebabb2007-08-23 00:25:09580CAVEATS
581-------
582
583For the sake of simplicity and interoperating with a less-capable system
Junio C Hamanoba4b9282008-07-06 05:20:31584(SVN), it is recommended that all 'git-svn' users clone, fetch and dcommit
585directly from the SVN server, and avoid all 'git-clone'/'pull'/'merge'/'push'
Junio C Hamanobdebabb2007-08-23 00:25:09586operations between git repositories and branches. The recommended
587method of exchanging code between git branches and users is
Junio C Hamanoba4b9282008-07-06 05:20:31588'git-format-patch' and 'git-am', or just 'dcommit'ing to the SVN repository.
Junio C Hamanobdebabb2007-08-23 00:25:09589
Junio C Hamanoba4b9282008-07-06 05:20:31590Running 'git-merge' or 'git-pull' is NOT recommended on a branch you
Junio C Hamanofce7c7e2008-07-02 03:06:38591plan to 'dcommit' from. Subversion does not represent merges in any
Junio C Hamanobdebabb2007-08-23 00:25:09592reasonable or useful fashion; so users using Subversion cannot see any
593merges you've made. Furthermore, if you merge or pull from a git branch
Junio C Hamanofce7c7e2008-07-02 03:06:38594that is a mirror of an SVN branch, 'dcommit' may commit to the wrong
Junio C Hamanobdebabb2007-08-23 00:25:09595branch.
596
Junio C Hamanoba4b9282008-07-06 05:20:31597'git-clone' does not clone branches under the refs/remotes/ hierarchy or
598any 'git-svn' metadata, or config. So repositories created and managed with
599using 'git-svn' should use 'rsync' for cloning, if cloning is to be done
Junio C Hamanobdebabb2007-08-23 00:25:09600at all.
601
Junio C Hamanoba4b9282008-07-06 05:20:31602Since 'dcommit' uses rebase internally, any git branches you 'git-push' to
Junio C Hamanofce7c7e2008-07-02 03:06:38603before 'dcommit' on will require forcing an overwrite of the existing ref
Junio C Hamanobdebabb2007-08-23 00:25:09604on the remote repository. This is generally considered bad practice,
Junio C Hamanofce7c7e2008-07-02 03:06:38605see the linkgit:git-push[1] documentation for details.
Junio C Hamanobdebabb2007-08-23 00:25:09606
Junio C Hamanofce7c7e2008-07-02 03:06:38607Do not use the --amend option of linkgit:git-commit[1] on a change you've
Junio C Hamanobdebabb2007-08-23 00:25:09608already dcommitted. It is considered bad practice to --amend commits
609you've already pushed to a remote repository for other users, and
610dcommit with SVN is analogous to that.
611
Junio C Hamano9ae1a062006-07-10 08:12:34612BUGS
613----
Junio C Hamano43d01342006-10-12 04:07:32614
Junio C Hamano00cb3712007-02-23 11:13:52615We ignore all SVN properties except svn:executable. Any unhandled
616properties are logged to $GIT_DIR/svn/<refname>/unhandled.log
Junio C Hamano9ae1a062006-07-10 08:12:34617
Junio C Hamano9ae1a062006-07-10 08:12:34618Renamed and copied directories are not detected by git and hence not
619tracked when committing to SVN. I do not plan on adding support for
620this as it's quite difficult and time-consuming to get working for all
Junio C Hamano00cb3712007-02-23 11:13:52621the possible corner cases (git doesn't do it, either). Committing
622renamed and copied files are fully supported if they're similar enough
623for git to detect them.
624
625CONFIGURATION
626-------------
627
Junio C Hamanoba4b9282008-07-06 05:20:31628'git-svn' stores [svn-remote] configuration information in the
Junio C Hamano00cb3712007-02-23 11:13:52629repository .git/config file. It is similar the core git
630[remote] sections except 'fetch' keys do not accept glob
631arguments; but they are instead handled by the 'branches'
632and 'tags' keys. Since some SVN repositories are oddly
633configured with multiple projects glob expansions such those
634listed below are allowed:
635
636------------------------------------------------------------------------
637[svn-remote "project-a"]
638url = http://server.org/svn
639branches = branches/*/project-a:refs/remotes/project-a/branches/*
640tags = tags/*/project-a:refs/remotes/project-a/tags/*
641trunk = trunk/project-a:refs/remotes/project-a/trunk
642------------------------------------------------------------------------
643
644Keep in mind that the '*' (asterisk) wildcard of the local ref
Junio C Hamano7d9e9bd2007-08-29 07:31:47645(right of the ':') *must* be the farthest right path component;
Junio C Hamano00cb3712007-02-23 11:13:52646however the remote wildcard may be anywhere as long as it's own
Junio C Hamanoa6387422007-08-25 03:54:27647independent path component (surrounded by '/' or EOL). This
Junio C Hamano00cb3712007-02-23 11:13:52648type of configuration is not automatically created by 'init' and
Junio C Hamanoba4b9282008-07-06 05:20:31649should be manually entered with a text-editor or using 'git-config'.
Junio C Hamano9ae1a062006-07-10 08:12:34650
Junio C Hamano6b2cee12006-08-26 08:43:31651SEE ALSO
652--------
Junio C Hamano35738e82008-01-07 07:55:46653linkgit:git-rebase[1]
Junio C Hamano6b2cee12006-08-26 08:43:31654
Junio C Hamano9ae1a062006-07-10 08:12:34655Author
656------
657Written by Eric Wong <normalperson@yhbt.net>.
658
659Documentation
660-------------
661Written by Eric Wong <normalperson@yhbt.net>.