我已成功使用
git svn
从非常旧的 svn 服务器获取项目。git svn info
的输出显示:
master
指向https://svn-server/repos/myProject
。feature-new
指向https://svn-server/repos/branches/myProject
。feature-new
合并到 master
会更改映射,导致 master
指向 https://svn-server/repos/myProject/myProject/myBranch
。我该如何解决这个问题?
SVN 存储库:
git svn init https://svn-server/repos --trunk=myProject --branches=branches/{myProject} myProject
git config svn.authorsfile ~/authors.txt
.git/config
的内容:[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[svn-remote "svn"]
url = https://svn-server/repos/myProject
fetch = myProject:refs/remotes/git-svn/trunk
branches = branches/{myProject}/*:refs/remotes/feature-new/*
[svn]
authorsfile = ~/authors.txt
git svn fetch
git branch -r
结果:
feature-new/myProject
git-svn/trunk
feature-new/myProject
并重命名:git checkout feature-new/myProject
git switch -c feature-new
我真的不能推荐这个,但是我也不能真的推荐使用古老的 SVN 存储库!
将整个分支 diff 为补丁并应用它
git svn fetch
git checkout feature
git diff master > ../feature.patch
git checkout - # back to master
git apply ../feature.patch
我没有测试实例,但是你可以通过将 git log 嵌入到提交消息中来使发生的事情更加明显,这有一个相当高的限制SVN 注释的最大长度
最后,尽管这对于您的情况可能不可行,但将项目转换为 git 或 Mercurial 可能是可持续发展的最佳举措