Sha*_*hin 12 svn svn-merge pre-commit-hook svnlook svn-merge-reintegrate
在预提交脚本中,是否有可能(如果是,如何)识别源自svn merge?的提交?
svnlook changed ... 显示已更改的文件,但不区分合并和手动编辑.
理想情况下,我还想区分标准merge和merge --reintegrate.
我正在探索使用预提交挂钩来为我们的项目强制执行SVN使用策略的可能性.
其中一个策略声明某些目录(例如/trunk)不应直接修改,只能通过功能分支的重新集成进行更改.因此,预提交脚本将拒绝除分支重新集成之外对这些目录所做的所有更改.
有任何想法吗?
我已经探索过这个svnlook命令,而我最接近的就是检测并解析svn:mergeinfo对目录属性的更改.这种方法有一些缺点:
svnlook可以标记属性的更改,但不会更改哪个属性.(需要使用proplist前一版本的差异)svn:mergeinfo,可以检测svn merge已运行的更改.但是,无法确定提交是否纯粹是合并的结果.合并后手动进行的更改将不会被检测到.(相关帖子:针对另一个路径/修订版的Diff事务树)我最终采用了一个非理想的解决方案,即检测svn:mergeinfo更改树顶部目录中的属性更改(在 中实现SVNTransaction.is_merge_operation())。
我们无法区分仅合并提交和还包含其他更改的提交。这意味着如果与合并一起提交,该树下发生的所有更改都将不会被检测到。一个可能的解决方案可能是将事务树与合并源进行比较,但我还没有弄清楚如何实现这一点(这还需要考虑冲突解决所导致的变化)。
它也无法区分 amerge和 a merge --reintegrate。
svn:mergeinfo其他限制包括对用户可修改的依赖以及旧版本的 subversion 中未使用的依赖。
所讨论的提交脚本旨在温柔地提醒您标记违反项目指南而不是访问控制机制的提交,因此上面列出的限制并不是一个阻碍。然而,我仍在寻找改进。欢迎提出意见和进一步建议。