git-svnimport(1)
================
v0.1, July 2005

NAME
----
git-svnimport - Import a SVN repository into git


SYNOPSIS
--------
[verse]
'git-svnimport' [ -o <branch-for-HEAD> ] [ -h ] [ -v ] [ -d | -D ]
		[ -C <GIT_repository> ] [ -i ] [ -u ] [-l limit_rev]
		[ -b branch_subdir ] [ -T trunk_subdir ] [ -t tag_subdir ]
		[ -s start_chg ] [ -m ] [ -r ] [ -M regex ]
		[ -I <ignorefile_name> ] [ -A <author_file> ]
		[ -R <repack_each_revs>] [ -P <path_from_trunk> ]
		<SVN_repository_URL> [ <path> ]


DESCRIPTION
-----------
Imports a SVN repository into git. It will either create a new
repository, or incrementally import into an existing one.

SVN access is done by the SVN::Perl module.

git-svnimport assumes that SVN repositories are organized into one
"trunk" directory where the main development happens, "branches/FOO"
directories for branches, and "/tags/FOO" directories for tags.
Other subdirectories are ignored.

git-svnimport creates a file ".git/svn2git", which is required for
incremental SVN imports.

OPTIONS
-------
-C <target-dir>::
        The GIT repository to import to.  If the directory doesn't
        exist, it will be created.  Default is the current directory.

-s <start_rev>::
        Start importing at this SVN change number. The  default is 1.
+
When importing incrementally, you might need to edit the .git/svn2git file.

-i::
	Import-only: don't perform a checkout after importing.  This option
	ensures the working directory and index remain untouched and will
	not create them if they do not exist.

-T <trunk_subdir>::
	Name the SVN trunk. Default "trunk".

-t <tag_subdir>::
	Name the SVN subdirectory for tags. Default "tags".

-b <branch_subdir>::
	Name the SVN subdirectory for branches. Default "branches".

-o <branch-for-HEAD>::
	The 'trunk' branch from SVN is imported to the 'origin' branch within
	the git repository. Use this option if you want to import into a
	different branch.

-r::
	Prepend 'rX: ' to commit messages, where X is the imported
	subversion revision.

-u::
	Replace underscores in tag names with periods.

-I <ignorefile_name>::
	Import the svn:ignore directory property to files with this
	name in each directory. (The Subversion and GIT ignore
	syntaxes are similar enough that using the Subversion patterns
	directly with "-I .gitignore" will almost always just work.)

-A <author_file>::
	Read a file with lines on the form
+
------
	username = User's Full Name <email@addr.es>

------
+
and use "User's Full Name <email@addr.es>" as the GIT
author and committer for Subversion commits made by
"username". If encountering a commit made by a user not in the
list, abort.
+
For convenience, this data is saved to $GIT_DIR/svn-authors
each time the -A option is provided, and read from that same
file each time git-svnimport is run with an existing GIT
repository without -A.

-m::
	Attempt to detect merges based on the commit message. This option
	will enable default regexes that try to capture the name source
	branch name from the commit message.

-M <regex>::
	Attempt to detect merges based on the commit message with a custom
	regex. It can be used with -m to also see the default regexes.
	You must escape forward slashes.

-l <max_rev>::
	Specify a maximum revision number to pull.
+
Formerly, this option controlled how many revisions to pull,
due to SVN memory leaks. (These have been worked around.)

-R <repack_each_revs>::
	Specify how often git repository should be repacked.
+
The default value is 1000. git-svnimport will do imports in chunks of 1000
revisions, after each chunk the git repository will be repacked. To disable
this behavior specify some large value here which is greater than the number of
revisions to import.

-P <path_from_trunk>::
	Partial import of the SVN tree.
+
By default, the whole tree on the SVN trunk (/trunk) is imported.
'-P my/proj' will import starting only from '/trunk/my/proj'.
This option is useful when you want to import one project from a
svn repo which hosts multiple projects under the same trunk.

-v::
	Verbosity: let 'svnimport' report what it is doing.

-d::
	Use direct HTTP requests if possible. The "<path>" argument is used
	only for retrieving the SVN logs; the path to the contents is
	included in the SVN log.

-D::
	Use direct HTTP requests if possible. The "<path>" argument is used
	for retrieving the logs, as well as for the contents.
+
There's no safe way to automatically find out which of these options to
use, so you need to try both. Usually, the one that's wrong will die
with a 40x error pretty quickly.

<SVN_repository_URL>::
	The URL of the SVN module you want to import. For local
	repositories, use "file:///absolute/path".
+
If you're using the "-d" or "-D" option, this is the URL of the SVN
repository itself; it usually ends in "/svn".

<path>::
	The path to the module you want to check out.

-h::
	Print a short usage message and exit.

OUTPUT
------
If '-v' is specified, the script reports what it is doing.

Otherwise, success is indicated the Unix way, i.e. by simply exiting with
a zero exit status.

Author
------
Written by Matthias Urlichs <smurf@smurf.noris.de>, with help from
various participants of the git-list <git@vger.kernel.org>.

Based on a cvs2git script by the same author.

Documentation
--------------
Documentation by Matthias Urlichs <smurf@smurf.noris.de>.

GIT
---
Part of the gitlink:git[7] suite
