Quantcast
Channel: Stereo Interactive & Design – Ann Arbor, Michigan Web Design
Viewing all articles
Browse latest Browse all 10

Import SVN project into Git

$
0
0

Recently we converted a few SVN projects to Git. We used a method that converts svn authors to git authors and then uploads the repository to github. It also maintains tags and branches. Here is how we did it:

echo "svnuser <mygithubemail@example.com>" > authors
mkdir myproject-git
cd myproject-git
git svn init -t tags -b branches -T trunk svn+ssh://svnuser@mysvnhost/path/to/svn/repo
git svn fetch --authors-file=../authors
git for-each-ref refs/remotes/tags --shell --format="r=%(refname:short) t=\${r#tags/}" | while read e; do eval "$e"; git tag -f $t refs/remotes/$r; git branch -d -r $r; done
git remote add origin git@github.com:gituser/mygitrepo.git
git push -u origin master
git push --tags

The git for-each-ref script was taken from gitready.com and converts the tag branches into actual git tags and then delete those branches from the new git repository.

SVN externals will not be imported. In that event, you may find a git mirror of the svn repositories and you can set them up as submodules:

git submodule add git://github.com/path/an-old-svn-external.git vendor/my-new-submodule
cd vendor/my-new-submodule
git checkout v1.0
cd ..
git add my-new-submodule
git commit -m "adding submodule at v1.0"
git push

sources: http://stackoverflow.com/questions/1777854/git-submodules-specify-a-branch-tag

If you need to find a specific svn revision number so you can tie your git submodule to the same revision, this will parse all of the git log messages (which will contain the svn revision number of it was imported from an svn repository) and display the revision numbers for you:

git log -z | tr '\n\0' ' \n' | sed 's/\(commit \S*\) .*git-svn-id: svn:[^@]*@\([0-9]*\) .*/\1 r\2/'

source: http://stackoverflow.com/a/2872369/149503


Viewing all articles
Browse latest Browse all 10

Latest Images

Trending Articles





Latest Images