From: Junio C Hamano Date: Mon, 10 Jul 2006 08:12:34 +0000 (+0000) Subject: Autogenerated HTML docs for v1.4.1-g8682 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=9ae1a06fff2c6453541219a122490cd5b60b3088;p=git.git Autogenerated HTML docs for v1.4.1-g8682 --- diff --git a/config.txt b/config.txt index f075f1981..0b434c1f1 100644 --- a/config.txt +++ b/config.txt @@ -110,10 +110,31 @@ apply.whitespace:: Tells `git-apply` how to handle whitespaces, in the same way as the '--whitespace' option. See gitlink:git-apply[1]. +diff.color:: + When true (or `always`), always use colors in patch. + When false (or `never`), never. When set to `auto`, use + colors only when the output is to the terminal. + +diff.color.:: + Use customized color for diff colorization. `` + specifies which part of the patch to use the specified + color, and is one of `plain` (context text), `meta` + (metainformation), `frag` (hunk header), `old` (removed + lines), or `new` (added lines). The value for these + configuration variables can be one of: `normal`, `bold`, + `dim`, `ul`, `blink`, `reverse`, `reset`, `black`, + `red`, `green`, `yellow`, `blue`, `magenta`, `cyan`, or + `white`. + diff.renameLimit:: The number of files to consider when performing the copy/rename detection; equivalent to the git diff option '-l'. +diff.renames:: + Tells git to detect renames. If set to any boolean value, it + will enable basic rename detection. If set to "copies" or + "copy", it will detect copies, as well. + format.headers:: Additional email headers to include in a patch to be submitted by mail. See gitlink:git-format-patch[1]. diff --git a/diff-options.txt b/diff-options.txt index 1a936295d..47ba9a403 100644 --- a/diff-options.txt +++ b/diff-options.txt @@ -4,18 +4,21 @@ -u:: Synonym for "-p". +--raw:: + Generate the raw format. + --patch-with-raw:: - Generate patch but keep also the default raw diff output. + Synonym for "-p --raw". --stat:: - Generate a diffstat instead of a patch. + Generate a diffstat. --summary:: Output a condensed summary of extended header information such as creations, renames and mode changes. --patch-with-stat:: - Generate patch and prepend its diffstat. + Synonym for "-p --stat". -z:: \0 line termination on output @@ -26,10 +29,25 @@ --name-status:: Show only names and status of changed files. +--color:: + Show colored diff. + +--no-color:: + Turn off colored diff, even when the configuration file + gives the default to color output. + +--no-renames:: + Turn off rename detection, even when the configuration + file gives the default to do so. + --full-index:: Instead of the first handful characters, show full object name of pre- and post-image blob on the "index" - line when generating a patch format output. + line when generating a patch format output. + +--binary:: + In addition to --full-index, output "binary diff" that + can be applied with "git apply". --abbrev[=]:: Instead of showing the full 40-byte hexadecimal object diff --git a/git-diff-files.html b/git-diff-files.html index aa0eb8fe4..0050682de 100644 --- a/git-diff-files.html +++ b/git-diff-files.html @@ -301,11 +301,19 @@ same as "git-diff-index" and "git-diff-tree".

+--raw +
+
+

+ Generate the raw format. +

+
+
--patch-with-raw

- Generate patch but keep also the default raw diff output. + Synonym for "-p --raw".

@@ -313,7 +321,7 @@ same as "git-diff-index" and "git-diff-tree".

- Generate a diffstat instead of a patch. + Generate a diffstat.

@@ -330,7 +338,7 @@ same as "git-diff-index" and "git-diff-tree".

- Generate patch and prepend its diffstat. + Synonym for "-p --stat".

@@ -358,6 +366,32 @@ same as "git-diff-index" and "git-diff-tree".

+--color +
+
+

+ Show colored diff. +

+
+
+--no-color +
+
+

+ Turn off colored diff, even when the configuration file + gives the default to color output. +

+
+
+--no-renames +
+
+

+ Turn off rename detection, even when the configuration + file gives the default to do so. +

+
+
--full-index
@@ -368,6 +402,15 @@ same as "git-diff-index" and "git-diff-tree".

