1

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

到目前为止,我已经这样做了:
鉴于我已经git svn init --trunk=http://foo/project在 machine2 上重新指向 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只是挂起,没有任何反应。

我正在寻找一个重新指向颠覆主干的程序,以不断引入新的变化。我根本不打算重新使用 SVN。

有任何想法吗?

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

4

2 回答 2

2

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

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

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

现在你可以git svn fetch (git 将在第一次尝试时重建 rev 地图(也许 5 分钟))。

以上对我有用的分支 git repo 用于从 svn 中提取最新更新。

于 2012-12-04T16:39:07.043 回答
0

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

当您运行时(在 machine2 上)

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 将更新您的转速图。

于 2013-08-25T18:42:07.317 回答