我正在评估git-svn并尝试确定它与特定svn存储库的效果.我主要关心的是让git-svn执行合并,以便在subversion repo中正确设置svn:mergeinfo属性.这可能吗?
这是我到目前为止所做的:
# Checkout the SVN repo. $ git svn clone svn://server/project1 -T trunk -b branches -t tags # Make sure we are working on trunk. $ git reset --hard remotes/trunk # Modify the working copy. $ vim file.txt # Commit locally to the git repo. $ git commit -a # Push the commits back to the SVN server. $ git svn dcommit Committing to svn://server/project1/trunk ... M file.txt Committed r178 M file.txt r178 = b6e4a3a0c28e7b9aa71d8058d96dcfe7c8a2b349 (trunk)
现在,我将如何将该特定提交合并到一个subversion分支中?同样,对我来说非常重要的是git在提交更改时正确设置了svn:mergeinfo属性.
尽管这是一个老问题,但自从被问到以来,git-svn的当前状况已经发生了变化.具体来说,在git 1.7.5中,当提交回svn时,对设置svn:mergeinfo的支持有限.
git svn dcommit
现在接受-mergeinfo=
国旗.引用1.7.5+手册页:
-mergeinfo = <合并信息>
在dcommit期间添加给定的合并信息(例如--mergeinfo ="/ branches/foo:1-10").所有svn服务器版本都可以存储此信息(作为属性),从1.5版开始的svn客户端可以使用它.git svn目前不使用它,也不会自动设置它.
但是在使用它时应该非常小心.即使手册页上写着"添加",它的真正含义是"替换".也就是说,svn:mergeinfo
属性是根据传递的内容设置的,它不会将指定的修订添加到已存在的属性中svn:mergeinfo
.从我的错误中学习......
看起来他们仍在努力进一步改善这一点.从git-svn 1.7.7开始,git-svn手册页中添加了以下文本:
config key:svn.pushmergeinfo
此选项将导致git-svn尝试在可能的情况下自动填充SVN存储库中的svn:mergeinfo属性.目前,这只能在提交非快进合并时才能完成,其中除第一个之外的所有父级已经被推入SVN.
简短回答:不,git-svn并不关心svn:mergeinfo属性,因为git-svn没有合并回svn(它正在进行提交).
答案很长:大多数人使用git-svn来摆脱大脑损坏的svn合并.svn的问题在于它不区分复制文件或文件夹(通常由重构引起)和创建分支,因为创建分支或标记是通过使用"svn copy"命令完成的.svn:mergeinfo属性是这个问题的创可贴,但仍然存在修改含糊不清的情况.Git对分支和合并有更强大的支持.
好像他们正在努力.在下一个版本中可能有可能:
http://git.kernel.org/?p=git/git.git;a=commit;h=6abd9332f97441a568421ba233ad8929b50a7efc