将现有git与现有SVN存储库同步

时间:2011-04-29 08:45:10

标签: svn git git-svn

好的,我弄得一团糟。我有一个带有我的代码的SVN存储库,我有一个本地git存储库,我通常在其中工作,分支等。我曾经使用git-svn不时地从git提交到SVN。现在我有了一台新计算机并将我的git存储库从一个克隆到另一个。之后我尝试使用git-svn,但由于新版本而且我不够小心,配置不知何故丢失了。所以我使用git svn initclone来恢复我在SVN中的历史记录,但现在情况如下:

o--Z--o--....--X--o--o....--o  (master)
   |
   o--o--o--....--X (remotes/git-svn)

X标志着两个存储库处于相同状态的状态(作为master和git-svn,在我的旧机器上同步)。现在,我想将从master的X到HEAD的所有内容提交到我的SVN存储库中,但是当我使用git svn dcommit -n时,它会显示回到Z的差异。我如何同步git-svn和git和svn再次(这样我可以简单地使用dcommit再次提交东西)?

是否可以返回X并使用git svn set-tree X(因为当前SVN完全保留该版本)并返回HEAD执行git svn dcommit?我不想(盲目地)在SVN上尝试一些东西,因为其中有很多东西(很多其他人),我不想搞砸。

1 个答案:

答案 0 :(得分:2)

git svn dcommit回顾您分支的历史记录,直到找到包含git-svn-id:行的提交消息,因此在您的情况下它将返回到Z,就像您一样观摩。我会尝试将您的master分支机构改为remotes/git-svn。我没有测试过这个,但以下是我会尝试的:

 # Make sure that you're on master
 git checkout master

 # Create a new branch here to save the old branch
 git branch old-master

 # Rebase everything after the X on master up to the tip of master
 # onto remotes/git-svn
 git rebase --onto remotes/git-svn <commit-ID-of-X-in-master> master

之后,您的历史应该如下:

o--Z--o--....--X--o--o....--o  (old-master)
   |
   o--o--o--....--X (remotes/git-svn) --o--o....-o (master)

... git svn dcommit应该按预期工作 - 但是,我首先尝试使用--dry-run,只是为了确定。