注意:此问题的灵感来自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 一段时间,我是否会陷入混乱?
答案 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
的缩写。