如何将分支添加到.git / config?

时间:2012-03-01 12:20:12

标签: git svn git-svn

注意:此问题的灵感来自git-svn branching问题和 NOT 重复!

当我查看我们的svn-repo时没有做任何特别的事情我得到了以下 .git / config 文件:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    autocrlf = false
[svn-remote "svn"]
    url = svn+ssh://my_server/opt/subversion/main/trunk
    fetch = :refs/remotes/git-svn
[color]
    ui = true

当我尝试使用 git svn branch 时,我收到消息:

Unknown branch destination

原因是 .git / config 中缺少分支。我想让分支进入与主干平行的目录。例如,应该在此路径中找到名为 foo 的分支:

svn+ssh://my_server/opt/subversion/main/branches/foo

如果我在git中使用 git checkout -b foo 在一个单独的分支中工作,那么我想在subversion中使用以下命令创建分支:

git svn branch foo

如何更新 .git / config 以使其正常工作?我期待 git svn branch foo 中的以下消息:

Copying svn+ssh://my_server/opt/subversion/main/trunk at r8507 to svn+ssh://my_server/opt/subversion/main/branches/foo...

修改 如果我将svn-remote部分更新为:

,该怎么办?
[svn-remote "svn"]
    url = svn+ssh://my_server/opt/subversion/main
    fetch = trunk:refs/remotes/git-svn
    branches = branches/*:refs/remotes/branches/*

当我尝试执行 git svn rebase git svn branch 时,看起来它是正确的做法并且似乎正在工作。这是一个有效的解决方案,或者如果我使用这个新的 config 一段时间,我是否会陷入混乱?

1 个答案:

答案 0 :(得分:3)

您遇到了问题,因为您的svn-remote.svn.url不是存储库的根,并且必须获取多个分支。你可以改变它并运行fetch,但我不确定git-svn是否可以使用它已经拥有的数据。在任何情况下都不会比重新克隆更糟糕。

您的配置必须如此。克隆时,您可以使用-t trunk选项。

[svn-remote "svn"]
    url = svn+ssh://my_server/opt/subversion/main
    fetch = trunk:refs/remotes/trunk

默认情况下,trunk会直接转到遥控器,但你可以在它们之间插入一些名称,如果你还有其他遥控器则更干净。我通常有refs/remotes/svn/trunk

如果您提供了-b选项,那么您还可以

    branches = branches/*:refs/remotes/branches/*

但如果没有,您可以随时手动添加。这就是您需要能够导入分支和创建分支。

最后-T选项会添加

    tags = tags/*:refs/remotes/tags/*

您可以稍后再次添加。但请注意,svn标签不会像git标签那样运行,它们仍然会表现为分支。

为方便起见,克隆的-s选项是-t trunk -b branches -T tags的缩写。