我只需要将一些更改从一个分支应用到另一个分支。因为它们没有很好地分割为提交,我需要合并分支并手动还原那些不合适的分支。但是当我这样做时,我需要不记录mergeinfo,因为当我只提交部分合并时它们不再是真的。如何还原元数据更改并保留文本更改?
鉴于树中存在许多虚假的mergeinfos(在根目录中应该只有一个,但由于各种怪癖,错误和错误还有更多)不仅在目录上,而且甚至在也有文本更改的文件,我不能简单地只对目录进行非递归还原。
我想我总能写出像
这样的东西svn propset svn:mergeinfo "$(svn propget svn:mergeinfo "$file") "$file"
在状态中包含一个for循环它会变得相当复杂,所以我正在寻找更简单的东西。
基本上情况是这样的。我有分支general
和temporary
。对temporary
本来应该进行的general
进行了一些更改,但是与其他不应该进行的更改混在一起。所以我需要运行从temporary
到general
的合并,只选择我想要的更改并提交。但是,由于temporary
跟踪general
,我不能提交合并信息,因为如果我这样做,则返回将是预期的更改并将合并到temporary
。
答案 0 :(得分:1)
只需对svn:mergeinfo属性更改的目录运行svn revert
即可。不要使用-R
标志,这样它就不会递归,也不会删除其他更改。
在你的情况下,你正在应用一堆部分更改。这意味着mergeinfo可能最终会出现在很多单独的文件中。此案例的一种解决方法是使用svn diff
选择所需的更改,将其存储在文件中,然后使用该文件运行svn patch
。如果你不知道你想要哪些更改会造成一些负担,如果你正在合并树更改(不仅仅是文件或属性更改),那么diff和patch就不够好了。
如果您只是应用部分更改,为什么不让Subversion为您处理mergeinfo?删除mergeinfo的目的似乎是允许以后正确合并修订的其他部分。合并应该能够解决这个问题,如果这不是一个错误,应该报告。
如果没有这两个选项,您可能只需要手动编辑。也许你应该提出你的案例,并要求恢复接受一个选项,只适用于users@subversion.apache.org列表的属性。