如何继续从最初没有指向svn的git克隆中提取subversion

时间:2012-12-03 16:19:02

标签: git git-svn

鉴于我已经通过使用git svn clone --trunk=http://foo/project指向svn在machine1上创建了一个git repo 我一直在使用'git svn rebase'的机器1上的svn进行新的修改 当我将git repo从machine1克隆到machine2时 我如何在机器2上重新命名svn我的git repo ???

到目前为止,我已经这样做了:
鉴于我已经在机器2上使用git svn init --trunk=http://foo/project重新命名为svn 当我做'git svn rebase'时 然后没有任何反应,提示只是挂起。

当我做'git svn fetch'时 然后git想要重新导入所有的svn版本,好像它是全新的,这花了我2个小时,但在那之后git svn rebase工作正常。

当我执行'git svn fetch -r XXX',其中XXX是上次提交中可见的最后一个svn修订版ID,然后我从svn获取了一些文件,但之后git svn rebase只是挂起而没有任何反应。

我正在寻找一个程序来重新命名一个subversion trunk以继续进行新的更改。我根本不打算回到SVN。

有什么想法吗?

我的环境设置:
git-svn version 1.7.9.5(svn 1.6.17)
git版本1.7.9.5
关于linux mint 13

2 个答案:

答案 0 :(得分:2)

机器2上的

git svn init --trunk=http://foo/project 准备从Subversion获取?
还没。我们需要git commit和svn revision之间关系的元数据。 找出具有svn修订版git showgit log -1

的最后一次提交SHA1

将SHA1写入.git/refs/remotes/trunk

echo <SHA1> > .git/refs/remotes/trunk

现在你可以git svn fetch(git会在第一次尝试时重建rev map(可能是5分钟))。

上面的代码git repo用于从svn获取最新的更新。

答案 1 :(得分:0)

您可以设置本地存储库以使svn和远程知道它们指向相同的提交。

当你跑步(在机器2上)

git svn init --trunk=http://foo/project

svn不知道它所指向的存储库与从machine1中提取的存储库相同。

要让git svn知道这种情况,您可以使用前缀:

git svn init --prefix=origin/ --trunk=http://foo/project

(如果要使用分支,则尾部斜杠很重要)

如果您已经运行了第一个init命令,则可以通过编辑.git / config文件来获得相同的结果:

[svn-remote "svn"]
    fetch = http://foo/project:refs/remotes/origin/trunk

请注意中继前的来源/ 。如果您不想手动编辑文件,可以运行:

git config --replace svn-remote.svn.fetch http://foo/project:refs/remotes/origin/trunk

将为您插入该行。

执行此操作后,您应该可以运行git svn fetch并且git会更新您的转换地图。