2009-11-19 69 views
2

什么是最好的方式(如果有)修改一个特定的文件我们的仓库内post_commit 修改svn中的钩子脚本文件

如:我想校验行追加到somefile.conf文件

+0

好吧,也许post_commit钩子是不适合做这种修改的地方...但也许在pre_commit? – 2009-11-19 13:22:42

+0

@Carlo:预先提交肯定是错误的,因为您不得更改正在签入的文件。请参阅我的答案。 – sbi 2009-11-20 09:20:13

回答

2

不要在挂钩中完成此操作 - 在单独的更改中执行此操作,以便该分支的其他用户可以将其拖放到其工作副本中。它并不需要比这更复杂(在伪代码):

  • 脚本从信息库中的工作拷贝到本地目录
  • 脚本修改文件
  • 脚本承诺具有良好的提交信息文件“例如,‘foo脚本:添加校验和’

它的情况并不少见构建脚本(在cron下运行,或通过一个Makefile触发)的基础上的其他文件进行定期修订的库,例如再生文件有时这些。被检入到存储库中有时它们不是,取决于谁使用这些文件以及如何使用这些文件。

+0

这就是*我正在做的事情。问题在于何时更合适。在post_commit似乎是合理的原因,我不是“变形”的实际交易,只添加sometinhg后:)。 而且,是的,脚本应该在自己的回购工作副本上执行。 TNX – 2009-11-20 11:04:15

4

您可能需要阅读SVN书的this chapter。在它的尽头,有一个漂亮的红色方块以下警告:

虽然钩子脚本几乎可以做任何事情,有一个维度中,钩子脚本作者应该表现出克制:不修改提交事务使用钩子脚本。虽然使用钩子脚本自动纠正提交文件中存在的错误,缺陷或策略违规可能很诱人,但这样做可能会导致问题。 Subversion保留了某些数据库数据的客户端缓存,并且如果以这种方式更改提交事务,这些缓存将变得无法检测。这种不一致会导致令人惊讶和意外的行为。您不应该修改事务,而应该简单地在预提交挂钩中验证事务,并在它不符合所需要求时拒绝提交。作为奖励,您的用户将会学习到认真遵守法规的工作习惯的价值。

+0

谢谢,我读过它..但是我问(主要是我自己)是否可以实施一些工作 - 阿罗努。 这样一个post_commit钩子可以调用脚本: 1.在repo的工作副本上发出svn更新 2.相应地应用其更改(校验和等) 3.发出svn commit -m“校验加bla bla ...“ 你认为这是可行的/合适的吗? – 2009-11-19 13:35:38

+0

也许,我不知道。坦率地说,我会在SVN邮件列表中提问。 – sbi 2009-11-19 16:29:06

+0

你可以在post commit hook中做你所说的话,只要知道它会在repository中添加一个额外的修订版本,并且原来的committer也需要进行更新以获取更改。 – 2009-11-19 18:09:40

1

在post commit钩子中做你的建议没有问题,但要知道它会向存储库添加一个新的修订版本,并且原始提交者在看到更改之前需要进行更新剧本。 它还会在提交操作返回之前运行后提交速度变慢。