好的,我弄得一团糟。我有一个带有我的代码的SVN存储库,我有一个本地git存储库,我通常在其中工作,分支等。我曾经使用git-svn不时地从git提交到SVN。现在我有了一台新计算机并将我的git存储库从一个克隆到另一个。之后我尝试使用git-svn,但由于新版本而且我不够小心,配置不知何故丢失了。所以我使用git svn init
和clone
来恢复我在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上尝试一些东西,因为其中有很多东西(很多其他人),我不想搞砸。
答案 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
,只是为了确定。