X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=Documentation%2Fgit-svn.txt;h=aea4a6bf5faae61ca02a0cc3e8a40f5d2d735191;hb=e0d10e1c63bc52b37bbec99b07deee794058d9b4;hp=f754d2f679b0f77c85767de8b45f089d441e4c4d;hpb=0d313b2b7bb219542473a25ad042f4b990e69a45;p=git.git diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt index f754d2f67..aea4a6bf5 100644 --- a/Documentation/git-svn.txt +++ b/Documentation/git-svn.txt @@ -3,7 +3,7 @@ git-svn(1) NAME ---- -git-svn - bidirectional operation between Subversion and git +git-svn - Bidirectional operation between a single Subversion branch and git SYNOPSIS -------- @@ -53,11 +53,13 @@ See '<>' if you are interested in manually joining branches on commit. 'dcommit':: - Commit all diffs from a specified head directly to the SVN + Commit each diff from a specified head directly to the SVN repository, and then rebase or reset (depending on whether or - not there is a diff between SVN and head). It is recommended - that you run git-svn fetch and rebase (not pull) your commits - against the latest changes in the SVN repository. + not there is a diff between SVN and head). This will create + a revision in SVN for each commit in git. + It is recommended that you run git-svn fetch and rebase (not + pull or merge) your commits against the latest changes in the + SVN repository. An optional command-line argument may be specified as an alternative to HEAD. This is advantageous over 'set-tree' (below) because it produces @@ -111,7 +113,7 @@ manually joining branches on commit. 'commit-diff':: Commits the diff of two tree-ish arguments from the - command-line. This command is intended for interopability with + command-line. This command is intended for interoperability with git-svnimport and does not rely on being inside an git-svn init-ed repository. This command takes three arguments, (a) the original tree to diff against, (b) the new tree result, (c) the @@ -137,6 +139,24 @@ manually joining branches on commit. where the repository URL ends and where the repository path begins. +-T:: +--trunk=:: +-t:: +--tags=:: +-b:: +--branches=:: + These are the command-line options for multi-init. Each of + these flags can point to a relative repository path + (--tags=project/tags') or a full url + (--tags=https://foo.org/project/tags) + +--prefix= + This allows one to specify a prefix which is prepended to the + names of remotes. The prefix does not automatically include a + trailing slash, so be sure you include one in the argument if + that is what you want. This is useful if you wish to track + multiple projects that share a common repository. + 'multi-fetch':: This runs fetch on all known SVN branches we're tracking. This will NOT discover new branches (unlike git-svnimport), so @@ -151,7 +171,7 @@ OPTIONS --shared:: --template=:: Only used with the 'init' command. - These are passed directly to gitlink:git-init-db[1]. + These are passed directly to gitlink:git-init[1]. -r :: --revision :: @@ -184,7 +204,7 @@ 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 +config key: svn.rmdir -e:: --edit:: @@ -195,7 +215,7 @@ 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 +config key: svn.edit -l:: --find-copies-harder:: @@ -206,8 +226,8 @@ They are both passed directly to git-diff-tree see gitlink:git-diff-tree[1] for more information. [verse] -repo-config key: svn.l -repo-config key: svn.findcopiesharder +config key: svn.l +config key: svn.findcopiesharder -A:: --authors-file=:: @@ -225,12 +245,11 @@ 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.authorsfile +config key: svn.authorsfile -q:: --quiet:: - Make git-svn less verbose. This only affects git-svn if you - have the SVN::* libraries installed and are using them. + Make git-svn less verbose. --repack[=]:: --repack-flags= @@ -243,8 +262,8 @@ repo-config key: svn.authorsfile --repack-flags are passed directly to gitlink:git-repack[1]. -repo-config key: svn.repack -repo-config key: svn.repackflags +config key: svn.repack +config key: svn.repackflags -m:: --merge:: @@ -285,7 +304,7 @@ used to track branches across multiple SVN _repositories_. This option may be specified multiple times, once for each branch. -repo-config key: svn.branch +config key: svn.branch -i:: --id :: @@ -301,9 +320,7 @@ for more information on using GIT_SVN_ID. started tracking a branch and never tracked the trunk it was descended from. - This relies on the SVN::* libraries to work. - -repo-config key: svn.followparent +config key: svn.followparent --no-metadata:: This gets rid of the git-svn-id: lines at the end of every commit. @@ -315,7 +332,7 @@ repo-config key: svn.followparent The 'git-svn log' command will not work on repositories using this, either. -repo-config key: svn.nometadata +config key: svn.nometadata -- @@ -330,25 +347,6 @@ 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. - -This command has no effect when you are using the SVN::* -libraries with git, svn:externals are always avoided. - -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 - --ignore-nodate:: Only used with the 'fetch' command. @@ -369,7 +367,7 @@ Basic Examples Tracking and contributing to a the trunk of a Subversion-managed project: ------------------------------------------------------------------------ -# Initialize a repo (like git init-db): +# Initialize a repo (like git init): git-svn init http://svn.foo.org/project/trunk # Fetch remote revisions: git-svn fetch @@ -390,7 +388,7 @@ See also: '<>' ------------------------------------------------------------------------ -# Initialize a repo (like git init-db): +# Initialize a repo (like git init): git-svn multi-init http://svn.foo.org/project \ -T trunk -b branches -t tags # Fetch remote revisions: @@ -408,19 +406,20 @@ See also: git-svn multi-init ------------------------------------------------------------------------ -REBASE VS. PULL ---------------- +REBASE VS. PULL/MERGE +--------------------- Originally, git-svn recommended that the remotes/git-svn branch be -pulled from. This is because the author favored 'git-svn set-tree B' -to commit a single head rather than the 'git-svn set-tree A..B' notation -to commit multiple commits. +pulled or merged from. This is because the author favored +'git-svn set-tree B' to commit a single head rather than the +'git-svn set-tree A..B' notation to commit multiple commits. -If you use 'git-svn set-tree A..B' to commit several diffs and you do not -have the latest remotes/git-svn merged into my-branch, you should use -'git rebase' to update your work branch instead of 'git pull'. 'pull' -can cause non-linear history to be flattened when committing into SVN, -which can lead to merge commits reversing previous commits in SVN. +If you use 'git-svn set-tree A..B' to commit several diffs and you do +not have the latest remotes/git-svn merged into my-branch, you should +use 'git rebase' to update your work branch instead of 'git pull' or +'git merge'. 'pull/merge' can cause non-linear history to be flattened +when committing into SVN, which can lead to merge commits reversing +previous commits in SVN. DESIGN PHILOSOPHY ----------------- @@ -465,49 +464,18 @@ 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 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Note: this example is now obsolete if you have SVN::* libraries -installed. Simply use --follow-parent when fetching. - 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. +care about the full history of the project, then you can use +the --follow-parent option. -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` ------------------------------------------------------------------------- +------------------------------------------------ + git-svn fetch --follow-parent +------------------------------------------------ BUGS ---- -If you are not using the SVN::* Perl libraries and 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'. You -can avoid this problem entirely by using 'dcommit'. - 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