+--binary +
+
+

+ In addition to --full-index, output "binary diff" that + can be applied with "git apply". +

+
+
--abbrev[=<n>]
@@ -863,7 +906,7 @@ two unresolved merge parents with the working tree file diff --git a/git-diff-index.html b/git-diff-index.html index 9d8e4d77a..47a3c551d 100644 --- a/git-diff-index.html +++ b/git-diff-index.html @@ -302,11 +302,19 @@ entries in the index are compared.

+--raw +
+
+

+ Generate the raw format. +

+
+
--patch-with-raw

- Generate patch but keep also the default raw diff output. + Synonym for "-p --raw".

@@ -314,7 +322,7 @@ entries in the index are compared.

- Generate a diffstat instead of a patch. + Generate a diffstat.

@@ -331,7 +339,7 @@ entries in the index are compared.

- Generate patch and prepend its diffstat. + Synonym for "-p --stat".

@@ -359,6 +367,32 @@ entries in the index are compared.

+--color +
+
+

+ Show colored diff. +

+
+
+--no-color +
+
+

+ Turn off colored diff, even when the configuration file + gives the default to color output. +

+
+
+--no-renames +
+
+

+ Turn off rename detection, even when the configuration + file gives the default to do so. +

+
+
--full-index
@@ -369,6 +403,15 @@ entries in the index are compared.

+--binary +
+
+

+ In addition to --full-index, output "binary diff" that + can be applied with "git apply". +

+
+
--abbrev[=<n>]
@@ -953,7 +996,7 @@ always have the special all-zero sha1. diff --git a/git-diff-stages.html b/git-diff-stages.html index d05021861..f1bc07abb 100644 --- a/git-diff-stages.html +++ b/git-diff-stages.html @@ -299,11 +299,19 @@ unmerged index file.

+--raw +
+
+

+ Generate the raw format. +

+
+
--patch-with-raw

- Generate patch but keep also the default raw diff output. + Synonym for "-p --raw".

@@ -311,7 +319,7 @@ unmerged index file.

- Generate a diffstat instead of a patch. + Generate a diffstat.

@@ -328,7 +336,7 @@ unmerged index file.

- Generate patch and prepend its diffstat. + Synonym for "-p --stat".

@@ -356,6 +364,32 @@ unmerged index file.

+--color +
+
+

+ Show colored diff. +

+
+
+--no-color +
+
+

+ Turn off colored diff, even when the configuration file + gives the default to color output. +

+
+
+--no-renames +
+
+

+ Turn off rename detection, even when the configuration + file gives the default to do so. +

+
+
--full-index
@@ -366,6 +400,15 @@ unmerged index file.

+--binary +
+
+

+ In addition to --full-index, output "binary diff" that + can be applied with "git apply". +

+
+
--abbrev[=<n>]
@@ -837,7 +880,7 @@ two unresolved merge parents with the working tree file diff --git a/git-diff-tree.html b/git-diff-tree.html index ebe55f0aa..cf0b9482c 100644 --- a/git-diff-tree.html +++ b/git-diff-tree.html @@ -304,11 +304,19 @@ git-diff-tree(1) Manual Page

+--raw +
+
+

+ Generate the raw format. +

+
+
--patch-with-raw

- Generate patch but keep also the default raw diff output. + Synonym for "-p --raw".

@@ -316,7 +324,7 @@ git-diff-tree(1) Manual Page

- Generate a diffstat instead of a patch. + Generate a diffstat.

@@ -333,7 +341,7 @@ git-diff-tree(1) Manual Page

- Generate patch and prepend its diffstat. + Synonym for "-p --stat".

@@ -361,6 +369,32 @@ git-diff-tree(1) Manual Page

+--color +
+
+

+ Show colored diff. +

+
+
+--no-color +
+
+

+ Turn off colored diff, even when the configuration file + gives the default to color output. +

+
+
+--no-renames +
+
+

+ Turn off rename detection, even when the configuration + file gives the default to do so. +

+
+
--full-index
@@ -371,6 +405,15 @@ git-diff-tree(1) Manual Page

