| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 1 | git-svn(1) | 
|  | 2 | ========== | 
|  | 3 |  | 
|  | 4 | NAME | 
|  | 5 | ---- | 
| Junio C Hamano | 688eae0 | 2009-06-28 05:19:50 | [diff] [blame] | 6 | git-svn - Bidirectional operation between a Subversion repository and git | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 7 |  | 
|  | 8 | SYNOPSIS | 
|  | 9 | -------- | 
| Junio C Hamano | 15567bc | 2011-07-23 00:51:59 | [diff] [blame] | 10 | [verse] | 
| Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 11 | 'git svn' <command> [options] [arguments] | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 12 |  | 
|  | 13 | DESCRIPTION | 
|  | 14 | ----------- | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 15 | 'git svn' is a simple conduit for changesets between Subversion and git. | 
| Junio C Hamano | 7f80ae8 | 2008-07-30 18:31:35 | [diff] [blame] | 16 | It provides a bidirectional flow of changes between a Subversion and a git | 
| Junio C Hamano | cb1c44f | 2008-08-06 06:19:33 | [diff] [blame] | 17 | repository. | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 18 |  | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 19 | 'git svn' can track a standard Subversion repository, | 
| Junio C Hamano | 688eae0 | 2009-06-28 05:19:50 | [diff] [blame] | 20 | following the common "trunk/branches/tags" layout, with the --stdlayout option. | 
|  | 21 | It can also follow branches and tags in any layout with the -T/-t/-b options | 
|  | 22 | (see options to 'init' below, and also the 'clone' command). | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 23 |  | 
| Junio C Hamano | 688eae0 | 2009-06-28 05:19:50 | [diff] [blame] | 24 | Once tracking a Subversion repository (with any of the above methods), the git | 
| Junio C Hamano | 7f80ae8 | 2008-07-30 18:31:35 | [diff] [blame] | 25 | repository can be updated from Subversion by the 'fetch' command and | 
|  | 26 | Subversion updated from git by the 'dcommit' command. | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 27 |  | 
|  | 28 | COMMANDS | 
|  | 29 | -------- | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 30 |  | 
|  | 31 | 'init':: | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 32 | Initializes an empty git repository with additional | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 33 | metadata directories for 'git svn'. The Subversion URL | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 34 | may be specified as a command-line argument, or as full | 
|  | 35 | URL arguments to -T/-t/-b. Optionally, the target | 
|  | 36 | directory to operate on can be specified as a second | 
|  | 37 | argument. Normally this command initializes the current | 
|  | 38 | directory. | 
|  | 39 |  | 
| Junio C Hamano | 67fad6d | 2007-05-06 08:53:12 | [diff] [blame] | 40 | -T<trunk_subdir>;; | 
|  | 41 | --trunk=<trunk_subdir>;; | 
|  | 42 | -t<tags_subdir>;; | 
|  | 43 | --tags=<tags_subdir>;; | 
|  | 44 | -b<branches_subdir>;; | 
|  | 45 | --branches=<branches_subdir>;; | 
| Junio C Hamano | 377018d | 2007-08-23 08:41:31 | [diff] [blame] | 46 | -s;; | 
|  | 47 | --stdlayout;; | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 48 | These are optional command-line options for init. Each of | 
|  | 49 | these flags can point to a relative repository path | 
| Junio C Hamano | 688eae0 | 2009-06-28 05:19:50 | [diff] [blame] | 50 | (--tags=project/tags) or a full url | 
|  | 51 | (--tags=https://foo.org/project/tags). | 
|  | 52 | You can specify more than one --tags and/or --branches options, in case | 
|  | 53 | your Subversion repository places tags or branches under multiple paths. | 
|  | 54 | The option --stdlayout is | 
| Junio C Hamano | 377018d | 2007-08-23 08:41:31 | [diff] [blame] | 55 | a shorthand way of setting trunk,tags,branches as the relative paths, | 
|  | 56 | which is the Subversion default. If any of the other options are given | 
|  | 57 | as well, they take precedence. | 
| Junio C Hamano | 67fad6d | 2007-05-06 08:53:12 | [diff] [blame] | 58 | --no-metadata;; | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 59 | Set the 'noMetadata' option in the [svn-remote] config. | 
| Junio C Hamano | 657fd8a | 2010-10-07 00:01:24 | [diff] [blame] | 60 | This option is not recommended, please read the 'svn.noMetadata' | 
|  | 61 | section of this manpage before using this option. | 
| Junio C Hamano | 67fad6d | 2007-05-06 08:53:12 | [diff] [blame] | 62 | --use-svm-props;; | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 63 | Set the 'useSvmProps' option in the [svn-remote] config. | 
| Junio C Hamano | 67fad6d | 2007-05-06 08:53:12 | [diff] [blame] | 64 | --use-svnsync-props;; | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 65 | Set the 'useSvnsyncProps' option in the [svn-remote] config. | 
| Junio C Hamano | 67fad6d | 2007-05-06 08:53:12 | [diff] [blame] | 66 | --rewrite-root=<URL>;; | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 67 | Set the 'rewriteRoot' option in the [svn-remote] config. | 
| Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 68 | --rewrite-uuid=<UUID>;; | 
|  | 69 | Set the 'rewriteUUID' option in the [svn-remote] config. | 
| Junio C Hamano | 63c2bc9 | 2011-02-28 06:41:28 | [diff] [blame] | 70 | --username=<user>;; | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 71 | For transports that SVN handles authentication for (http, | 
|  | 72 | https, and plain svn), specify the username. For other | 
|  | 73 | transports (eg svn+ssh://), you must include the username in | 
|  | 74 | the URL, eg svn+ssh://foo@svn.bar.com/project | 
| Junio C Hamano | 67fad6d | 2007-05-06 08:53:12 | [diff] [blame] | 75 | --prefix=<prefix>;; | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 76 | This allows one to specify a prefix which is prepended | 
|  | 77 | to the names of remotes if trunk/branches/tags are | 
|  | 78 | specified. The prefix does not automatically include a | 
|  | 79 | trailing slash, so be sure you include one in the | 
| Junio C Hamano | 0a2ad89 | 2007-06-24 22:23:12 | [diff] [blame] | 80 | argument if that is what you want. If --branches/-b is | 
|  | 81 | specified, the prefix must include a trailing slash. | 
|  | 82 | Setting a prefix is useful if you wish to track multiple | 
|  | 83 | projects that share a common repository. | 
| Junio C Hamano | 5534441 | 2009-04-12 18:31:19 | [diff] [blame] | 84 | --ignore-paths=<regex>;; | 
|  | 85 | When passed to 'init' or 'clone' this regular expression will | 
|  | 86 | be preserved as a config key. See 'fetch' for a description | 
|  | 87 | of '--ignore-paths'. | 
| Junio C Hamano | aa2cd76 | 2009-07-26 08:14:01 | [diff] [blame] | 88 | --no-minimize-url;; | 
|  | 89 | When tracking multiple directories (using --stdlayout, | 
|  | 90 | --branches, or --tags options), git svn will attempt to connect | 
|  | 91 | to the root (or highest allowed level) of the Subversion | 
|  | 92 | repository. This default allows better tracking of history if | 
|  | 93 | entire projects are moved within a repository, but may cause | 
|  | 94 | issues on repositories where read access restrictions are in | 
|  | 95 | place. Passing '--no-minimize-url' will allow git svn to | 
|  | 96 | accept URLs as-is without attempting to connect to a higher | 
|  | 97 | level directory. This option is off by default when only | 
|  | 98 | one URL/branch is tracked (it would do little good). | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 99 |  | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 100 | 'fetch':: | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 101 | Fetch unfetched revisions from the Subversion remote we are | 
|  | 102 | tracking. The name of the [svn-remote "..."] section in the | 
|  | 103 | .git/config file may be specified as an optional command-line | 
|  | 104 | argument. | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 105 |  | 
| Junio C Hamano | 8f4ac0d | 2009-01-19 08:35:36 | [diff] [blame] | 106 | --localtime;; | 
|  | 107 | Store Git commit times in the local timezone instead of UTC. This | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 108 | makes 'git log' (even without --date=local) show the same times | 
| Junio C Hamano | 8f4ac0d | 2009-01-19 08:35:36 | [diff] [blame] | 109 | that `svn log` would in the local timezone. | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 110 | + | 
| Junio C Hamano | 8f4ac0d | 2009-01-19 08:35:36 | [diff] [blame] | 111 | This doesn't interfere with interoperating with the Subversion | 
|  | 112 | repository you cloned from, but if you wish for your local Git | 
|  | 113 | repository to be able to interoperate with someone else's local Git | 
|  | 114 | repository, either don't use this option or you should both use it in | 
|  | 115 | the same local timezone. | 
|  | 116 |  | 
| Junio C Hamano | 0df868a | 2009-08-19 07:28:28 | [diff] [blame] | 117 | --parent;; | 
|  | 118 | Fetch only from the SVN parent of the current HEAD. | 
|  | 119 |  | 
| Junio C Hamano | a07e816 | 2009-01-26 17:36:43 | [diff] [blame] | 120 | --ignore-paths=<regex>;; | 
| Junio C Hamano | 5534441 | 2009-04-12 18:31:19 | [diff] [blame] | 121 | This allows one to specify a Perl regular expression that will | 
| Junio C Hamano | a07e816 | 2009-01-26 17:36:43 | [diff] [blame] | 122 | cause skipping of all matching paths from checkout from SVN. | 
| Junio C Hamano | 5534441 | 2009-04-12 18:31:19 | [diff] [blame] | 123 | The '--ignore-paths' option should match for every 'fetch' | 
|  | 124 | (including automatic fetches due to 'clone', 'dcommit', | 
|  | 125 | 'rebase', etc) on a given repository. | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 126 | + | 
|  | 127 | [verse] | 
| Junio C Hamano | 5534441 | 2009-04-12 18:31:19 | [diff] [blame] | 128 | config key: svn-remote.<name>.ignore-paths | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 129 | + | 
|  | 130 | If the ignore-paths config key is set and the command line option is | 
|  | 131 | also given, both regular expressions will be used. | 
|  | 132 | + | 
| Junio C Hamano | 5534441 | 2009-04-12 18:31:19 | [diff] [blame] | 133 | Examples: | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 134 | + | 
|  | 135 | -- | 
|  | 136 | Skip "doc*" directory for every fetch;; | 
|  | 137 | + | 
|  | 138 | ------------------------------------------------------------------------ | 
|  | 139 | --ignore-paths="^doc" | 
|  | 140 | ------------------------------------------------------------------------ | 
| Junio C Hamano | 5534441 | 2009-04-12 18:31:19 | [diff] [blame] | 141 |  | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 142 | Skip "branches" and "tags" of first level directories;; | 
|  | 143 | + | 
|  | 144 | ------------------------------------------------------------------------ | 
|  | 145 | --ignore-paths="^[^/]+/(?:branches|tags)" | 
|  | 146 | ------------------------------------------------------------------------ | 
|  | 147 | -- | 
| Junio C Hamano | 5534441 | 2009-04-12 18:31:19 | [diff] [blame] | 148 |  | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 149 | 'clone':: | 
|  | 150 | Runs 'init' and 'fetch'. It will automatically create a | 
|  | 151 | directory based on the basename of the URL passed to it; | 
|  | 152 | or if a second argument is passed; it will create a directory | 
|  | 153 | and work within that. It accepts all arguments that the | 
|  | 154 | 'init' and 'fetch' commands accept; with the exception of | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 155 | '--fetch-all' and '--parent'. After a repository is cloned, | 
|  | 156 | the 'fetch' command will be able to update revisions without | 
|  | 157 | affecting the working tree; and the 'rebase' command will be | 
|  | 158 | able to update the working tree with the latest changes. | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 159 |  | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 160 | 'rebase':: | 
|  | 161 | This fetches revisions from the SVN parent of the current HEAD | 
|  | 162 | and rebases the current (uncommitted to SVN) work against it. | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 163 | + | 
|  | 164 | This works similarly to `svn update` or 'git pull' except that | 
|  | 165 | it preserves linear history with 'git rebase' instead of | 
|  | 166 | 'git merge' for ease of dcommitting with 'git svn'. | 
|  | 167 | + | 
|  | 168 | This accepts all options that 'git svn fetch' and 'git rebase' | 
| Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 169 | accept. However, '--fetch-all' only fetches from the current | 
| Junio C Hamano | a3fd83c | 2007-03-02 10:34:36 | [diff] [blame] | 170 | [svn-remote], and not all [svn-remote] definitions. | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 171 | + | 
|  | 172 | Like 'git rebase'; this requires that the working tree be clean | 
| Junio C Hamano | a3fd83c | 2007-03-02 10:34:36 | [diff] [blame] | 173 | and have no uncommitted changes. | 
| Junio C Hamano | 67fad6d | 2007-05-06 08:53:12 | [diff] [blame] | 174 |  | 
| Junio C Hamano | 103ad7f | 2007-03-14 11:19:26 | [diff] [blame] | 175 | -l;; | 
|  | 176 | --local;; | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 177 | Do not fetch remotely; only run 'git rebase' against the | 
| Junio C Hamano | 103ad7f | 2007-03-14 11:19:26 | [diff] [blame] | 178 | last fetched commit from the upstream SVN. | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 179 |  | 
|  | 180 | 'dcommit':: | 
| Junio C Hamano | 79770b6 | 2007-01-07 07:43:58 | [diff] [blame] | 181 | Commit each diff from a specified head directly to the SVN | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 182 | repository, and then rebase or reset (depending on whether or | 
| Junio C Hamano | 79770b6 | 2007-01-07 07:43:58 | [diff] [blame] | 183 | not there is a diff between SVN and head). This will create | 
|  | 184 | a revision in SVN for each commit in git. | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 185 | It is recommended that you run 'git svn' fetch and rebase (not | 
| Junio C Hamano | 79770b6 | 2007-01-07 07:43:58 | [diff] [blame] | 186 | pull or merge) your commits against the latest changes in the | 
|  | 187 | SVN repository. | 
| Junio C Hamano | 688eae0 | 2009-06-28 05:19:50 | [diff] [blame] | 188 | An optional revision or branch argument may be specified, and | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 189 | causes 'git svn' to do all work on that revision/branch | 
| Junio C Hamano | 688eae0 | 2009-06-28 05:19:50 | [diff] [blame] | 190 | instead of HEAD. | 
| Junio C Hamano | 4bf6dca | 2006-12-21 02:25:57 | [diff] [blame] | 191 | This is advantageous over 'set-tree' (below) because it produces | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 192 | cleaner, more linear history. | 
| Junio C Hamano | 67fad6d | 2007-05-06 08:53:12 | [diff] [blame] | 193 | + | 
|  | 194 | --no-rebase;; | 
|  | 195 | After committing, do not rebase or reset. | 
| Junio C Hamano | faa1e50 | 2008-08-10 03:55:58 | [diff] [blame] | 196 | --commit-url <URL>;; | 
|  | 197 | Commit to this SVN URL (the full path). This is intended to | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 198 | allow existing 'git svn' repositories created with one transport | 
| Junio C Hamano | faa1e50 | 2008-08-10 03:55:58 | [diff] [blame] | 199 | method (e.g. `svn://` or `http://` for anonymous read) to be | 
|  | 200 | reused if a user is later given access to an alternate transport | 
|  | 201 | method (e.g. `svn+ssh://` or `https://`) for commit. | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 202 | + | 
|  | 203 | [verse] | 
| Junio C Hamano | a50c35c | 2009-02-24 07:37:05 | [diff] [blame] | 204 | config key: svn-remote.<name>.commiturl | 
| Junio C Hamano | a50c35c | 2009-02-24 07:37:05 | [diff] [blame] | 205 | config key: svn.commiturl (overwrites all svn-remote.<name>.commiturl options) | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 206 | + | 
|  | 207 | Using this option for any other purpose (don't ask) is very strongly | 
|  | 208 | discouraged. | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 209 |  | 
| Junio C Hamano | 0a90152 | 2011-04-19 22:42:05 | [diff] [blame] | 210 | --mergeinfo=<mergeinfo>;; | 
|  | 211 | Add the given merge information during the dcommit | 
|  | 212 | (e.g. `--mergeinfo="/branches/foo:1-10"`). All svn server versions can | 
|  | 213 | store this information (as a property), and svn clients starting from | 
|  | 214 | version 1.5 can make use of it. 'git svn' currently does not use it | 
|  | 215 | and does not set it automatically. | 
|  | 216 |  | 
| Junio C Hamano | a476efa | 2008-10-10 15:31:42 | [diff] [blame] | 217 | 'branch':: | 
|  | 218 | Create a branch in the SVN repository. | 
|  | 219 |  | 
|  | 220 | -m;; | 
|  | 221 | --message;; | 
|  | 222 | Allows to specify the commit message. | 
|  | 223 |  | 
|  | 224 | -t;; | 
|  | 225 | --tag;; | 
|  | 226 | Create a tag by using the tags_subdir instead of the branches_subdir | 
|  | 227 | specified during git svn init. | 
|  | 228 |  | 
| Junio C Hamano | 688eae0 | 2009-06-28 05:19:50 | [diff] [blame] | 229 | -d;; | 
|  | 230 | --destination;; | 
|  | 231 | If more than one --branches (or --tags) option was given to the 'init' | 
|  | 232 | or 'clone' command, you must provide the location of the branch (or | 
|  | 233 | tag) you wish to create in the SVN repository. The value of this | 
|  | 234 | option must match one of the paths specified by a --branches (or | 
|  | 235 | --tags) option. You can see these paths with the commands | 
|  | 236 | + | 
|  | 237 | git config --get-all svn-remote.<name>.branches | 
|  | 238 | git config --get-all svn-remote.<name>.tags | 
|  | 239 | + | 
|  | 240 | where <name> is the name of the SVN repository as specified by the -R option to | 
|  | 241 | 'init' (or "svn" by default). | 
|  | 242 |  | 
| Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 243 | --username;; | 
|  | 244 | Specify the SVN username to perform the commit as. This option overrides | 
| Junio C Hamano | 072d22b | 2010-05-10 02:49:38 | [diff] [blame] | 245 | the 'username' configuration property. | 
| Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 246 |  | 
|  | 247 | --commit-url;; | 
|  | 248 | Use the specified URL to connect to the destination Subversion | 
|  | 249 | repository. This is useful in cases where the source SVN | 
|  | 250 | repository is read-only. This option overrides configuration | 
|  | 251 | property 'commiturl'. | 
|  | 252 | + | 
|  | 253 | git config --get-all svn-remote.<name>.commiturl | 
|  | 254 | + | 
|  | 255 |  | 
| Junio C Hamano | a476efa | 2008-10-10 15:31:42 | [diff] [blame] | 256 | 'tag':: | 
|  | 257 | Create a tag in the SVN repository. This is a shorthand for | 
|  | 258 | 'branch -t'. | 
|  | 259 |  | 
| Junio C Hamano | 43d0134 | 2006-10-12 04:07:32 | [diff] [blame] | 260 | 'log':: | 
|  | 261 | This should make it easy to look up svn log messages when svn | 
|  | 262 | users refer to -r/--revision numbers. | 
| Junio C Hamano | a3fd83c | 2007-03-02 10:34:36 | [diff] [blame] | 263 | + | 
|  | 264 | The following features from `svn log' are supported: | 
|  | 265 | + | 
|  | 266 | -- | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 267 | -r <n>[:<n>];; | 
|  | 268 | --revision=<n>[:<n>];; | 
| Junio C Hamano | a3fd83c | 2007-03-02 10:34:36 | [diff] [blame] | 269 | is supported, non-numeric args are not: | 
|  | 270 | HEAD, NEXT, BASE, PREV, etc ... | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 271 | -v;; | 
|  | 272 | --verbose;; | 
| Junio C Hamano | a3fd83c | 2007-03-02 10:34:36 | [diff] [blame] | 273 | it's not completely compatible with the --verbose | 
|  | 274 | output in svn log, but reasonably close. | 
|  | 275 | --limit=<n>;; | 
|  | 276 | is NOT the same as --max-count, doesn't count | 
|  | 277 | merged/excluded commits | 
|  | 278 | --incremental;; | 
|  | 279 | supported | 
|  | 280 | -- | 
|  | 281 | + | 
|  | 282 | New features: | 
|  | 283 | + | 
|  | 284 | -- | 
|  | 285 | --show-commit;; | 
|  | 286 | shows the git commit sha1, as well | 
|  | 287 | --oneline;; | 
|  | 288 | our version of --pretty=oneline | 
|  | 289 | -- | 
|  | 290 | + | 
| Junio C Hamano | 24bc09a | 2008-02-28 00:27:44 | [diff] [blame] | 291 | NOTE: SVN itself only stores times in UTC and nothing else. The regular svn | 
|  | 292 | client converts the UTC time to the local time (or based on the TZ= | 
|  | 293 | environment). This command has the same behaviour. | 
|  | 294 | + | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 295 | Any other arguments are passed directly to 'git log' | 
| Junio C Hamano | 43d0134 | 2006-10-12 04:07:32 | [diff] [blame] | 296 |  | 
| Junio C Hamano | 9c33415 | 2008-02-12 03:18:52 | [diff] [blame] | 297 | 'blame':: | 
| Junio C Hamano | 869bb80 | 2008-05-12 00:29:47 | [diff] [blame] | 298 | Show what revision and author last modified each line of a file. The | 
|  | 299 | output of this mode is format-compatible with the output of | 
|  | 300 | `svn blame' by default. Like the SVN blame command, | 
|  | 301 | local uncommitted changes in the working copy are ignored; | 
|  | 302 | the version of the file in the HEAD revision is annotated. Unknown | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 303 | arguments are passed directly to 'git blame'. | 
| Junio C Hamano | 9c33415 | 2008-02-12 03:18:52 | [diff] [blame] | 304 | + | 
| Junio C Hamano | 869bb80 | 2008-05-12 00:29:47 | [diff] [blame] | 305 | --git-format;; | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 306 | Produce output in the same format as 'git blame', but with | 
| Junio C Hamano | 869bb80 | 2008-05-12 00:29:47 | [diff] [blame] | 307 | SVN revision numbers instead of git commit hashes. In this mode, | 
|  | 308 | changes that haven't been committed to SVN (including local | 
|  | 309 | working-copy edits) are shown as revision 0. | 
| Junio C Hamano | 9c33415 | 2008-02-12 03:18:52 | [diff] [blame] | 310 |  | 
| Junio C Hamano | 469d60e | 2007-04-29 18:30:34 | [diff] [blame] | 311 | 'find-rev':: | 
|  | 312 | When given an SVN revision number of the form 'rN', returns the | 
| Junio C Hamano | b63afff | 2007-05-01 03:05:55 | [diff] [blame] | 313 | corresponding git commit hash (this can optionally be followed by a | 
|  | 314 | tree-ish to specify which branch should be searched). When given a | 
|  | 315 | tree-ish, returns the corresponding SVN revision number. | 
| Junio C Hamano | 469d60e | 2007-04-29 18:30:34 | [diff] [blame] | 316 |  | 
| Junio C Hamano | 4bf6dca | 2006-12-21 02:25:57 | [diff] [blame] | 317 | 'set-tree':: | 
| Junio C Hamano | 43d0134 | 2006-10-12 04:07:32 | [diff] [blame] | 318 | You should consider using 'dcommit' instead of this command. | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 319 | Commit specified commit or tree objects to SVN. This relies on | 
|  | 320 | your imported fetch data being up-to-date. This makes | 
|  | 321 | absolutely no attempts to do patching when committing to SVN, it | 
|  | 322 | simply overwrites files with those specified in the tree or | 
|  | 323 | commit. All merging is assumed to have taken place | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 324 | independently of 'git svn' functions. | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 325 |  | 
| Junio C Hamano | 47d68a5 | 2008-05-06 06:35:40 | [diff] [blame] | 326 | 'create-ignore':: | 
| Junio C Hamano | 47d68a5 | 2008-05-06 06:35:40 | [diff] [blame] | 327 | Recursively finds the svn:ignore property on directories and | 
|  | 328 | creates matching .gitignore files. The resulting files are staged to | 
| Junio C Hamano | feeb1be | 2008-05-22 00:53:35 | [diff] [blame] | 329 | be committed, but are not committed. Use -r/--revision to refer to a | 
| Junio C Hamano | cb1c44f | 2008-08-06 06:19:33 | [diff] [blame] | 330 | specific revision. | 
| Junio C Hamano | 47d68a5 | 2008-05-06 06:35:40 | [diff] [blame] | 331 |  | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 332 | 'show-ignore':: | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 333 | Recursively finds and lists the svn:ignore property on | 
|  | 334 | directories. The output is suitable for appending to | 
|  | 335 | the $GIT_DIR/info/exclude file. | 
|  | 336 |  | 
| Junio C Hamano | a557446 | 2009-11-18 07:39:28 | [diff] [blame] | 337 | 'mkdirs':: | 
|  | 338 | Attempts to recreate empty directories that core git cannot track | 
|  | 339 | based on information in $GIT_DIR/svn/<refname>/unhandled.log files. | 
|  | 340 | Empty directories are automatically recreated when using | 
|  | 341 | "git svn clone" and "git svn rebase", so "mkdirs" is intended | 
|  | 342 | for use after commands like "git checkout" or "git reset". | 
| Junio C Hamano | 209ebe8 | 2011-04-27 21:09:59 | [diff] [blame] | 343 | (See the svn-remote.<name>.automkdirs config file option for | 
|  | 344 | more information.) | 
| Junio C Hamano | a557446 | 2009-11-18 07:39:28 | [diff] [blame] | 345 |  | 
| Junio C Hamano | 43d0134 | 2006-10-12 04:07:32 | [diff] [blame] | 346 | 'commit-diff':: | 
|  | 347 | Commits the diff of two tree-ish arguments from the | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 348 | command-line. This command does not rely on being inside an `git svn | 
| Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 349 | init`-ed repository. This command takes three arguments, (a) the | 
| Junio C Hamano | 43d0134 | 2006-10-12 04:07:32 | [diff] [blame] | 350 | original tree to diff against, (b) the new tree result, (c) the | 
|  | 351 | URL of the target Subversion repository. The final argument | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 352 | (URL) may be omitted if you are working from a 'git svn'-aware | 
|  | 353 | repository (that has been `init`-ed with 'git svn'). | 
| Junio C Hamano | 23db885 | 2006-11-09 23:35:53 | [diff] [blame] | 354 | The -r<revision> option is required for this. | 
| Junio C Hamano | 43d0134 | 2006-10-12 04:07:32 | [diff] [blame] | 355 |  | 
| Junio C Hamano | a097054 | 2007-11-23 08:43:30 | [diff] [blame] | 356 | 'info':: | 
|  | 357 | Shows information about a file or directory similar to what | 
|  | 358 | `svn info' provides. Does not currently support a -r/--revision | 
|  | 359 | argument. Use the --url option to output only the value of the | 
|  | 360 | 'URL:' field. | 
|  | 361 |  | 
| Junio C Hamano | feeb1be | 2008-05-22 00:53:35 | [diff] [blame] | 362 | 'proplist':: | 
|  | 363 | Lists the properties stored in the Subversion repository about a | 
|  | 364 | given file or directory. Use -r/--revision to refer to a specific | 
|  | 365 | Subversion revision. | 
|  | 366 |  | 
|  | 367 | 'propget':: | 
|  | 368 | Gets the Subversion property given as the first argument, for a | 
|  | 369 | file. A specific revision can be specified with -r/--revision. | 
|  | 370 |  | 
|  | 371 | 'show-externals':: | 
|  | 372 | Shows the Subversion externals. Use -r/--revision to specify a | 
|  | 373 | specific revision. | 
|  | 374 |  | 
| Junio C Hamano | aa2cd76 | 2009-07-26 08:14:01 | [diff] [blame] | 375 | 'gc':: | 
|  | 376 | Compress $GIT_DIR/svn/<refname>/unhandled.log files in .git/svn | 
|  | 377 | and remove $GIT_DIR/svn/<refname>index files in .git/svn. | 
|  | 378 |  | 
| Junio C Hamano | 688eae0 | 2009-06-28 05:19:50 | [diff] [blame] | 379 | 'reset':: | 
|  | 380 | Undoes the effects of 'fetch' back to the specified revision. | 
|  | 381 | This allows you to re-'fetch' an SVN revision. Normally the | 
|  | 382 | contents of an SVN revision should never change and 'reset' | 
|  | 383 | should not be necessary. However, if SVN permissions change, | 
|  | 384 | or if you alter your --ignore-paths option, a 'fetch' may fail | 
|  | 385 | with "not found in commit" (file not previously visible) or | 
|  | 386 | "checksum mismatch" (missed a modification). If the problem | 
|  | 387 | file cannot be ignored forever (with --ignore-paths) the only | 
|  | 388 | way to repair the repo is to use 'reset'. | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 389 | + | 
| Junio C Hamano | 688eae0 | 2009-06-28 05:19:50 | [diff] [blame] | 390 | Only the rev_map and refs/remotes/git-svn are changed. Follow 'reset' | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 391 | with a 'fetch' and then 'git reset' or 'git rebase' to move local | 
| Junio C Hamano | 688eae0 | 2009-06-28 05:19:50 | [diff] [blame] | 392 | branches onto the new tree. | 
|  | 393 |  | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 394 | -r <n>;; | 
|  | 395 | --revision=<n>;; | 
| Junio C Hamano | 688eae0 | 2009-06-28 05:19:50 | [diff] [blame] | 396 | Specify the most recent revision to keep. All later revisions | 
|  | 397 | are discarded. | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 398 | -p;; | 
|  | 399 | --parent;; | 
| Junio C Hamano | 688eae0 | 2009-06-28 05:19:50 | [diff] [blame] | 400 | Discard the specified revision as well, keeping the nearest | 
|  | 401 | parent instead. | 
|  | 402 | Example:;; | 
|  | 403 | Assume you have local changes in "master", but you need to refetch "r2". | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 404 | + | 
| Junio C Hamano | 688eae0 | 2009-06-28 05:19:50 | [diff] [blame] | 405 | ------------ | 
|  | 406 | r1---r2---r3 remotes/git-svn | 
|  | 407 | \ | 
|  | 408 | A---B master | 
|  | 409 | ------------ | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 410 | + | 
| Junio C Hamano | 688eae0 | 2009-06-28 05:19:50 | [diff] [blame] | 411 | Fix the ignore-paths or SVN permissions problem that caused "r2" to | 
|  | 412 | be incomplete in the first place. Then: | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 413 | + | 
| Junio C Hamano | 688eae0 | 2009-06-28 05:19:50 | [diff] [blame] | 414 | [verse] | 
|  | 415 | git svn reset -r2 -p | 
|  | 416 | git svn fetch | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 417 | + | 
| Junio C Hamano | 688eae0 | 2009-06-28 05:19:50 | [diff] [blame] | 418 | ------------ | 
|  | 419 | r1---r2'--r3' remotes/git-svn | 
|  | 420 | \ | 
|  | 421 | r2---r3---A---B master | 
|  | 422 | ------------ | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 423 | + | 
|  | 424 | Then fixup "master" with 'git rebase'. | 
|  | 425 | Do NOT use 'git merge' or your history will not be compatible with a | 
| Junio C Hamano | 688eae0 | 2009-06-28 05:19:50 | [diff] [blame] | 426 | future 'dcommit'! | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 427 | + | 
| Junio C Hamano | 688eae0 | 2009-06-28 05:19:50 | [diff] [blame] | 428 | [verse] | 
|  | 429 | git rebase --onto remotes/git-svn A^ master | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 430 | + | 
| Junio C Hamano | 688eae0 | 2009-06-28 05:19:50 | [diff] [blame] | 431 | ------------ | 
|  | 432 | r1---r2'--r3' remotes/git-svn | 
|  | 433 | \ | 
|  | 434 | A'--B' master | 
|  | 435 | ------------ | 
|  | 436 |  | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 437 | OPTIONS | 
|  | 438 | ------- | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 439 |  | 
| Junio C Hamano | d2179ef | 2010-10-22 04:12:17 | [diff] [blame] | 440 | --shared[=(false|true|umask|group|all|world|everybody)]:: | 
| Junio C Hamano | 43d0134 | 2006-10-12 04:07:32 | [diff] [blame] | 441 | --template=<template_directory>:: | 
|  | 442 | Only used with the 'init' command. | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 443 | These are passed directly to 'git init'. | 
| Junio C Hamano | 43d0134 | 2006-10-12 04:07:32 | [diff] [blame] | 444 |  | 
| Junio C Hamano | 63c2bc9 | 2011-02-28 06:41:28 | [diff] [blame] | 445 | -r <arg>:: | 
|  | 446 | --revision <arg>:: | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 447 | Used with the 'fetch' command. | 
|  | 448 | + | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 449 | This allows revision ranges for partial/cauterized history | 
|  | 450 | to be supported. $NUMBER, $NUMBER1:$NUMBER2 (numeric ranges), | 
|  | 451 | $NUMBER:HEAD, and BASE:$NUMBER are all supported. | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 452 | + | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 453 | This can allow you to make partial mirrors when running fetch; | 
|  | 454 | but is generally not recommended because history will be skipped | 
|  | 455 | and lost. | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 456 |  | 
|  | 457 | -:: | 
|  | 458 | --stdin:: | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 459 | Only used with the 'set-tree' command. | 
|  | 460 | + | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 461 | Read a list of commits from stdin and commit them in reverse | 
|  | 462 | order. Only the leading sha1 is read from each line, so | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 463 | 'git rev-list --pretty=oneline' output can be used. | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 464 |  | 
|  | 465 | --rmdir:: | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 466 | Only used with the 'dcommit', 'set-tree' and 'commit-diff' commands. | 
|  | 467 | + | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 468 | Remove directories from the SVN tree if there are no files left | 
|  | 469 | behind. SVN can version empty directories, and they are not | 
|  | 470 | removed by default if there are no files left in them. git | 
|  | 471 | cannot version empty directories. Enabling this flag will make | 
|  | 472 | the commit to SVN act like git. | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 473 | + | 
|  | 474 | [verse] | 
| Junio C Hamano | 7ad22dc | 2007-01-29 02:55:48 | [diff] [blame] | 475 | config key: svn.rmdir | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 476 |  | 
|  | 477 | -e:: | 
|  | 478 | --edit:: | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 479 | Only used with the 'dcommit', 'set-tree' and 'commit-diff' commands. | 
|  | 480 | + | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 481 | Edit the commit message before committing to SVN. This is off by | 
|  | 482 | default for objects that are commits, and forced on when committing | 
|  | 483 | tree objects. | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 484 | + | 
|  | 485 | [verse] | 
| Junio C Hamano | 7ad22dc | 2007-01-29 02:55:48 | [diff] [blame] | 486 | config key: svn.edit | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 487 |  | 
|  | 488 | -l<num>:: | 
|  | 489 | --find-copies-harder:: | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 490 | Only used with the 'dcommit', 'set-tree' and 'commit-diff' commands. | 
|  | 491 | + | 
|  | 492 | They are both passed directly to 'git diff-tree'; see | 
| Junio C Hamano | 35738e8 | 2008-01-07 07:55:46 | [diff] [blame] | 493 | linkgit:git-diff-tree[1] for more information. | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 494 | + | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 495 | [verse] | 
| Junio C Hamano | 7ad22dc | 2007-01-29 02:55:48 | [diff] [blame] | 496 | config key: svn.l | 
|  | 497 | config key: svn.findcopiesharder | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 498 |  | 
|  | 499 | -A<filename>:: | 
|  | 500 | --authors-file=<filename>:: | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 501 | Syntax is compatible with the file used by 'git cvsimport': | 
|  | 502 | + | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 503 | ------------------------------------------------------------------------ | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 504 | loginname = Joe User <user@example.com> | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 505 | ------------------------------------------------------------------------ | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 506 | + | 
|  | 507 | If this option is specified and 'git svn' encounters an SVN | 
|  | 508 | committer name that does not exist in the authors-file, 'git svn' | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 509 | will abort operation. The user will then have to add the | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 510 | appropriate entry. Re-running the previous 'git svn' command | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 511 | after the authors-file is modified should continue operation. | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 512 | + | 
|  | 513 | [verse] | 
| Junio C Hamano | 7ad22dc | 2007-01-29 02:55:48 | [diff] [blame] | 514 | config key: svn.authorsfile | 
| Junio C Hamano | 43d0134 | 2006-10-12 04:07:32 | [diff] [blame] | 515 |  | 
| Junio C Hamano | 52d5def | 2009-05-21 16:27:43 | [diff] [blame] | 516 | --authors-prog=<filename>:: | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 517 | If this option is specified, for each SVN committer name that | 
|  | 518 | does not exist in the authors file, the given file is executed | 
|  | 519 | with the committer name as the first argument. The program is | 
|  | 520 | expected to return a single line of the form "Name <email>", | 
|  | 521 | which will be treated as if included in the authors file. | 
| Junio C Hamano | 52d5def | 2009-05-21 16:27:43 | [diff] [blame] | 522 |  | 
| Junio C Hamano | 43d0134 | 2006-10-12 04:07:32 | [diff] [blame] | 523 | -q:: | 
|  | 524 | --quiet:: | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 525 | Make 'git svn' less verbose. Specify a second time to make it | 
| Junio C Hamano | 9572e92 | 2009-04-02 06:52:03 | [diff] [blame] | 526 | even less verbose. | 
| Junio C Hamano | 43d0134 | 2006-10-12 04:07:32 | [diff] [blame] | 527 |  | 
|  | 528 | --repack[=<n>]:: | 
| Junio C Hamano | a3fd83c | 2007-03-02 10:34:36 | [diff] [blame] | 529 | --repack-flags=<flags>:: | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 530 | These should help keep disk usage sane for large fetches with | 
|  | 531 | many revisions. | 
|  | 532 | + | 
| Junio C Hamano | a3fd83c | 2007-03-02 10:34:36 | [diff] [blame] | 533 | --repack takes an optional argument for the number of revisions | 
|  | 534 | to fetch before repacking. This defaults to repacking every | 
|  | 535 | 1000 commits fetched if no argument is specified. | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 536 | + | 
|  | 537 | --repack-flags are passed directly to 'git repack'. | 
|  | 538 | + | 
| Junio C Hamano | a3fd83c | 2007-03-02 10:34:36 | [diff] [blame] | 539 | [verse] | 
| Junio C Hamano | 7ad22dc | 2007-01-29 02:55:48 | [diff] [blame] | 540 | config key: svn.repack | 
|  | 541 | config key: svn.repackflags | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 542 |  | 
|  | 543 | -m:: | 
|  | 544 | --merge:: | 
|  | 545 | -s<strategy>:: | 
|  | 546 | --strategy=<strategy>:: | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 547 | These are only used with the 'dcommit' and 'rebase' commands. | 
|  | 548 | + | 
|  | 549 | Passed directly to 'git rebase' when using 'dcommit' if a | 
|  | 550 | 'git reset' cannot be used (see 'dcommit'). | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 551 |  | 
|  | 552 | -n:: | 
|  | 553 | --dry-run:: | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 554 | This can be used with the 'dcommit', 'rebase', 'branch' and | 
|  | 555 | 'tag' commands. | 
|  | 556 | + | 
| Junio C Hamano | 9e1793f | 2008-06-02 07:31:16 | [diff] [blame] | 557 | For 'dcommit', print out the series of git arguments that would show | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 558 | which diffs would be committed to SVN. | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 559 | + | 
| Junio C Hamano | 9e1793f | 2008-06-02 07:31:16 | [diff] [blame] | 560 | For 'rebase', display the local branch associated with the upstream svn | 
|  | 561 | repository associated with the current branch and the URL of svn | 
|  | 562 | repository that will be fetched from. | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 563 | + | 
| Junio C Hamano | a476efa | 2008-10-10 15:31:42 | [diff] [blame] | 564 | For 'branch' and 'tag', display the urls that will be used for copying when | 
|  | 565 | creating the branch or tag. | 
|  | 566 |  | 
| Junio C Hamano | 4f01892 | 2011-05-01 23:54:06 | [diff] [blame] | 567 | --use-log-author:: | 
|  | 568 | When retrieving svn commits into git (as part of 'fetch', 'rebase', or | 
|  | 569 | 'dcommit' operations), look for the first `From:` or `Signed-off-by:` line | 
|  | 570 | in the log message and use that as the author string. | 
|  | 571 | --add-author-from:: | 
|  | 572 | When committing to svn from git (as part of 'commit-diff', 'set-tree' or 'dcommit' | 
|  | 573 | operations), if the existing log message doesn't already have a | 
|  | 574 | `From:` or `Signed-off-by:` line, append a `From:` line based on the | 
|  | 575 | git commit's author string. If you use this, then `--use-log-author` | 
|  | 576 | will retrieve a valid author string for all commits. | 
|  | 577 |  | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 578 |  | 
|  | 579 | ADVANCED OPTIONS | 
|  | 580 | ---------------- | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 581 |  | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 582 | -i<GIT_SVN_ID>:: | 
|  | 583 | --id <GIT_SVN_ID>:: | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 584 | This sets GIT_SVN_ID (instead of using the environment). This | 
|  | 585 | allows the user to override the default refname to fetch from | 
|  | 586 | when tracking a single URL. The 'log' and 'dcommit' commands | 
|  | 587 | no longer require this switch as an argument. | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 588 |  | 
|  | 589 | -R<remote name>:: | 
|  | 590 | --svn-remote <remote name>:: | 
|  | 591 | Specify the [svn-remote "<remote name>"] section to use, | 
|  | 592 | this allows SVN multiple repositories to be tracked. | 
|  | 593 | Default: "svn" | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 594 |  | 
| Junio C Hamano | 43d0134 | 2006-10-12 04:07:32 | [diff] [blame] | 595 | --follow-parent:: | 
|  | 596 | This is especially helpful when we're tracking a directory | 
|  | 597 | that has been moved around within the repository, or if we | 
|  | 598 | started tracking a branch and never tracked the trunk it was | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 599 | descended from. This feature is enabled by default, use | 
|  | 600 | --no-follow-parent to disable it. | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 601 | + | 
|  | 602 | [verse] | 
| Junio C Hamano | 7ad22dc | 2007-01-29 02:55:48 | [diff] [blame] | 603 | config key: svn.followparent | 
| Junio C Hamano | 43d0134 | 2006-10-12 04:07:32 | [diff] [blame] | 604 |  | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 605 | CONFIG FILE-ONLY OPTIONS | 
|  | 606 | ------------------------ | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 607 |  | 
|  | 608 | svn.noMetadata:: | 
|  | 609 | svn-remote.<name>.noMetadata:: | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 610 | This gets rid of the 'git-svn-id:' lines at the end of every commit. | 
|  | 611 | + | 
| Junio C Hamano | 657fd8a | 2010-10-07 00:01:24 | [diff] [blame] | 612 | This option can only be used for one-shot imports as 'git svn' | 
|  | 613 | will not be able to fetch again without metadata. Additionally, | 
|  | 614 | if you lose your .git/svn/**/.rev_map.* files, 'git svn' will not | 
|  | 615 | be able to rebuild them. | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 616 | + | 
|  | 617 | The 'git svn log' command will not work on repositories using | 
| Junio C Hamano | a3fd83c | 2007-03-02 10:34:36 | [diff] [blame] | 618 | this, either. Using this conflicts with the 'useSvmProps' | 
|  | 619 | option for (hopefully) obvious reasons. | 
| Junio C Hamano | 657fd8a | 2010-10-07 00:01:24 | [diff] [blame] | 620 | + | 
|  | 621 | This option is NOT recommended as it makes it difficult to track down | 
|  | 622 | old references to SVN revision numbers in existing documentation, bug | 
|  | 623 | reports and archives. If you plan to eventually migrate from SVN to git | 
|  | 624 | and are certain about dropping SVN history, consider | 
|  | 625 | linkgit:git-filter-branch[1] instead. filter-branch also allows | 
| Junio C Hamano | 7165bf7 | 2011-01-04 22:06:18 | [diff] [blame] | 626 | reformatting of metadata for ease-of-reading and rewriting authorship | 
| Junio C Hamano | 657fd8a | 2010-10-07 00:01:24 | [diff] [blame] | 627 | info for non-"svn.authorsFile" users. | 
| Junio C Hamano | 43d0134 | 2006-10-12 04:07:32 | [diff] [blame] | 628 |  | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 629 | svn.useSvmProps:: | 
|  | 630 | svn-remote.<name>.useSvmProps:: | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 631 | This allows 'git svn' to re-map repository URLs and UUIDs from | 
|  | 632 | mirrors created using SVN::Mirror (or svk) for metadata. | 
|  | 633 | + | 
| Junio C Hamano | a3fd83c | 2007-03-02 10:34:36 | [diff] [blame] | 634 | If an SVN revision has a property, "svm:headrev", it is likely | 
|  | 635 | that the revision was created by SVN::Mirror (also used by SVK). | 
|  | 636 | The property contains a repository UUID and a revision. We want | 
|  | 637 | to make it look like we are mirroring the original URL, so | 
|  | 638 | introduce a helper function that returns the original identity | 
|  | 639 | URL and UUID, and use it when generating metadata in commit | 
|  | 640 | messages. | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 641 |  | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 642 | svn.useSvnsyncProps:: | 
|  | 643 | svn-remote.<name>.useSvnsyncprops:: | 
|  | 644 | Similar to the useSvmProps option; this is for users | 
|  | 645 | of the svnsync(1) command distributed with SVN 1.4.x and | 
|  | 646 | later. | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 647 |  | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 648 | svn-remote.<name>.rewriteRoot:: | 
|  | 649 | This allows users to create repositories from alternate | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 650 | URLs. For example, an administrator could run 'git svn' on the | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 651 | server locally (accessing via file://) but wish to distribute | 
|  | 652 | the repository with a public http:// or svn:// URL in the | 
|  | 653 | metadata so users of it will see the public URL. | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 654 |  | 
| Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 655 | svn-remote.<name>.rewriteUUID:: | 
|  | 656 | Similar to the useSvmProps option; this is for users who need | 
|  | 657 | to remap the UUID manually. This may be useful in situations | 
|  | 658 | where the original UUID is not available via either useSvmProps | 
|  | 659 | or useSvnsyncProps. | 
|  | 660 |  | 
| Junio C Hamano | f7e049c | 2011-04-11 23:48:36 | [diff] [blame] | 661 | svn-remote.<name>.pushurl:: | 
|  | 662 |  | 
|  | 663 | Similar to git's 'remote.<name>.pushurl', this key is designed | 
|  | 664 | to be used in cases where 'url' points to an SVN repository | 
|  | 665 | via a read-only transport, to provide an alternate read/write | 
|  | 666 | transport. It is assumed that both keys point to the same | 
|  | 667 | repository. Unlike 'commiturl', 'pushurl' is a base path. If | 
|  | 668 | either 'commiturl' or 'pushurl' could be used, 'commiturl' | 
|  | 669 | takes precedence. | 
|  | 670 |  | 
| Junio C Hamano | b325006 | 2009-02-11 20:16:50 | [diff] [blame] | 671 | svn.brokenSymlinkWorkaround:: | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 672 | This disables potentially expensive checks to workaround | 
|  | 673 | broken symlinks checked into SVN by broken clients. Set this | 
|  | 674 | option to "false" if you track a SVN repository with many | 
|  | 675 | empty blobs that are not symlinks. This option may be changed | 
|  | 676 | while 'git svn' is running and take effect on the next | 
|  | 677 | revision fetched. If unset, 'git svn' assumes this option to | 
|  | 678 | be "true". | 
| Junio C Hamano | 0538b89 | 2008-06-20 04:18:33 | [diff] [blame] | 679 |  | 
| Junio C Hamano | a978876 | 2010-08-03 15:15:54 | [diff] [blame] | 680 | svn.pathnameencoding:: | 
|  | 681 | This instructs git svn to recode pathnames to a given encoding. | 
|  | 682 | It can be used by windows users and by those who work in non-utf8 | 
|  | 683 | locales to avoid corrupted file names with non-ASCII characters. | 
|  | 684 | Valid encodings are the ones supported by Perl's Encode module. | 
|  | 685 |  | 
| Junio C Hamano | 209ebe8 | 2011-04-27 21:09:59 | [diff] [blame] | 686 | svn-remote.<name>.automkdirs:: | 
|  | 687 | Normally, the "git svn clone" and "git svn rebase" commands | 
|  | 688 | attempt to recreate empty directories that are in the | 
|  | 689 | Subversion repository. If this option is set to "false", then | 
|  | 690 | empty directories will only be created if the "git svn mkdirs" | 
|  | 691 | command is run explicitly. If unset, 'git svn' assumes this | 
|  | 692 | option to be "true". | 
|  | 693 |  | 
| Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 694 | Since the noMetadata, rewriteRoot, rewriteUUID, useSvnsyncProps and useSvmProps | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 695 | options all affect the metadata generated and used by 'git svn'; they | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 696 | *must* be set in the configuration file before any history is imported | 
|  | 697 | and these settings should never be changed once they are set. | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 698 |  | 
| Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 699 | Additionally, only one of these options can be used per svn-remote | 
|  | 700 | section because they affect the 'git-svn-id:' metadata line, except | 
|  | 701 | for rewriteRoot and rewriteUUID which can be used together. | 
| Junio C Hamano | 47c1e3c | 2006-09-25 04:45:55 | [diff] [blame] | 702 |  | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 703 |  | 
| Junio C Hamano | a3fd83c | 2007-03-02 10:34:36 | [diff] [blame] | 704 | BASIC EXAMPLES | 
|  | 705 | -------------- | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 706 |  | 
| Junio C Hamano | 764a667 | 2007-10-23 01:23:31 | [diff] [blame] | 707 | Tracking and contributing to the trunk of a Subversion-managed project: | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 708 |  | 
|  | 709 | ------------------------------------------------------------------------ | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 710 | # Clone a repo (like git clone): | 
| Junio C Hamano | a476efa | 2008-10-10 15:31:42 | [diff] [blame] | 711 | git svn clone http://svn.example.com/project/trunk | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 712 | # Enter the newly cloned directory: | 
|  | 713 | cd trunk | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 714 | # You should be on master branch, double-check with 'git branch' | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 715 | git branch | 
|  | 716 | # Do some work and commit locally to git: | 
|  | 717 | git commit ... | 
|  | 718 | # Something is committed to SVN, rebase your local changes against the | 
|  | 719 | # latest changes in SVN: | 
| Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 720 | git svn rebase | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 721 | # Now commit your changes (that were committed previously using git) to SVN, | 
|  | 722 | # as well as automatically updating your working HEAD: | 
| Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 723 | git svn dcommit | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 724 | # Append svn:ignore settings to the default git exclude file: | 
| Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 725 | git svn show-ignore >> .git/info/exclude | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 726 | ------------------------------------------------------------------------ | 
|  | 727 |  | 
| Junio C Hamano | a8d072a | 2007-01-05 07:46:25 | [diff] [blame] | 728 | Tracking and contributing to an entire Subversion-managed project | 
|  | 729 | (complete with a trunk, tags and branches): | 
| Junio C Hamano | a8d072a | 2007-01-05 07:46:25 | [diff] [blame] | 730 |  | 
|  | 731 | ------------------------------------------------------------------------ | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 732 | # Clone a repo (like git clone): | 
| Junio C Hamano | a476efa | 2008-10-10 15:31:42 | [diff] [blame] | 733 | git svn clone http://svn.example.com/project -T trunk -b branches -t tags | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 734 | # View all branches and tags you have cloned: | 
|  | 735 | git branch -r | 
| Junio C Hamano | a476efa | 2008-10-10 15:31:42 | [diff] [blame] | 736 | # Create a new branch in SVN | 
|  | 737 | git svn branch waldo | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 738 | # Reset your master to trunk (or any other branch, replacing 'trunk' | 
|  | 739 | # with the appropriate name): | 
|  | 740 | git reset --hard remotes/trunk | 
|  | 741 | # You may only dcommit to one branch/tag/trunk at a time. The usage | 
| Junio C Hamano | a3fd83c | 2007-03-02 10:34:36 | [diff] [blame] | 742 | # of dcommit/rebase/show-ignore should be the same as above. | 
| Junio C Hamano | a8d072a | 2007-01-05 07:46:25 | [diff] [blame] | 743 | ------------------------------------------------------------------------ | 
|  | 744 |  | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 745 | The initial 'git svn clone' can be quite time-consuming | 
| Junio C Hamano | e9bfa9b | 2007-08-07 06:06:11 | [diff] [blame] | 746 | (especially for large Subversion repositories). If multiple | 
|  | 747 | people (or one person with multiple machines) want to use | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 748 | 'git svn' to interact with the same Subversion repository, you can | 
|  | 749 | do the initial 'git svn clone' to a repository on a server and | 
|  | 750 | have each person clone that repository with 'git clone': | 
| Junio C Hamano | e9bfa9b | 2007-08-07 06:06:11 | [diff] [blame] | 751 |  | 
|  | 752 | ------------------------------------------------------------------------ | 
|  | 753 | # Do the initial import on a server | 
| Junio C Hamano | a476efa | 2008-10-10 15:31:42 | [diff] [blame] | 754 | ssh server "cd /pub && git svn clone http://svn.example.com/project | 
| Junio C Hamano | f7bb669 | 2008-01-27 08:23:46 | [diff] [blame] | 755 | # Clone locally - make sure the refs/remotes/ space matches the server | 
|  | 756 | mkdir project | 
|  | 757 | cd project | 
| Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 758 | git init | 
| Junio C Hamano | f7bb669 | 2008-01-27 08:23:46 | [diff] [blame] | 759 | git remote add origin server:/pub/project | 
| Junio C Hamano | b218ad8 | 2011-01-08 00:21:03 | [diff] [blame] | 760 | git config --replace-all remote.origin.fetch '+refs/remotes/*:refs/remotes/*' | 
| Junio C Hamano | f7bb669 | 2008-01-27 08:23:46 | [diff] [blame] | 761 | git fetch | 
| Junio C Hamano | b218ad8 | 2011-01-08 00:21:03 | [diff] [blame] | 762 | # Prevent fetch/pull from remote git server in the future, | 
|  | 763 | # we only want to use git svn for future updates | 
|  | 764 | git config --remove-section remote.origin | 
| Junio C Hamano | d3452a0 | 2008-11-15 08:07:55 | [diff] [blame] | 765 | # Create a local branch from one of the branches just fetched | 
|  | 766 | git checkout -b master FETCH_HEAD | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 767 | # Initialize 'git svn' locally (be sure to use the same URL and -T/-b/-t options as were used on server) | 
| Junio C Hamano | a476efa | 2008-10-10 15:31:42 | [diff] [blame] | 768 | git svn init http://svn.example.com/project | 
| Junio C Hamano | e9bfa9b | 2007-08-07 06:06:11 | [diff] [blame] | 769 | # Pull the latest changes from Subversion | 
| Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 770 | git svn rebase | 
| Junio C Hamano | e9bfa9b | 2007-08-07 06:06:11 | [diff] [blame] | 771 | ------------------------------------------------------------------------ | 
|  | 772 |  | 
| Junio C Hamano | 79770b6 | 2007-01-07 07:43:58 | [diff] [blame] | 773 | REBASE VS. PULL/MERGE | 
|  | 774 | --------------------- | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 775 |  | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 776 | Originally, 'git svn' recommended that the 'remotes/git-svn' branch be | 
| Junio C Hamano | 79770b6 | 2007-01-07 07:43:58 | [diff] [blame] | 777 | pulled or merged from. This is because the author favored | 
| Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 778 | `git svn set-tree B` to commit a single head rather than the | 
|  | 779 | `git svn set-tree A..B` notation to commit multiple commits. | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 780 |  | 
| Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 781 | If you use `git svn set-tree A..B` to commit several diffs and you do | 
| Junio C Hamano | 79770b6 | 2007-01-07 07:43:58 | [diff] [blame] | 782 | not have the latest remotes/git-svn merged into my-branch, you should | 
| Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 783 | use `git svn rebase` to update your work branch instead of `git pull` or | 
| Junio C Hamano | 0e88f3e | 2009-06-21 08:03:25 | [diff] [blame] | 784 | `git merge`. `pull`/`merge` can cause non-linear history to be flattened | 
| Junio C Hamano | 79770b6 | 2007-01-07 07:43:58 | [diff] [blame] | 785 | when committing into SVN, which can lead to merge commits reversing | 
|  | 786 | previous commits in SVN. | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 787 |  | 
| Junio C Hamano | b77f819 | 2011-05-05 01:30:38 | [diff] [blame] | 788 | MERGE TRACKING | 
|  | 789 | -------------- | 
|  | 790 | While 'git svn' can track | 
| Junio C Hamano | d2d9ae1 | 2007-09-19 02:27:57 | [diff] [blame] | 791 | copy history (including branches and tags) for repositories adopting a | 
|  | 792 | standard layout, it cannot yet represent merge history that happened | 
|  | 793 | inside git back upstream to SVN users. Therefore it is advised that | 
|  | 794 | users keep history as linear as possible inside git to ease | 
|  | 795 | compatibility with SVN (see the CAVEATS section below). | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 796 |  | 
| Junio C Hamano | bdebabb | 2007-08-23 00:25:09 | [diff] [blame] | 797 | CAVEATS | 
|  | 798 | ------- | 
|  | 799 |  | 
| Junio C Hamano | b77f819 | 2011-05-05 01:30:38 | [diff] [blame] | 800 | For the sake of simplicity and interoperating with Subversion, | 
|  | 801 | it is recommended that all 'git svn' users clone, fetch and dcommit | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 802 | directly from the SVN server, and avoid all 'git clone'/'pull'/'merge'/'push' | 
| Junio C Hamano | bdebabb | 2007-08-23 00:25:09 | [diff] [blame] | 803 | operations between git repositories and branches. The recommended | 
|  | 804 | method of exchanging code between git branches and users is | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 805 | 'git format-patch' and 'git am', or just 'dcommit'ing to the SVN repository. | 
| Junio C Hamano | bdebabb | 2007-08-23 00:25:09 | [diff] [blame] | 806 |  | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 807 | Running 'git merge' or 'git pull' is NOT recommended on a branch you | 
| Junio C Hamano | b77f819 | 2011-05-05 01:30:38 | [diff] [blame] | 808 | plan to 'dcommit' from because Subversion users cannot see any | 
| Junio C Hamano | bdebabb | 2007-08-23 00:25:09 | [diff] [blame] | 809 | merges you've made. Furthermore, if you merge or pull from a git branch | 
| Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 810 | that is a mirror of an SVN branch, 'dcommit' may commit to the wrong | 
| Junio C Hamano | bdebabb | 2007-08-23 00:25:09 | [diff] [blame] | 811 | branch. | 
|  | 812 |  | 
| Junio C Hamano | a557446 | 2009-11-18 07:39:28 | [diff] [blame] | 813 | If you do merge, note the following rule: 'git svn dcommit' will | 
|  | 814 | attempt to commit on top of the SVN commit named in | 
|  | 815 | ------------------------------------------------------------------------ | 
|  | 816 | git log --grep=^git-svn-id: --first-parent -1 | 
|  | 817 | ------------------------------------------------------------------------ | 
|  | 818 | You 'must' therefore ensure that the most recent commit of the branch | 
|  | 819 | you want to dcommit to is the 'first' parent of the merge. Chaos will | 
|  | 820 | ensue otherwise, especially if the first parent is an older commit on | 
|  | 821 | the same SVN branch. | 
|  | 822 |  | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 823 | 'git clone' does not clone branches under the refs/remotes/ hierarchy or | 
|  | 824 | any 'git svn' metadata, or config. So repositories created and managed with | 
|  | 825 | using 'git svn' should use 'rsync' for cloning, if cloning is to be done | 
| Junio C Hamano | bdebabb | 2007-08-23 00:25:09 | [diff] [blame] | 826 | at all. | 
|  | 827 |  | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 828 | Since 'dcommit' uses rebase internally, any git branches you 'git push' to | 
| Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 829 | before 'dcommit' on will require forcing an overwrite of the existing ref | 
| Junio C Hamano | bdebabb | 2007-08-23 00:25:09 | [diff] [blame] | 830 | on the remote repository. This is generally considered bad practice, | 
| Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 831 | see the linkgit:git-push[1] documentation for details. | 
| Junio C Hamano | bdebabb | 2007-08-23 00:25:09 | [diff] [blame] | 832 |  | 
| Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 833 | Do not use the --amend option of linkgit:git-commit[1] on a change you've | 
| Junio C Hamano | bdebabb | 2007-08-23 00:25:09 | [diff] [blame] | 834 | already dcommitted. It is considered bad practice to --amend commits | 
|  | 835 | you've already pushed to a remote repository for other users, and | 
|  | 836 | dcommit with SVN is analogous to that. | 
|  | 837 |  | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 838 | When using multiple --branches or --tags, 'git svn' does not automatically | 
| Junio C Hamano | 688eae0 | 2009-06-28 05:19:50 | [diff] [blame] | 839 | handle name collisions (for example, if two branches from different paths have | 
|  | 840 | the same name, or if a branch and a tag have the same name). In these cases, | 
|  | 841 | use 'init' to set up your git repository then, before your first 'fetch', edit | 
|  | 842 | the .git/config file so that the branches and tags are associated with | 
|  | 843 | different name spaces. For example: | 
|  | 844 |  | 
|  | 845 | branches = stable/*:refs/remotes/svn/stable/* | 
|  | 846 | branches = debug/*:refs/remotes/svn/debug/* | 
|  | 847 |  | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 848 | BUGS | 
|  | 849 | ---- | 
| Junio C Hamano | 43d0134 | 2006-10-12 04:07:32 | [diff] [blame] | 850 |  | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 851 | We ignore all SVN properties except svn:executable. Any unhandled | 
|  | 852 | properties are logged to $GIT_DIR/svn/<refname>/unhandled.log | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 853 |  | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 854 | Renamed and copied directories are not detected by git and hence not | 
|  | 855 | tracked when committing to SVN. I do not plan on adding support for | 
|  | 856 | this as it's quite difficult and time-consuming to get working for all | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 857 | the possible corner cases (git doesn't do it, either). Committing | 
| Junio C Hamano | b77f819 | 2011-05-05 01:30:38 | [diff] [blame] | 858 | renamed and copied files is fully supported if they're similar enough | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 859 | for git to detect them. | 
|  | 860 |  | 
|  | 861 | CONFIGURATION | 
|  | 862 | ------------- | 
|  | 863 |  | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 864 | 'git svn' stores [svn-remote] configuration information in the | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 865 | repository .git/config file. It is similar the core git | 
|  | 866 | [remote] sections except 'fetch' keys do not accept glob | 
|  | 867 | arguments; but they are instead handled by the 'branches' | 
|  | 868 | and 'tags' keys. Since some SVN repositories are oddly | 
|  | 869 | configured with multiple projects glob expansions such those | 
|  | 870 | listed below are allowed: | 
|  | 871 |  | 
|  | 872 | ------------------------------------------------------------------------ | 
|  | 873 | [svn-remote "project-a"] | 
|  | 874 | url = http://server.org/svn | 
| Junio C Hamano | 9572e92 | 2009-04-02 06:52:03 | [diff] [blame] | 875 | fetch = trunk/project-a:refs/remotes/project-a/trunk | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 876 | branches = branches/*/project-a:refs/remotes/project-a/branches/* | 
|  | 877 | tags = tags/*/project-a:refs/remotes/project-a/tags/* | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 878 | ------------------------------------------------------------------------ | 
|  | 879 |  | 
| Junio C Hamano | 0773834 | 2009-04-23 03:06:56 | [diff] [blame] | 880 | Keep in mind that the '\*' (asterisk) wildcard of the local ref | 
| Junio C Hamano | 7d9e9bd | 2007-08-29 07:31:47 | [diff] [blame] | 881 | (right of the ':') *must* be the farthest right path component; | 
| Junio C Hamano | 0773834 | 2009-04-23 03:06:56 | [diff] [blame] | 882 | however the remote wildcard may be anywhere as long as it's an | 
| Junio C Hamano | a638742 | 2007-08-25 03:54:27 | [diff] [blame] | 883 | independent path component (surrounded by '/' or EOL). This | 
| Junio C Hamano | 00cb371 | 2007-02-23 11:13:52 | [diff] [blame] | 884 | type of configuration is not automatically created by 'init' and | 
| Junio C Hamano | 48bc1ce | 2009-07-09 16:49:19 | [diff] [blame] | 885 | should be manually entered with a text-editor or using 'git config'. | 
| Junio C Hamano | 9ae1a06 | 2006-07-10 08:12:34 | [diff] [blame] | 886 |  | 
| Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 887 | It is also possible to fetch a subset of branches or tags by using a | 
|  | 888 | comma-separated list of names within braces. For example: | 
|  | 889 |  | 
|  | 890 | ------------------------------------------------------------------------ | 
|  | 891 | [svn-remote "huge-project"] | 
|  | 892 | url = http://server.org/svn | 
|  | 893 | fetch = trunk/src:refs/remotes/trunk | 
|  | 894 | branches = branches/{red,green}/src:refs/remotes/branches/* | 
|  | 895 | tags = tags/{1.0,2.0}/src:refs/remotes/tags/* | 
|  | 896 | ------------------------------------------------------------------------ | 
|  | 897 |  | 
|  | 898 | Note that git-svn keeps track of the highest revision in which a branch | 
|  | 899 | or tag has appeared. If the subset of branches or tags is changed after | 
|  | 900 | fetching, then .git/svn/.metadata must be manually edited to remove (or | 
|  | 901 | reset) branches-maxRev and/or tags-maxRev as appropriate. | 
|  | 902 |  | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 903 | SEE ALSO | 
|  | 904 | -------- | 
| Junio C Hamano | 35738e8 | 2008-01-07 07:55:46 | [diff] [blame] | 905 | linkgit:git-rebase[1] | 
| Junio C Hamano | 6b2cee1 | 2006-08-26 08:43:31 | [diff] [blame] | 906 |  | 
| Junio C Hamano | 5f3d839 | 2011-03-15 23:33:35 | [diff] [blame] | 907 | GIT | 
|  | 908 | --- | 
|  | 909 | Part of the linkgit:git[1] suite |