当前位置:  开发笔记 > 运维 > 正文

git-svn可以正确填充svn:mergeinfo属性吗?

如何解决《git-svn可以正确填充svn:mergeinfo属性吗?》经验,为你挑选了3个好方法。

我正在评估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属性.



1> Paul Wagland..:

尽管这是一个老问题,但自从被问到以来,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.


svn.pushmergeinfo确实是一个天赐之物,因为它允许在Git中进行几乎无痛的合并然后再回到SVN.但是,在当前版本(1.7.8)中,使用Git将SVN分支重新集成回主干时会出现错误.请在此处查看我的问题:http://stackoverflow.com/questions/9700998/git-svn-with-svn-pushmergeinfo-how-to-avoid-self-referencing-mergeinfo-lines

2> Mike Hopper..:

简短回答:不,git-svn并不关心svn:mergeinfo属性,因为git-svn没有合并回svn(它正在进行提交).

答案很长:大多数人使用git-svn来摆脱大脑损坏的svn合并.svn的问题在于它不区分复制文件或文件夹(通常由重构引起)和创建分支,因为创建分支或标记是通过使用"svn copy"命令完成的.svn:mergeinfo属性是这个问题的创可贴,但仍然存在修改含糊不清的情况.Git对分支和合并有更强大的支持.


对于最新版本的SVN(1.5+),长答案是不准确的.SVN _does_完全通过`svn:mergeinfo`属性来区分重构和分支.有些边缘情况可能无法正常工作,但这并不是无法支持基本分支/合并的原因.
这个答案不再100%正确...请参阅下面的答案.
就像我说的那样,svn:mergeinfo是一个创可贴.Svn在分支领域总是很弱,直到它有一个专门的"分支"命令.我在使用SVN 1.5时经历了无数个小时,并且在合并来自多个分支的数百个文件的更改时不得不手动删除bogus mergeinfo属性数据.SVN在其元数据中没有足够的信息来做出正确的决定.通常,即使没有冲突,我们也会遇到合并冲突.Git更容易,更强大!

3> Marius K..:

好像他们正在努力.在下一个版本中可能有可能:

http://git.kernel.org/?p=git​​/git.git;a=commit;h=6abd9332f97441a568421ba233ad8929b50a7efc

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有