如何从git-svn

时间:2015-10-09 08:12:31

标签: git svn git-svn

我正在使用git-svn来跟踪规范的subversion存储库。我的本地存储库有来自svn的提交,还有我正在同时工作的其他分支,它们在subversion资源库中不是

我的旧电脑坏了,所以我试图在我的新电脑上复制该设置。幸运的是,我将我的git存储库备份到服务器,我可以从中克隆以获取所有git提交(包括不属于SVN的那些)。但是,此树无法与git-svn交互,因为它没有正确的元数据。我也可以使用git-svn来初始化与SVN提交相匹配的/ new / git树,但是git-svn创建了一个与我的其他git提交都没有连接的重复树。这意味着我不能简单地使用新树,因为我将丢失所有不属于SVN的git提交。

简而言之,我的树看起来像这样:

A D A' |/ | B E B' |/ | C C'

其中ABC是我旧计算机上的git-svn提交,A' B' C'是git-svn在我的新计算机上创建的重复提交,DE是各种提交,只存在于旧计算机的git存储库中(它们不是SVN的一部分)。

如何对这些树进行重复数据删除,以便获得一个正确附加了额外提交的单个树,并且它将与svn存储库正确交互?

1 个答案:

答案 0 :(得分:1)

您有几个选择:

一种。 git-svn repo< - git repo

您可以将新计算机中的本地存储库作为远程添加到新创建的 git-svn 存储库中。从那里,您只需通过简单地获取它们就可以导入旧分支:

git-svn 回购你可以做到:

git remote add backup C:\path\to\local\repo
git fetch backup
git checkout -t backup/your-old-branch
git remote remove backup

自提交' SHA-1哈希在同一存储库的不同副本中是唯一的旧的本地分支仍应基于新初始化的 git-svn 存储库中的相同提交。

B中。 git repo< - git-svn repo

另一种解决方案是将 git-svn 元数据从旧计算机添加到本地存储库,然后从SVN服务器获取任何新提交。

本地回购你可以做到:

git svn init <svn-repo-url>
git update-ref refs/remotes/git-svn refs/heads/master
git checkout master
git svn rebase

第二个命令确保git-svn引用指向本地master分支的提示。然后,git svn rebase将从SVN存储库获取任何新提交并更新本地master分支。