* [PATCH] Add SVN->Git conversion example to documentation, and cleanup the doc
@ 2008-06-20 13:23 Heikki Orsila
0 siblings, 0 replies; only message in thread
From: Heikki Orsila @ 2008-06-20 13:23 UTC (permalink / raw)
To: git; +Cc: Miklos Vajna, Karl Hasselstrom, Junio C Hamano
Signed-off-by: Heikki Orsila <heikki.orsila@iki.fi>
---
This is the fourth round of the patch. Changes to earlier attempts:
* Explain git<>svn process better (Junio C Hamano)
* Don't mention git-svnimport unnecessarily. And where mentioned,
mark it as deprecated. (Karl Hasselström, Junio C Hamano)
* Remove unnecessary words from description
* Rename foo.git -> foo (Miklos Vajna)
* Remove refs/remotes/git-svn (Miklos Vajna)
* Don't set unnecessary fetch sources
* Use proper syntax for marking command line options in the text.
Use "`--no-metadata`" instead of "--no-metadata". (Junio C Hamano)
* Improve explanation of "`--no-metadata`"
* This patch explains how to do one step transition to Git repository.
Further updates from the SVN repo are not possible. A later patch may
explain the process of incremental updates, but it doesn't really
address the issue of moving from SVN to Git as Git should be
self-sufficient. (Miklos Vajna)
Documentation/git-svn.txt | 56 +++++++++++++++++++++++++++++++++++++--------
1 files changed, 46 insertions(+), 10 deletions(-)
diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt
index 97bed54..551f1df 100644
--- a/Documentation/git-svn.txt
+++ b/Documentation/git-svn.txt
@@ -11,15 +11,15 @@ SYNOPSIS
DESCRIPTION
-----------
-git-svn is a simple conduit for changesets between Subversion and git.
-It is not to be confused with linkgit:git-svnimport[1], which is
-read-only.
+git-svn is a simple bidirectional conduit for changesets between
+Subversion and git. It is used to develop SVN hosted projects with Git tools.
+Changes are committed to a Git repository as would be normally done with
+Git, but the tool converts these commits later to SVN commits.
+It can also be used to convert a Subversion repository to a Git repository.
-git-svn was originally 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. Since its inception,
-git-svn has gained the ability to track multiple branches in a manner
-similar to git-svnimport.
+git-svn was designed for developers who want
+bidirectional flow of changesets between multiple branches in Subversion
+and an arbitrary number of branches in git.
git-svn is especially useful when it comes to tracking repositories
not organized in the way Subversion developers recommend (trunk,
@@ -219,7 +219,7 @@ Any other arguments are passed directly to `git log'
'commit-diff'::
Commits the diff of two tree-ish arguments from the
command-line. This command is intended for interoperability with
- git-svnimport and does not rely on being inside an git-svn
+ git-svnimport (deprecated) 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
URL of the target Subversion repository. The final argument
@@ -317,7 +317,7 @@ config key: svn.findcopiesharder
-A<filename>::
--authors-file=<filename>::
-Syntax is compatible with the files used by git-svnimport and
+Syntax is compatible with the files used by git-svnimport (deprecated) and
git-cvsimport:
------------------------------------------------------------------------
@@ -521,6 +521,42 @@ have each person clone that repository with 'git clone':
git-svn rebase
------------------------------------------------------------------------
+CONVERTING A SUBVERSION REPOSITORY TO A GIT REPOSITORY
+------------------------------------------------------
+
+When converting a Subversion repository to a Git repository
+"`--no-metadata`" prevents git-svn from adding "git-svn-id:" comments to
+the log. "`-A`" option is used to convert SVN pseudonyms to real names
+and email addresses. The whole repository, or a part of it can be
+converted. Two examples below show how to convert the whole repo
+with all branches, or only the SVN trunk. Note, this way it is
+impossible to update Git repository incrementally from the SVN repository.
+This is a one-step, one-way conversion.
+
+------------------------------------------------------------------------
+# Convert all branches of an SVN repository to a Git repository:
+
+ git svn clone --no-metadata -A authors.txt SVN_URL foo
+
+# Convert only the trunk of an SVN repository to a Git repository:
+
+ git svn clone --no-metadata -A authors.txt SVN_URL/trunk foo
+------------------------------------------------------------------------
+Next, the new repository should be verified to match what was
+expected. Go through the repository and logs to do that.
+Also, there may have been typos in the author file. It is crucial to
+get authors correctly in the conversion step, because it is very
+awkward and inconvenient to do it later (with rewrite).
+The last step is to remove the svn data from the repository,
+and repack the repository.
+------------------------------------------------------------------------
+ cd foo/.git
+ rm -rf svn
+ rm -f refs/remotes/git-svn
+ git config --remove-section svn-remote.svn
+ git gc
+------------------------------------------------------------------------
+
REBASE VS. PULL/MERGE
---------------------
--
1.5.5.1.1.ga5e5c
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2008-06-20 13:24 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-06-20 13:23 [PATCH] Add SVN->Git conversion example to documentation, and cleanup the doc Heikki Orsila
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).