从Subversion迁移到git,克隆所有分支并推送通过gitolite?

xre*_*ref 9 svn migration git

我一直在努力将我们的9个项目在一个SVN仓库中移动到9个独立的git repos,由gitolite在服务器上管理,然后关闭SVN.其中七个很容易,因为他们没有分支或标签所以在我的工作站上我能够做一个简单的事情:

git svn clone --stdlayout --no-metadata -A svnauthors.txt svn+ssh://user@host/var/subversion/project tempProject
Run Code Online (Sandbox Code Playgroud)

然后从我的工作站推送到gitolite服务器:

 git remote add origin ssh://gitolite@host/project
 git push -u origin master
Run Code Online (Sandbox Code Playgroud)

他们一直都很努力.现在最后两个项目更加困难,每个项目大约有30个标签/分支.在上面的其中一个项目中运行'git svn clone'后,我看到:

$ git branch -a
* master
  remotes/BatchUpload
  remotes/clarify_breadcrumb
  remotes/contact_type
  remotes/contact_upload_improvements
  remotes/file_cabinet
  remotes/mobile
  remotes/summary_tiles
  remotes/summary_updates
  remotes/tags/release-2.1.2
  remotes/tags/release-3.0.1
  remotes/tags/release-3.0.2
  remotes/tags/release-3.0.2c
  remotes/tags/release-3.1.1
  remotes/tags/release-3.1.3
  remotes/tags/release-3.1.4
  remotes/tags/release-3.1.5
  remotes/tags/release-3.1.5.UPDT
  remotes/tags/release-3.2
  remotes/tags/release-3.2.1
  remotes/tags/release-3.2.2.1
  remotes/tags/release-3.2.3
  remotes/tags/release-3.2.4
  remotes/tags/release-3.2.6
  remotes/tags/release-3.2.7
  remotes/tags/release-3.2.7.1
  remotes/trunk
  remotes/user_man_batch_upload
  remotes/user_management
Run Code Online (Sandbox Code Playgroud)

现在我如何将所有这些标签/分支下载到我的本地工作站,以便我可以通过gitolite推送它们并永久关闭SVN服务器?我需要在本指南中做些什么,为每个分支和标记执行'git checkout -b'?我应该使用svn2git或其他工具吗?

xre*_*ref 13

freenode irc #git中一位乐于助人的人给我写了一个命令,让我的标签和分支从SVN复制到Git:

推枝:

printf "git push origin "; git show-ref | grep refs/remotes | grep -v '@' | grep -v remotes/tags | perl -ne 'print "refs/remotes/$1:refs/heads/$1 " if m!refs/remotes/(.*)!'; echo
Run Code Online (Sandbox Code Playgroud)

运行打印输出的命令

推标签:

printf "git push origin "; git show-ref | grep refs/remotes/tags | grep -v '@' | perl -ne 'print "refs/remotes/tags/$1:refs/tags/$1 " if m!refs/remotes/tags/(.*)!'; echo
Run Code Online (Sandbox Code Playgroud)

运行打印输出的命令


zio*_*nyx 7

您可以列出从 svn 迁移到 git 时创建的所有远程引用:(git show-ref可从 git 1.8.2.2 获得)。然后决定将它们推到原点。

要将所有引用作为分支推送到原点:

git push origin refs/remotes/*:refs/heads/*
Run Code Online (Sandbox Code Playgroud)

将标签推送到原点:

git push origin refs/tags/*:refs/tags/*
-or-
git push origin --tags
Run Code Online (Sandbox Code Playgroud)

您可能需要清理这些分支,或者在推送之前/之后将某些分支转换为标签