+--binary +
+
+

+ In addition to --full-index, output "binary diff" that + can be applied with "git apply". +

+
+
--abbrev[=<n>]
@@ -1025,7 +1068,7 @@ two unresolved merge parents with the working tree file diff --git a/git-name-rev.html b/git-name-rev.html index 4976fb57a..4749e7ea2 100644 --- a/git-name-rev.html +++ b/git-name-rev.html @@ -303,7 +303,7 @@ format parsable by git-rev-parse.

- Read from stdin, append "(<rev_name>)" to all sha1's of name'able + Read from stdin, append "(<rev_name>)" to all sha1's of nameable commits, and pass to stdout

@@ -342,7 +342,7 @@ not the context.

diff --git a/git-name-rev.txt b/git-name-rev.txt index 39a1434a0..43f8c2593 100644 --- a/git-name-rev.txt +++ b/git-name-rev.txt @@ -26,7 +26,7 @@ OPTIONS List all commits reachable from all refs --stdin:: - Read from stdin, append "()" to all sha1's of name'able + Read from stdin, append "()" to all sha1's of nameable commits, and pass to stdout EXAMPLE diff --git a/git-repo-config.html b/git-repo-config.html index 174f68b1b..9e2e5db1e 100644 --- a/git-repo-config.html +++ b/git-repo-config.html @@ -673,6 +673,32 @@ apply.whitespace

+diff.color +
+
+

+ When true (or always), always use colors in patch. + When false (or never), never. When set to auto, use + colors only when the output is to the terminal. +

+
+
+diff.color.<slot> +
+
+

+ Use customized color for diff colorization. <slot> + specifies which part of the patch to use the specified + color, and is one of plain (context text), meta + (metainformation), frag (hunk header), old (removed + lines), or new (added lines). The value for these + configuration variables can be one of: normal, bold, + dim, ul, blink, reverse, reset, black, + red, green, yellow, blue, magenta, cyan, or + white. +

+
+
diff.renameLimit
@@ -682,6 +708,16 @@ diff.renameLimit

+diff.renames +
+
+

+ Tells git to detect renames. If set to any boolean value, it + will enable basic rename detection. If set to "copies" or + "copy", it will detect copies, as well. +

+
+
format.headers
@@ -888,7 +924,7 @@ imap diff --git a/git-svn.html b/git-svn.html new file mode 100644 index 000000000..2a36606cd --- /dev/null +++ b/git-svn.html @@ -0,0 +1,729 @@ + + + + + + +git-svn(1) + + + +

SYNOPSIS

+
+

git-svn <command> [options] [arguments]

+
+

DESCRIPTION

+
+

git-svn is a simple conduit for changesets between a single Subversion +branch and git.

+

git-svn is not to be confused with git-svnimport. The were designed +with very different goals in mind.

+

git-svn is designed for an individual developer who wants a +bidirectional flow of changesets between a single branch in Subversion +and an arbitrary number of branches in git. git-svnimport is designed +for read-only operation on repositories that match a particular layout +(albeit the recommended one by SVN developers).

+

For importing svn, git-svnimport is potentially more powerful when +operating on repositories organized under the recommended +trunk/branch/tags structure, and should be faster, too.

+

git-svn mostly ignores the very limited view of branching that +Subversion has. This allows git-svn to be much easier to use, +especially on repositories that are not organized in a manner that +git-svnimport is designed for.

+
+

COMMANDS

+
+
+
+init +
+
+

+ Creates an empty git repository with additional metadata + directories for git-svn. The Subversion URL must be specified + as a command-line argument. +

+
+
+fetch +
+
+

+ Fetch unfetched revisions from the Subversion URL we are + tracking. refs/remotes/git-svn will be updated to the + latest revision. +

+
+
+
Note: You should never attempt to modify the remotes/git-svn
+branch outside of git-svn.  Instead, create a branch from
+remotes/git-svn and work on that branch.  Use the 'commit'
+command (see below) to write git commits back to
+remotes/git-svn.
+
+
+
+
See 'Additional Fetch Arguments' if you are interested in
+manually joining branches on commit.
+
+
+
+commit +
+
+

