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

在钩子脚本中修改svn下的文件,svn,Svn,在post_commit钩子中修改存储库下特定文件的最佳方式(如果有的话)是什么 例如:我想在somefile.conf文件中附加一个校验和行,您可能想阅读SVN书籍。最后,在一个漂亮的红色框中有以下警告: 虽然钩子脚本几乎可以做任何事情,但钩子脚本的作者应该在一个方面表现出克制:不要使用钩子脚本修改提交事务。虽然使用钩子脚本来自动更正提交文件中存在的错误、缺点或违反策略的行为可能很诱人,但这样做可能会导致问题。Subversion保留存储库数据某些位的客户端缓存,如果您以这种方式更改提交事务,

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

例如:我想在somefile.conf文件中附加一个校验和行

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

虽然钩子脚本几乎可以做任何事情,但钩子脚本的作者应该在一个方面表现出克制:不要使用钩子脚本修改提交事务。虽然使用钩子脚本来自动更正提交文件中存在的错误、缺点或违反策略的行为可能很诱人,但这样做可能会导致问题。Subversion保留存储库数据某些位的客户端缓存,如果您以这种方式更改提交事务,这些缓存将无法检测到过时。这种不一致性会导致意外的行为。您不应该修改事务,而应该在预提交钩子中验证事务,如果它不满足所需的要求,则拒绝提交。作为奖励,您的用户将了解到谨慎、合规的工作习惯的价值

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

  • 脚本将工作副本从存储库获取到本地目录
  • 脚本修改文件
  • 脚本提交文件时会显示一条良好的提交消息“例如“script Foo:adding checksum”

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

在提交后挂钩中执行您建议的操作没有问题,但请注意,它会将新修订添加到存储库中e存储库,并且原始提交者需要进行更新才能看到脚本所做的更改。
它还将减慢提交速度,因为在从提交操作返回之前,后提交将运行。

好的,可能后提交挂钩不适合进行此类修改……但可能在预提交中?@Carlo:pre-commit肯定是错误的,因为您不能更改正在签入的文件。请参阅我的答案。谢谢,我很抱歉我已经读过了。但是我问(主要是我自己)我是否可以实现一些解决方法。例如,一个post_commit钩子可以调用一个脚本:1.在repo的工作副本上发布一个svn更新2.相应地应用它的更改(校验和等等)3.发布一个svn commit-m“checksum added bla bla。。。“你认为这可行/合适吗?也许,我不知道。坦白地说,我会在SVN邮件列表中问这个问题。你可以在提交后钩子中执行你所说的操作,只是要知道这将向存储库添加一个附加修订,并且原始提交者还需要进行更新以获得更改。这正是我正在做的。问题是“何时”更合适。在post_commit中,这似乎是合理的,因为我没有“变形”实际事务,只是在后面添加了一些内容:)。而且,是的,该脚本应该根据自己的回购协议工作副本行事。TNX