threads / patch / 13959

patchAdd SVN->Git conversion example to documentation

Subject: [PATCH] Add SVN->Git conversion example to documentation

## tl;dr

4 messages between Jun 14, 2008 and Jun 18, 2008. Diffs are folded; open one to read it.

replies: 3people: 4as markdown or json

Heikki Orsila· Jun 14, 2008, 21:58 UTC · lore
Signed-off-by: Heikki Orsila <heikki.orsila@iki.fi>
---
This is the third round. Added some commands to clean up the repository, 
and set fetch heads. Thanks to Miklos Vajna for feedback.
 Documentation/git-svn.txt |   41 ++++++++++++++++++++++++++++++++++++++---
 1 files changed, 38 insertions(+), 3 deletions(-)
Show changes to Documentation/git-svn.txt +38 −3
diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt
index f4cbd2f..26e00c5 100644
--- a/Documentation/git-svn.txt
+++ b/Documentation/git-svn.txt
@@ -11,9 +11,12 @@ 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 projects with Git tools,
+but commit changes to a Subversion repository. It can also be used to
+convert a Subversion repository to a Git repository. It should not
+be confused with linkgit:git-svnimport[1], which does Subversion to
+Git conversion, but not the other direction.
 
 git-svn was originally designed for an individual developer who wants a
 bidirectional flow of changesets between a single branch in Subversion
@@ -520,6 +523,38 @@ 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 removes "git-svn-id:" comments from 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.
+
+------------------------------------------------------------------------
+# Convert all branches of an SVN repository to a Git repository:
+
+	git svn clone --no-metadata -A authors.txt SVN_URL foo.git
+
+# Convert only the trunk of an SVN repository to a Git repository:
+
+	git svn clone --no-metadata -A authors.txt SVN_URL/trunk foo.git
+------------------------------------------------------------------------
+After that, the new repository should be cleaned, and fetch heads should
+be set.
+------------------------------------------------------------------------
+	cd foo.git/.git
+	rm -rf svn
+	git config --remove-section svn-remote.svn
+	git config remote.origin.url .
+	git config remote.origin.fetch +refs/remotes/tags/*:refs/tags/*
+	git config --add remote.origin.fetch +refs/remotes/*:refs/heads/*
+	git fetch
+	git gc
+------------------------------------------------------------------------
+
 REBASE VS. PULL/MERGE
 ---------------------
 
-- 
1.5.5.1.1.ga5e5c
Miklos Vajna· Jun 14, 2008, 22:47 UTC · re: Heikki Orsila · lore

Re: [PATCH] Add SVN->Git conversion example to documentation

On Sun, Jun 15, 2008 at 12:58:12AM +0300, Heikki Orsila <heikki.orsila@iki.fi> wrote:
> +After that, the new repository should be cleaned, and fetch heads should
> +be set.
> +------------------------------------------------------------------------
> +	cd foo.git/.git

Heh, I was confused. foo.git is usually a bare repo, if the repo has a working directory as well, then just call it foo.

And then: if you convert an svn repo to a git one, don't you want to convert it to a bare repo?

I haven't tried git-svn clone but the following will work for sure:

git --bare init git --bare svn init -s URL git --bare svn fetch

Show 7 quoted lines
> +	rm -rf svn
> +	git config --remove-section svn-remote.svn
> +	git config remote.origin.url .
> +	git config remote.origin.fetch +refs/remotes/tags/*:refs/tags/*
> +	git config --add remote.origin.fetch +refs/remotes/*:refs/heads/*
> +	git fetch
> +	git gc

If you remove the svn dir, why don't you remove refs/remotes as well? (Probably via update-ref since git svn will pack refs before it ends for big repos, I think.)

Also I think it would be a good idea to give a hint how to do incremental updates. Something like not deleting the svn dir and using git --bare svn fetch; git fetch.

PS: I'm not a git-svn contributor or anything, just thought I give you
some advices, I hope it helped. :-)
Junio C Hamano· Jun 17, 2008, 23:21 UTC · re: Heikki Orsila · lore

Re: [PATCH] Add SVN->Git conversion example to documentation

Heikki Orsila <heikki.orsila@iki.fi> writes:
Show 22 quoted lines
> Signed-off-by: Heikki Orsila <heikki.orsila@iki.fi>
> ---
> This is the third round. Added some commands to clean up the repository, 
> and set fetch heads. Thanks to Miklos Vajna for feedback.
>
>  Documentation/git-svn.txt |   41 ++++++++++++++++++++++++++++++++++++++---
>  1 files changed, 38 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt
> index f4cbd2f..26e00c5 100644
> --- a/Documentation/git-svn.txt
> +++ b/Documentation/git-svn.txt
> @@ -11,9 +11,12 @@ 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 projects with Git tools,
> +but commit changes to a Subversion repository. It can also be used to

That is correct but doesn't the above give a false impression that commits are only made on subversion side and never on git side?

> +convert a Subversion repository to a Git repository. It should not
> +be confused with linkgit:git-svnimport[1], which does Subversion to
> +Git conversion, but not the other direction.

We do not ship nor document svnimport anymore and linkgit: there is actively wrong. People seem to be confused with ancient documents still floating on the Web that talk about svnimport, and I think it is a good idea to try to clear the confusion here, but perhaps...

	... with the deprecated `git-svnimport`, which was used for
	one-way conversion from Subversion to git.
Show 10 quoted lines
> @@ -520,6 +523,38 @@ 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 removes "git-svn-id:" comments from the log.
> +-A option is used to convert SVN pseudonyms to real names

Anything that user usually would type on the command line it is preferred to typeset with `quoted like this`, so "`--no-metadata`" and "`-A` option".

It is not `--no-metadata` "removes". git-svn adds cruft because it wants to use it for bidi operation, but --no-metadata prevents it from doing so.

Heikki Orsila· Jun 18, 2008, 00:55 UTC · re: Junio C Hamano · lore

Re: [PATCH] Add SVN->Git conversion example to documentation

On Tue, Jun 17, 2008 at 04:21:36PM -0700, Junio C Hamano wrote:
Show 9 quoted lines
> > -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 projects with Git tools,
> > +but commit changes to a Subversion repository. It can also be used to
> 
> That is correct but doesn't the above give a false impression that commits
> are only made on subversion side and never on git side?
Hmm.. I'll try to make it more explicity. Will send another patch soon.
Show 8 quoted lines
> > +convert a Subversion repository to a Git repository. It should not
> > +be confused with linkgit:git-svnimport[1], which does Subversion to
> > +Git conversion, but not the other direction.
> 
> We do not ship nor document svnimport anymore and linkgit: there is
> actively wrong.  People seem to be confused with ancient documents still
> floating on the Web that talk about svnimport, and I think it is a good
> idea to try to clear the confusion here, but perhaps...
OK, I will not mention svnimport in the next patch.
Show 20 quoted lines
> 	... with the deprecated `git-svnimport`, which was used for
> 	one-way conversion from Subversion to git.
> 
> > @@ -520,6 +523,38 @@ 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 removes "git-svn-id:" comments from the log.
> > +-A option is used to convert SVN pseudonyms to real names
> 
> Anything that user usually would type on the command line it is preferred
> to typeset with `quoted like this`, so "`--no-metadata`" and "`-A` option".
> 
> It is not `--no-metadata` "removes".  git-svn adds cruft because it wants
> to use it for bidi operation, but --no-metadata prevents it from doing
> so.
OK
-- 
Heikki Orsila
heikki.orsila@iki.fi
http://www.iki.fi/shd

← back to recent threads