+ Commit specified commit or tree objects to SVN. This relies on + your imported fetch data being up-to-date. This makes + absolutely no attempts to do patching when committing to SVN, it + simply overwrites files with those specified in the tree or + commit. All merging is assumed to have taken place + independently of git-svn functions. +

+
+
+rebuild +
+
+

+ Not a part of daily usage, but this is a useful command if + you've just cloned a repository (using git-clone) that was + tracked with git-svn. Unfortunately, git-clone does not clone + git-svn metadata and the svn working tree that git-svn uses for + its operations. This rebuilds the metadata so git-svn can + resume fetch operations. A Subversion URL may be optionally + specified at the command-line if the directory/repository you're + tracking has moved or changed protocols. +

+
+
+show-ignore +
+
+

+ Recursively finds and lists the svn:ignore property on + directories. The output is suitable for appending to + the $GIT_DIR/info/exclude file. +

+
+
+
+

OPTIONS

+
+
+
+-r <ARG> +
+
+--revision <ARG> +
+
+

+ Only used with the fetch command. +

+
+
+
Takes any valid -r<argument> svn would accept and passes it
+directly to svn. -r<ARG1>:<ARG2> ranges and "{" DATE "}" syntax
+is also supported.  This is passed directly to svn, see svn
+documentation for more details.
+
+
+
+
This can allow you to make partial mirrors when running fetch.
+
+
+
+- +
+
+--stdin +
+
+

+ Only used with the commit command. +

+
+
+
Read a list of commits from stdin and commit them in reverse
+order.  Only the leading sha1 is read from each line, so
+git-rev-list --pretty=oneline output can be used.
+
+
+
+--rmdir +
+
+

+ Only used with the commit command. +

+
+
+
Remove directories from the SVN tree if there are no files left
+behind.  SVN can version empty directories, and they are not
+removed by default if there are no files left in them.  git
+cannot version empty directories.  Enabling this flag will make
+the commit to SVN act like git.
+
+
+
+
repo-config key: svn.rmdir
+
+
+
+-e +
+
+--edit +
+
+

+ Only used with the commit command. +

+
+
+
Edit the commit message before committing to SVN.  This is off by
+default for objects that are commits, and forced on when committing
+tree objects.
+
+
+
+
repo-config key: svn.edit
+
+
+
+-l<num> +
+
+--find-copies-harder +
+
+

+ Both of these are only used with the commit command. +

+
+
+
They are both passed directly to git-diff-tree see
+git-diff-tree(1) for more information.
+
+
+
+
repo-config key: svn.l
+repo-config key: svn.findcopiesharder
+
+
+
+-A<filename> +
+
+--authors-file=<filename> +
+
+

+ Syntax is compatible with the files used by git-svnimport and + git-cvsimport: +

+
+
+
+
+
loginname = Joe User <user@example.com>
+
+
+
+
If this option is specified and git-svn encounters an SVN
+committer name that does not exist in the authors-file, git-svn
+will abort operation. The user will then have to add the
+appropriate entry.  Re-running the previous git-svn command
+after the authors-file is modified should continue operation.
+
+
+
+
repo-config key: svn.authors-file
+
+
+

ADVANCED OPTIONS

+
+
+
+-b<refname> +
+
+--branch <refname> +
+
+

+ Used with fetch or commit. +

+
+
+
This can be used to join arbitrary git branches to remotes/git-svn
+on new commits where the tree object is equivalent.
+
+
+
+
When used with different GIT_SVN_ID values, tags and branches in
+SVN can be tracked this way, as can some merges where the heads
+end up having completely equivalent content.  This can even be
+used to track branches across multiple SVN _repositories_.
+
+
+
+
This option may be specified multiple times, once for each
+branch.
+
+
+
+
repo-config key: svn.branch
+
+
+
+-i<GIT_SVN_ID> +
+
+--id <GIT_SVN_ID> +
+
+

+ This sets GIT_SVN_ID (instead of using the environment). See + the section on "Tracking Multiple Repositories or Branches" for + more information on using GIT_SVN_ID. +

+
+
+
+

