在钩子脚本中修改svn下的文件

时间:2009-11-19 13:06:03

标签: svn

在post_commit hook 中修改我们的存储库下的特定文件的最佳方式是什么(如果有的话)?

例如:我想将校验和行附加到somefile.conf文件

3 个答案:

答案 0 :(得分:4)

您可能需要阅读SVN书籍的this chapter。最后,在一个漂亮的红色框中有以下警告:

  

虽然钩子脚本几乎可以做任何事情,但钩子脚本作者应该有一个维度显示约束:不要使用钩子脚本修改提交事务。虽然使用钩子脚本来自动纠正提交的文件中存在的错误,缺陷或策略违规可能很诱人,但这样做可能会导致问题。 Subversion保留了某些存储库数据的客户端缓存,如果以这种方式更改提交事务,那些缓存将变得不可思议地过时。这种不一致可能导致意外和意外的行为。您应该只是在预提交挂钩中验证事务,而不是修改事务,如果它不符合所需要求,则拒绝提交。作为奖励,您的用户将学习细心,合规的工作习惯的价值。

答案 1 :(得分:2)

不要在钩子中执行此操作 - 在单独的更改中执行此操作,然后该分支的其他用户可以下载到其工作副本中。它不需要比这更复杂(在伪代码中):

  • 脚本从存储库获取工作副本到本地目录
  • 脚本修改文件
  • 脚本提交带有良好提交消息的文件“例如”脚本Foo:添加校验和“

构建脚本(在cron下运行或由Makefile触发)对存储库进行定期修订并不罕见,例如基于其他文件重新生成文件。有时会将这些内容检入存储库,有时则不会,这取决于谁使用这些文件以及如何使用这些文件。

答案 2 :(得分:1)

在post post钩子中做你的建议是没有问题的,但要注意它会向存储库添加一个新的修订版本,并且原始提交者需要先做更新才能看到脚本的更改制作。 在提交操作返回之前,它也会减慢提交速度。