git-svn: documentation updates for new functionality
Force the showing of the --minimize flag as an option in the 'migrate' help. Also, fix the usage function to correctly filter out the deprecated aliases. Signed-off-by: Eric Wong <normalperson@yhbt.net>
This commit is contained in:
parent
60d9c97adf
commit
a836a0e172
@ -13,14 +13,13 @@ DESCRIPTION
|
|||||||
-----------
|
-----------
|
||||||
git-svn is a simple conduit for changesets between Subversion and git.
|
git-svn is a simple conduit for changesets between Subversion and git.
|
||||||
It is not to be confused with gitlink:git-svnimport[1], which is
|
It is not to be confused with gitlink:git-svnimport[1], which is
|
||||||
read-only and geared towards tracking multiple branches.
|
read-only.
|
||||||
|
|
||||||
git-svn was originally designed for an individual developer who wants a
|
git-svn was originally designed for an individual developer who wants a
|
||||||
bidirectional flow of changesets between a single branch in Subversion
|
bidirectional flow of changesets between a single branch in Subversion
|
||||||
and an arbitrary number of branches in git. Since its inception,
|
and an arbitrary number of branches in git. Since its inception,
|
||||||
git-svn has gained the ability to track multiple branches in a manner
|
git-svn has gained the ability to track multiple branches in a manner
|
||||||
similar to git-svnimport; but it cannot (yet) automatically detect new
|
similar to git-svnimport.
|
||||||
branches and tags like git-svnimport does.
|
|
||||||
|
|
||||||
git-svn is especially useful when it comes to tracking repositories
|
git-svn is especially useful when it comes to tracking repositories
|
||||||
not organized in the way Subversion developers recommend (trunk,
|
not organized in the way Subversion developers recommend (trunk,
|
||||||
@ -31,23 +30,40 @@ COMMANDS
|
|||||||
--
|
--
|
||||||
|
|
||||||
'init'::
|
'init'::
|
||||||
Creates an empty git repository with additional metadata
|
Initializes an empty git repository with additional
|
||||||
directories for git-svn. The Subversion URL must be specified
|
metadata directories for git-svn. The Subversion URL
|
||||||
as a command-line argument. Optionally, the target directory
|
may be specified as a command-line argument, or as full
|
||||||
to operate on can be specified as a second argument. Normally
|
URL arguments to -T/-t/-b. Optionally, the target
|
||||||
this command initializes the current directory.
|
directory to operate on can be specified as a second
|
||||||
|
argument. Normally this command initializes the current
|
||||||
|
directory.
|
||||||
|
|
||||||
|
-T<trunk_subdir>::
|
||||||
|
--trunk=<trunk_subdir>::
|
||||||
|
-t<tags_subdir>::
|
||||||
|
--tags=<tags_subdir>::
|
||||||
|
-b<branches_subdir>::
|
||||||
|
--branches=<branches_subdir>::
|
||||||
|
These are optional command-line options for 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=<prefix>
|
||||||
|
This allows one to specify a prefix which is prepended
|
||||||
|
to the names of remotes if trunk/branches/tags are
|
||||||
|
specified. 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.
|
||||||
|
|
||||||
'fetch'::
|
'fetch'::
|
||||||
|
|
||||||
Fetch unfetched revisions from the Subversion URL we are
|
Fetch unfetched revisions from the Subversion remote we are
|
||||||
tracking. refs/remotes/git-svn will be updated to the
|
tracking. The name of the [svn-remote "..."] section in the
|
||||||
latest revision.
|
.git/config file may be specified as an optional command-line
|
||||||
|
argument.
|
||||||
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 'dcommit'
|
|
||||||
command (see below) to write git commits back to
|
|
||||||
remotes/git-svn.
|
|
||||||
|
|
||||||
'dcommit'::
|
'dcommit'::
|
||||||
Commit each diff from a specified head directly to the SVN
|
Commit each diff from a specified head directly to the SVN
|
||||||
@ -109,53 +125,13 @@ remotes/git-svn.
|
|||||||
repository (that has been init-ed with git-svn).
|
repository (that has been init-ed with git-svn).
|
||||||
The -r<revision> option is required for this.
|
The -r<revision> option is required for this.
|
||||||
|
|
||||||
'graft-branches'::
|
|
||||||
This command attempts to detect merges/branches from already
|
|
||||||
imported history. Techniques used currently include regexes,
|
|
||||||
file copies, and tree-matches). This command generates (or
|
|
||||||
modifies) the $GIT_DIR/info/grafts file. This command is
|
|
||||||
considered experimental, and inherently flawed because
|
|
||||||
merge-tracking in SVN is inherently flawed and inconsistent
|
|
||||||
across different repositories.
|
|
||||||
|
|
||||||
'multi-init'::
|
|
||||||
This command supports git-svnimport-like command-line syntax for
|
|
||||||
importing repositories that are laid out as recommended by the
|
|
||||||
SVN folks. This is a bit more tolerant than the git-svnimport
|
|
||||||
command-line syntax and doesn't require the user to figure out
|
|
||||||
where the repository URL ends and where the repository path
|
|
||||||
begins.
|
|
||||||
|
|
||||||
-T<trunk_subdir>::
|
|
||||||
--trunk=<trunk_subdir>::
|
|
||||||
-t<tags_subdir>::
|
|
||||||
--tags=<tags_subdir>::
|
|
||||||
-b<branches_subdir>::
|
|
||||||
--branches=<branches_subdir>::
|
|
||||||
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=<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
|
|
||||||
multi-init will need to be re-run (it's idempotent).
|
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
-------
|
-------
|
||||||
--
|
--
|
||||||
|
|
||||||
--shared::
|
--shared[={false|true|umask|group|all|world|everybody}]::
|
||||||
--template=<template_directory>::
|
--template=<template_directory>::
|
||||||
Only used with the 'init' command.
|
Only used with the 'init' command.
|
||||||
These are passed directly to gitlink:git-init[1].
|
These are passed directly to gitlink:git-init[1].
|
||||||
@ -163,14 +139,15 @@ OPTIONS
|
|||||||
-r <ARG>::
|
-r <ARG>::
|
||||||
--revision <ARG>::
|
--revision <ARG>::
|
||||||
|
|
||||||
Only used with the 'fetch' command.
|
Used with the 'fetch' command.
|
||||||
|
|
||||||
Takes any valid -r<argument> svn would accept and passes it
|
This allows revision ranges for partial/cauterized history
|
||||||
directly to svn. -r<ARG1>:<ARG2> ranges and "{" DATE "}" syntax
|
to be supported. $NUMBER, $NUMBER1:$NUMBER2 (numeric ranges),
|
||||||
is also supported. This is passed directly to svn, see svn
|
$NUMBER:HEAD, and BASE:$NUMBER are all supported.
|
||||||
documentation for more details.
|
|
||||||
|
|
||||||
This can allow you to make partial mirrors when running fetch.
|
This can allow you to make partial mirrors when running fetch;
|
||||||
|
but is generally not recommended because history will be skipped
|
||||||
|
and lost.
|
||||||
|
|
||||||
-::
|
-::
|
||||||
--stdin::
|
--stdin::
|
||||||
@ -276,36 +253,19 @@ ADVANCED OPTIONS
|
|||||||
----------------
|
----------------
|
||||||
--
|
--
|
||||||
|
|
||||||
-b<refname>::
|
|
||||||
--branch <refname>::
|
|
||||||
Used with 'fetch', 'dcommit' or 'set-tree'.
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
config key: svn.branch
|
|
||||||
|
|
||||||
-i<GIT_SVN_ID>::
|
-i<GIT_SVN_ID>::
|
||||||
--id <GIT_SVN_ID>::
|
--id <GIT_SVN_ID>::
|
||||||
|
|
||||||
This sets GIT_SVN_ID (instead of using the environment). See the
|
This sets GIT_SVN_ID (instead of using the environment). This
|
||||||
section on
|
allows the user to override the default refname to fetch from
|
||||||
'<<tracking-multiple-repos,Tracking Multiple Repositories or Branches>>'
|
when tracking a single URL. The 'log' and 'dcommit' commands
|
||||||
for more information on using GIT_SVN_ID.
|
no longer require this switch as an argument.
|
||||||
|
|
||||||
-R<remote name>::
|
-R<remote name>::
|
||||||
--svn-remote <remote name>::
|
--svn-remote <remote name>::
|
||||||
Specify the [svn-remote "<remote name>"] section to use,
|
Specify the [svn-remote "<remote name>"] section to use,
|
||||||
this allows multiple repositories to be tracked.
|
this allows SVN multiple repositories to be tracked.
|
||||||
Default: git-svn
|
Default: "svn"
|
||||||
|
|
||||||
--follow-parent::
|
--follow-parent::
|
||||||
This is especially helpful when we're tracking a directory
|
This is especially helpful when we're tracking a directory
|
||||||
@ -369,26 +329,21 @@ Tracking and contributing to a the trunk of a Subversion-managed project:
|
|||||||
|
|
||||||
Tracking and contributing to an entire Subversion-managed project
|
Tracking and contributing to an entire Subversion-managed project
|
||||||
(complete with a trunk, tags and branches):
|
(complete with a trunk, tags and branches):
|
||||||
See also:
|
|
||||||
'<<tracking-multiple-repos,Tracking Multiple Repositories or Branches>>'
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
# Initialize a repo (like git init):
|
# Initialize a repo (like git init):
|
||||||
git-svn multi-init http://svn.foo.org/project \
|
git-svn init http://svn.foo.org/project -T trunk -b branches -t tags
|
||||||
-T trunk -b branches -t tags
|
|
||||||
# Fetch remote revisions:
|
# Fetch remote revisions:
|
||||||
git-svn multi-fetch
|
git-svn fetch
|
||||||
# Create your own branch of trunk to hack on:
|
# Create your own branch of trunk to hack on:
|
||||||
git checkout -b my-trunk remotes/trunk
|
git checkout -b my-trunk remotes/trunk
|
||||||
# Do some work, and then commit your new changes to SVN, as well as
|
# Do some work, and then commit your new changes to SVN, as well as
|
||||||
# automatically updating your working HEAD:
|
# automatically updating your working HEAD:
|
||||||
git-svn dcommit -i trunk
|
git-svn dcommit
|
||||||
# Something has been committed to trunk, rebase the latest into your branch:
|
# Something has been committed to trunk, rebase the latest into your branch:
|
||||||
git-svn multi-fetch && git rebase remotes/trunk
|
git-svn fetch && git rebase remotes/trunk
|
||||||
# Append svn:ignore settings of trunk to the default git exclude file:
|
# Append svn:ignore settings of trunk to the default git exclude file:
|
||||||
git-svn show-ignore -i trunk >> .git/info/exclude
|
git-svn show-ignore -i trunk >> .git/info/exclude
|
||||||
# Check for new branches and tags (no arguments are needed):
|
|
||||||
git-svn multi-init
|
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
REBASE VS. PULL/MERGE
|
REBASE VS. PULL/MERGE
|
||||||
@ -411,31 +366,9 @@ DESIGN PHILOSOPHY
|
|||||||
Merge tracking in Subversion is lacking and doing branched development
|
Merge tracking in Subversion is lacking and doing branched development
|
||||||
with Subversion is cumbersome as a result. git-svn does not do
|
with Subversion is cumbersome as a result. git-svn does not do
|
||||||
automated merge/branch tracking by default and leaves it entirely up to
|
automated merge/branch tracking by default and leaves it entirely up to
|
||||||
the user on the git side.
|
the user on the git side. git-svn does however follow copy
|
||||||
|
history of the directory that it is tracking, however (much like
|
||||||
[[tracking-multiple-repos]]
|
how 'svn log' works).
|
||||||
TRACKING MULTIPLE REPOSITORIES OR BRANCHES
|
|
||||||
------------------------------------------
|
|
||||||
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 use the --id/-i flag or
|
|
||||||
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/svn/git-svn directory and instead do all of its work in
|
|
||||||
$GIT_DIR/svn/$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.
|
|
||||||
|
|
||||||
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 use
|
|
||||||
the --follow-parent option.
|
|
||||||
|
|
||||||
------------------------------------------------
|
|
||||||
git-svn fetch --follow-parent
|
|
||||||
------------------------------------------------
|
|
||||||
|
|
||||||
BUGS
|
BUGS
|
||||||
----
|
----
|
||||||
@ -452,6 +385,33 @@ 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
|
copied files are fully supported if they're similar enough for git to
|
||||||
detect them.
|
detect them.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
git-svn stores [svn-remote] configuration information in the
|
||||||
|
repository .git/config file. It is similar the core git
|
||||||
|
[remote] sections except 'fetch' keys do not accept glob
|
||||||
|
arguments; but they are instead handled by the 'branches'
|
||||||
|
and 'tags' keys. Since some SVN repositories are oddly
|
||||||
|
configured with multiple projects glob expansions such those
|
||||||
|
listed below are allowed:
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
[svn-remote "project-a"]
|
||||||
|
url = http://server.org/svn
|
||||||
|
branches = branches/*/project-a:refs/remotes/project-a/branches/*
|
||||||
|
tags = tags/*/project-a:refs/remotes/project-a/tags/*
|
||||||
|
trunk = trunk/project-a:refs/remotes/project-a/trunk
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Keep in mind that the '*' (asterisk) wildcard of the local ref
|
||||||
|
(left of the ':') *must* be the farthest right path component;
|
||||||
|
however the remote wildcard may be anywhere as long as it's own
|
||||||
|
independent path componet (surrounded by '/' or EOL). This
|
||||||
|
type of configuration is not automatically created by 'init' and
|
||||||
|
should be manually entered with a text-editor or using
|
||||||
|
gitlink:git-config[1]
|
||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
--------
|
--------
|
||||||
gitlink:git-rebase[1]
|
gitlink:git-rebase[1]
|
||||||
|
@ -114,7 +114,8 @@ my %cmd = (
|
|||||||
# no-op, we automatically run this anyways,
|
# no-op, we automatically run this anyways,
|
||||||
'Migrate configuration/metadata/layout from
|
'Migrate configuration/metadata/layout from
|
||||||
previous versions of git-svn',
|
previous versions of git-svn',
|
||||||
\%remote_opts ],
|
{ 'minimize' => \$Git::SVN::Migration::_minimize,
|
||||||
|
%remote_opts } ],
|
||||||
'log' => [ \&Git::SVN::Log::cmd_show_log, 'Show commit logs',
|
'log' => [ \&Git::SVN::Log::cmd_show_log, 'Show commit logs',
|
||||||
{ 'limit=i' => \$Git::SVN::Log::limit,
|
{ 'limit=i' => \$Git::SVN::Log::limit,
|
||||||
'revision|r=s' => \$_revision,
|
'revision|r=s' => \$_revision,
|
||||||
@ -180,9 +181,9 @@ Usage: $0 <command> [options] [arguments]\n
|
|||||||
|
|
||||||
foreach (sort keys %cmd) {
|
foreach (sort keys %cmd) {
|
||||||
next if $cmd && $cmd ne $_;
|
next if $cmd && $cmd ne $_;
|
||||||
|
next if /^multi-/; # don't show deprecated commands
|
||||||
print $fd ' ',pack('A17',$_),$cmd{$_}->[1],"\n";
|
print $fd ' ',pack('A17',$_),$cmd{$_}->[1],"\n";
|
||||||
foreach (keys %{$cmd{$_}->[2]}) {
|
foreach (keys %{$cmd{$_}->[2]}) {
|
||||||
next if /^multi-/; # don't show deprecated commands
|
|
||||||
# prints out arguments as they should be passed:
|
# prints out arguments as they should be passed:
|
||||||
my $x = s#[:=]s$## ? '<arg>' : s#[:=]i$## ? '<num>' : '';
|
my $x = s#[:=]s$## ? '<arg>' : s#[:=]i$## ? '<num>' : '';
|
||||||
print $fd ' ' x 21, join(', ', map { length $_ > 1 ?
|
print $fd ' ' x 21, join(', ', map { length $_ > 1 ?
|
||||||
|
Loading…
Reference in New Issue
Block a user