COMPATIBILITY OPTIONS

+
+
+
+--upgrade +
+
+

+ Only used with the rebuild command. +

+
+
+
Run this if you used an old version of git-svn that used
+"git-svn-HEAD" instead of "remotes/git-svn" as the branch
+for tracking the remote.
+
+
+
+--no-ignore-externals +
+
+

+ Only used with the fetch and rebuild command. +

+
+
+
By default, git-svn passes --ignore-externals to svn to avoid
+fetching svn:external trees into git.  Pass this flag to enable
+externals tracking directly via git.
+
+
+
+
Versions of svn that do not support --ignore-externals are
+automatically detected and this flag will be automatically
+enabled for them.
+
+
+
+
Otherwise, do not enable this flag unless you know what you're
+doing.
+
+
+
+
repo-config key: svn.noignoreexternals
+
+
+
+

Basic Examples

+

Tracking and contributing to an Subversion managed-project:

+
+
+
# Initialize a tree (like git init-db):
+        git-svn init http://svn.foo.org/project/trunk
+# Fetch remote revisions:
+        git-svn fetch
+# Create your own branch to hack on:
+        git checkout -b my-branch remotes/git-svn
+# Commit only the git commits you want to SVN:
+        git-svn commit <tree-ish> [<tree-ish_2> ...]
+# Commit all the git commits from my-branch that don't exist in SVN:
+        git-svn commit remotes/git-svn..my-branch
+# Something is committed to SVN, pull the latest into your branch:
+        git-svn fetch && git pull . remotes/git-svn
+# Append svn:ignore settings to the default git exclude file:
+        git-svn show-ignore >> .git/info/exclude
+
+
+

DESIGN PHILOSOPHY

+
+

Merge tracking in Subversion is lacking and doing branched development +with Subversion is cumbersome as a result. git-svn completely forgoes +any automated merge/branch tracking on the Subversion side and leaves it +entirely up to the user on the git side. It's simply not worth it to do +a useful translation when the original signal is weak.

+
+

TRACKING MULTIPLE REPOSITORIES OR BRANCHES

+
+

This is for advanced users, most users should ignore this section.

+

Because git-svn does not care about relationships between different +branches or directories in a Subversion repository, git-svn has a simple +hack to allow it to track an arbitrary number of related _or_ unrelated +SVN repositories via one git repository. Simply set the GIT_SVN_ID +environment variable to a name other other than "git-svn" (the default) +and git-svn will ignore the contents of the $GIT_DIR/git-svn directory +and instead do all of its work in $GIT_DIR/$GIT_SVN_ID for that +invocation. The interface branch will be remotes/$GIT_SVN_ID, instead of +remotes/git-svn. Any remotes/$GIT_SVN_ID branch should never be modified +by the user outside of git-svn commands.

+
+

ADDITIONAL FETCH ARGUMENTS

+
+

This is for advanced users, most users should ignore this section.

+

Unfetched SVN revisions may be imported as children of existing commits +by specifying additional arguments to fetch. Additional parents may +optionally be specified in the form of sha1 hex sums at the +command-line. Unfetched SVN revisions may also be tied to particular +git commits with the following syntax:

+
+
+
svn_revision_number=git_commit_sha1
+
+
+
+This allows you to tie unfetched SVN revision 375 to your current HEAD +
+
+

+ git-svn fetch 375=$(git-rev-parse HEAD) +

+
+
+

Advanced Example: Tracking a Reorganized Repository

+

If you're tracking a directory that has moved, or otherwise been +branched or tagged off of another directory in the repository and you +care about the full history of the project, then you can read this +section.

+

This is how Yann Dirson tracked the trunk of the ufoai directory when +the /trunk directory of his repository was moved to /ufoai/trunk and +he needed to continue tracking /ufoai/trunk where /trunk left off.

+
+
+
        # This log message shows when the repository was reorganized:
