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

10 浏览
0 Comments

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

我一直在努力将我们的9个项目从一个SVN仓库迁移到9个单独的git仓库,并通过gitolite在服务器上管理,然后关闭SVN。其中7个项目很容易,因为它们没有分支或标签,所以我在我的工作站上可以简单地执行以下操作:

git svn clone --stdlayout --no-metadata -A svnauthors.txt svn+ssh://user@host/var/subversion/project tempProject

然后通过以下方式从我的工作站推送到gitolite服务器:

 git remote add origin ssh://gitolite@host/project
 git push -u origin master

它们都运行得很好。现在最后两个项目比较困难,每个项目大约有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

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

0
0 Comments

原因:在迁移从Subversion到Git的过程中,可能会出现无法将所有分支克隆并通过gitolite推送的问题。在经过克隆操作后,出现了无法将分支和标签推送到远程服务器的情况。

解决方法:首先,通过运行"git branch -a"命令来查看本地仓库中的信息,这些信息是在克隆操作时获取的,而不需要从远程仓库获取数据。然后,通过运行"git push --tags"命令将所有标签推送到远程服务器。对于每个分支,可以使用"git push origin remotes/BatchUpload:BatchUpload"命令将其推送到仓库。如果运行"git push --tags"命令或者"git push origin remotes/*:refs/heads/*"命令后,没有输出并且显示"Everything up to date",则可能需要手动或使用脚本将其转换为标签。可以通过运行"git checkout remotes/tags/xyz; git tag xyz;"命令来将其转换为标签,其中xyz是.git/remotes/tags文件夹中的文件名。对于分支引用,可以通过运行"git checkout -b xyz remotes/xyz"命令将其转换为分支,然后运行"git push origin xyz"命令将其推送到远程仓库。完成后,可以删除相应的文件。

0
0 Comments

问题的出现原因:用户想要将Subversion迁移到git,并且想要克隆所有的分支并通过gitolite进行推送。然而,用户发现没有现成的git命令可以实现这个目标,或者使用git push --all命令推送git svn分支时失败。

解决方法:通过以下命令将分支和标签从SVN复制到Git并进行推送:

1. 推送分支:

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

运行上述命令,它会打印出推送命令。

2. 推送标签:

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

运行上述命令,它会打印出推送命令。

3. 通过在命令的末尾和开头添加`(反引号),命令将直接运行而不是打印。

0
0 Comments

问题的出现原因:由于需要从Subversion迁移到git,并且需要克隆所有分支并通过gitolite推送,因此需要找到相应的命令来完成这个过程。

解决方法:可以使用以下命令来列出迁移过程中创建的所有远程引用:git show-ref(从git 1.8.2.2版本开始可用)。然后决定将它们推送到origin。

将所有引用作为分支推送到origin:

git push origin refs/remotes/*:refs/heads/*

将标签推送到origin:

git push origin refs/tags/*:refs/tags/*

或者

git push origin --tags

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

文章如下:

从Subversion迁移到git,克隆所有分支并通过gitolite推送的解决方法如下。

你可以使用以下命令来列出迁移过程中创建的所有远程引用:git show-ref(从git 1.8.2.2版本开始可用)。然后决定将它们推送到origin。

将所有引用作为分支推送到origin:

git push origin refs/remotes/*:refs/heads/*

将标签推送到origin:

git push origin refs/tags/*:refs/tags/*

或者

git push origin --tags

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

0