我想知道svnserve中使用的预提交钩子是否可以根据扩展列表“过滤”文件。我已经准备了类似于“%APPDATA%/subversion/config”中的全局忽略列表的列表,其中包含我自己添加的模式,例如用于 Quartus 和 Nios 项目的 *.cdf *.sof *.elf。我们的主要目标是通过在提交期间过滤掉不必要的文件来节省空间,即不被“ svn status ”显示
我在 Google 上进行了很多搜索,但找不到任何令人满意的解决方案。我目前拥有的一种方法是编写一个 windows 批处理文件来自动启用并用我自己的列表替换 subversion 客户端上的全局忽略列表。问题很明显:它只适用于单个客户端。如果我想在全局范围内强制执行此过滤,则使用存储库的每个客户端都必须执行我的批处理文件。更不用说不是每个人都使用windows平台。
我发现的下一个方法是递归地修改svn:ignore属性,以便可以全局忽略每个模式。同样,此方法需要客户端操作,并且维护起来并不简单——它仅适用于存储库中的当前目录。换句话说,如果我导入一个新目录,忽略列表将不适用于它。
我确实在 python 中编写了一个预提交钩子,但它仅检查日志消息的长度和正在提交的文件的大小。据我了解,预提交钩子不应该对事务进行任何修改,否则客户端的工作缓存将不一致且无法使用,这是可以理解的。钩子做了两件事:
如果任何检查因(退出 1)代码而失败,则拒绝提交
接受提交,以便事务成为存储库的修订版
如果需要过滤此事务中的任何文件,我最初的想法是拒绝提交。但是我的同事说,自己管理这么多文件会很乏味,而且他们不知道重建项目不需要哪些文件扩展名。
我仍然觉得必须有一种方法可以在不涉及客户端操作的情况下自动化过滤过程。我现在想到的是两个可能的预提交钩子:
拒绝提交,修改新添加的项目属性以忽略特定模式(如 svn:ignore)
接受提交,忽略不需要的文件事务,通知用户哪些文件已被忽略,设法使客户端的工作缓存与存储库保持一致。
我更喜欢选项 2,尽管它看起来比选项 1 困难得多
另外,请建议哪些文件应该放在 Quartus II 和 Nios 项目的特定版本下,即在签出这些文件后可以立即重建整个项目。我目前的列表是: .vhd .v .qpf .qsf .bsf