+        r166 | ydirson | 2006-03-02 01:36:55 +0100 (Thu, 02 Mar 2006) | 1 line
+        Changed paths:
+           D /trunk
+           A /ufoai/trunk (from /trunk:165)
+
+        # First we start tracking the old revisions:
+        GIT_SVN_ID=git-oldsvn git-svn init \
+                        https://svn.sourceforge.net/svnroot/ufoai/trunk
+        GIT_SVN_ID=git-oldsvn git-svn fetch -r1:165
+
+        # And now, we continue tracking the new revisions:
+        GIT_SVN_ID=git-newsvn git-svn init \
+              https://svn.sourceforge.net/svnroot/ufoai/ufoai/trunk
+        GIT_SVN_ID=git-newsvn git-svn fetch \
+              166=`git-rev-parse refs/remotes/git-oldsvn`
+
+
+

BUGS

+
+

If somebody commits a conflicting changeset to SVN at a bad moment +(right before you commit) causing a conflict and your commit to fail, +your svn working tree ($GIT_DIR/git-svn/tree) may be dirtied. The +easiest thing to do is probably just to rm -rf $GIT_DIR/git-svn/tree and +run rebuild.

+

We ignore all SVN properties except svn:executable. Too difficult to +map them since we rely heavily on git write-tree being _exactly_ the +same on both the SVN and git working trees and I prefer not to clutter +working trees with metadata files.

+

svn:keywords can't be ignored in Subversion (at least I don't know of +a way to ignore them).

+

Renamed and copied directories are not detected by git and hence not +tracked when committing to SVN. I do not plan on adding support for +this as it's quite difficult and time-consuming to get working for all +the possible corner cases (git doesn't do it, either). Renamed and +copied files are fully supported if they're similar enough for git to +detect them.

+
+

Author

+
+

Written by Eric Wong <normalperson@yhbt.net>.

+
+

Documentation

+
+

Written by Eric Wong <normalperson@yhbt.net>.

+
+ + + diff --git a/git-svn.txt b/git-svn.txt new file mode 100644 index 000000000..7d8680984 --- /dev/null +++ b/git-svn.txt @@ -0,0 +1,319 @@ +git-svn(1) +========== + +NAME +---- +git-svn - bidirectional operation between a single Subversion branch and git + +SYNOPSIS +-------- +'git-svn' [options] [arguments] + +DESCRIPTION +----------- +git-svn is a simple conduit for changesets between a single Subversion +branch and git. + +git-svn is not to be confused with git-svnimport. The were designed +with very different goals in mind. + +git-svn is designed for an individual developer who wants a +bidirectional flow of changesets between a single branch in Subversion +and an arbitrary number of branches in git. git-svnimport is designed +for read-only operation on repositories that match a particular layout +(albeit the recommended one by SVN developers). + +For importing svn, git-svnimport is potentially more powerful when +operating on repositories organized under the recommended +trunk/branch/tags structure, and should be faster, too. + +git-svn mostly ignores the very limited view of branching that +Subversion has. This allows git-svn to be much easier to use, +especially on repositories that are not organized in a manner that +git-svnimport is designed for. + +COMMANDS +-------- +init:: + Creates an empty git repository with additional metadata + directories for git-svn. The Subversion URL must be specified + as a command-line argument. + +fetch:: + Fetch unfetched revisions from the Subversion URL we are + tracking. refs/remotes/git-svn will be updated to the + latest revision. + + Note: You should never attempt to modify the remotes/git-svn + branch outside of git-svn. Instead, create a branch from + remotes/git-svn and work on that branch. Use the 'commit' + command (see below) to write git commits back to + remotes/git-svn. + + See 'Additional Fetch Arguments' if you are interested in + manually joining branches on commit. + +commit:: + Commit specified commit or tree objects to SVN. This relies on + your imported fetch data being up-to-date. This makes + absolutely no attempts to do patching when committing to SVN, it + simply overwrites files with those specified in the tree or + commit. All merging is assumed to have taken place + independently of git-svn functions. + +rebuild:: + Not a part of daily usage, but this is a useful command if + you've just cloned a repository (using git-clone) that was + tracked with git-svn. Unfortunately, git-clone does not clone + git-svn metadata and the svn working tree that git-svn uses for + its operations. This rebuilds the metadata so git-svn can + resume fetch operations. A Subversion URL may be optionally + specified at the command-line if the directory/repository you're + tracking has moved or changed protocols. + +show-ignore:: + Recursively finds and lists the svn:ignore property on + directories. The output is suitable for appending to + the $GIT_DIR/info/exclude file. + +OPTIONS +------- +-r :: +--revision :: + Only used with the 'fetch' command. + + Takes any valid -r svn would accept and passes it + directly to svn. -r: ranges and "{" DATE "}" syntax + is also supported. This is passed directly to svn, see svn + documentation for more details. + + This can allow you to make partial mirrors when running fetch. + +-:: +--stdin:: + Only used with the 'commit' command. + + Read a list of commits from stdin and commit them in reverse + order. Only the leading sha1 is read from each line, so + git-rev-list --pretty=oneline output can be used. + +--rmdir:: + Only used with the 'commit' command. + + Remove directories from the SVN tree if there are no files left + behind. SVN can version empty directories, and they are not + removed by default if there are no files left in them. git + cannot version empty directories. Enabling this flag will make + the commit to SVN act like git. + + repo-config key: svn.rmdir + +-e:: +--edit:: + Only used with the 'commit' command. + + Edit the commit message before committing to SVN. This is off by + default for objects that are commits, and forced on when committing + tree objects. + + repo-config key: svn.edit + +-l:: +--find-copies-harder:: + Both of these are only used with the 'commit' command. + + They are both passed directly to git-diff-tree see + git-diff-tree(1) for more information. + + repo-config key: svn.l + repo-config key: svn.findcopiesharder + +-A:: +--authors-file=:: + + Syntax is compatible with the files used by git-svnimport and + git-cvsimport: + +------------------------------------------------------------------------ +loginname = Joe User +------------------------------------------------------------------------ + + If this option is specified and git-svn encounters an SVN + committer name that does not exist in the authors-file, git-svn + will abort operation. The user will then have to add the + appropriate entry. Re-running the previous git-svn command + after the authors-file is modified should continue operation. + + repo-config key: svn.authors-file + +ADVANCED OPTIONS +---------------- +-b:: +--branch :: + Used with 'fetch' or 'commit'. + + This can be used to join arbitrary git branches to remotes/git-svn + on new commits where the tree object is equivalent. + + When used with different GIT_SVN_ID values, tags and branches in + SVN can be tracked this way, as can some merges where the heads + end up having completely equivalent content. This can even be + used to track branches across multiple SVN _repositories_. + + This option may be specified multiple times, once for each + branch. + + repo-config key: svn.branch + +-i:: +--id :: + This sets GIT_SVN_ID (instead of using the environment). See + the section on "Tracking Multiple Repositories or Branches" for + more information on using GIT_SVN_ID. + +COMPATIBILITY OPTIONS +--------------------- +--upgrade:: + Only used with the 'rebuild' command. + + Run this if you used an old version of git-svn that used + "git-svn-HEAD" instead of "remotes/git-svn" as the branch + for tracking the remote. + +--no-ignore-externals:: + Only used with the 'fetch' and 'rebuild' command. + + By default, git-svn passes --ignore-externals to svn to avoid + fetching svn:external trees into git. Pass this flag to enable + externals tracking directly via git. + + Versions of svn that do not support --ignore-externals are + automatically detected and this flag will be automatically + enabled for them. + + Otherwise, do not enable this flag unless you know what you're + doing. + + repo-config key: svn.noignoreexternals + +Basic Examples +~~~~~~~~~~~~~~ + +Tracking and contributing to an Subversion managed-project: + +------------------------------------------------------------------------ +# Initialize a tree (like git init-db): + git-svn init http://svn.foo.org/project/trunk +# Fetch remote revisions: + git-svn fetch +# Create your own branch to hack on: + git checkout -b my-branch remotes/git-svn +# Commit only the git commits you want to SVN: + git-svn commit [ ...] +# Commit all the git commits from my-branch that don't exist in SVN: + git-svn commit remotes/git-svn..my-branch +# Something is committed to SVN, pull the latest into your branch: + git-svn fetch && git pull . remotes/git-svn +# Append svn:ignore settings to the default git exclude file: + git-svn show-ignore >> .git/info/exclude +------------------------------------------------------------------------ + +DESIGN PHILOSOPHY +----------------- +Merge tracking in Subversion is lacking and doing branched development +with Subversion is cumbersome as a result. git-svn completely forgoes +any automated merge/branch tracking on the Subversion side and leaves it +entirely up to the user on the git side. It's simply not worth it to do +a useful translation when the original signal is weak. + +TRACKING MULTIPLE REPOSITORIES OR BRANCHES +------------------------------------------ +This is for advanced users, most users should ignore this section. + +Because git-svn does not care about relationships between different +branches or directories in a Subversion repository, git-svn has a simple +hack to allow it to track an arbitrary number of related _or_ unrelated +SVN repositories via one git repository. Simply set the GIT_SVN_ID +environment variable to a name other other than "git-svn" (the default) +and git-svn will ignore the contents of the $GIT_DIR/git-svn directory +and instead do all of its work in $GIT_DIR/$GIT_SVN_ID for that +invocation. The interface branch will be remotes/$GIT_SVN_ID, instead of +remotes/git-svn. Any remotes/$GIT_SVN_ID branch should never be modified +by the user outside of git-svn commands. + +ADDITIONAL FETCH ARGUMENTS +-------------------------- +This is for advanced users, most users should ignore this section. + +Unfetched SVN revisions may be imported as children of existing commits +by specifying additional arguments to 'fetch'. Additional parents may +optionally be specified in the form of sha1 hex sums at the +command-line. Unfetched SVN revisions may also be tied to particular +git commits with the following syntax: + + svn_revision_number=git_commit_sha1 + +This allows you to tie unfetched SVN revision 375 to your current HEAD:: + + `git-svn fetch 375=$(git-rev-parse HEAD)` + +Advanced Example: Tracking a Reorganized Repository +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +If you're tracking a directory that has moved, or otherwise been +branched or tagged off of another directory in the repository and you +care about the full history of the project, then you can read this +section. + +This is how Yann Dirson tracked the trunk of the ufoai directory when +the /trunk directory of his repository was moved to /ufoai/trunk and +he needed to continue tracking /ufoai/trunk where /trunk left off. + +------------------------------------------------------------------------ + # This log message shows when the repository was reorganized: + r166 | ydirson | 2006-03-02 01:36:55 +0100 (Thu, 02 Mar 2006) | 1 line + Changed paths: + D /trunk + A /ufoai/trunk (from /trunk:165) + + # First we start tracking the old revisions: + GIT_SVN_ID=git-oldsvn git-svn init \ + https://svn.sourceforge.net/svnroot/ufoai/trunk + GIT_SVN_ID=git-oldsvn git-svn fetch -r1:165 + + # And now, we continue tracking the new revisions: + GIT_SVN_ID=git-newsvn git-svn init \ + https://svn.sourceforge.net/svnroot/ufoai/ufoai/trunk + GIT_SVN_ID=git-newsvn git-svn fetch \ + 166=`git-rev-parse refs/remotes/git-oldsvn` +------------------------------------------------------------------------ + +BUGS +---- +If somebody commits a conflicting changeset to SVN at a bad moment +(right before you commit) causing a conflict and your commit to fail, +your svn working tree ($GIT_DIR/git-svn/tree) may be dirtied. The +easiest thing to do is probably just to rm -rf $GIT_DIR/git-svn/tree and +run 'rebuild'. + +We ignore all SVN properties except svn:executable. Too difficult to +map them since we rely heavily on git write-tree being _exactly_ the +same on both the SVN and git working trees and I prefer not to clutter +working trees with metadata files. + +svn:keywords can't be ignored in Subversion (at least I don't know of +a way to ignore them). + +Renamed and copied directories are not detected by git and hence not +tracked when committing to SVN. I do not plan on adding support for +this as it's quite difficult and time-consuming to get working for all +the possible corner cases (git doesn't do it, either). Renamed and +copied files are fully supported if they're similar enough for git to +detect them. + +Author +------ +Written by Eric Wong . + +Documentation +------------- +Written by Eric Wong .