提交后更改存储库中的文件

Changing files on repository after commit

我的存储库中有一个 history.txt 文件。我想用提交发生后(或之前?)自动生成的一些信息填充此 history.txt 文件。

我正在使用 TortoiseSVN,存储库位于 VisualSVN 服务器上。

我想使用 pre/post-commit 钩子,但我认为这不会像 SVNbook 所说的那样有效:

While hook scripts can do almost anything, there is one dimension in which hook script authors should show restraint: do not modify a commit transaction using hook scripts. While it might be tempting to use hook scripts to automatically correct errors, shortcomings, or policy violations present in the files being committed, doing so can cause problems. Subversion keeps client-side caches of certain bits of repository data, and if you change a commit transaction in this way, those caches become indetectably stale. This inconsistency can lead to surprising and unexpected behavior. Instead of modifying the transaction, you should simply validate the transaction in the pre-commit hook and reject the commit if it does not meet the desired requirements. As a bonus, your users will learn the value of careful, compliance-minded work habits.

有没有办法自动修改存储库中的文件? 或者您有其他建议吗?或者在客户端是否有类似脚本的东西,在提交之前进行更改?

感谢您的帮助!

您可以使用 Jenkins 等自动化工具来修改文件内容,例如在成功构建后提交。 具体来说,您可以使用 Jenkins Post 构建任务插件 (https://plugins.jenkins.io/postbuild-task/) or Post build script plugin (https://plugins.jenkins.io/postbuildscript/) 将 git 作为 shell 脚本执行。

您需要修改 client-side 上的文件,然后提交更改。您可以编写脚本并使用 SVN command-line 客户端命令。这是一个例子:

  1. 运行 svn checkout 命令从您的存储库中获取包含 history.txt 文件的工作副本。
  2. 编写并 运行 修改 history.txt 文件和 运行 的脚本 svn commit command. You also need to run svn update,然后再修改文件并提交。

PS 如果您的任务只是通过脚本自动更新一个文件,那么按照@driverzero 的建议部署 CI 或构建机器可能有点矫枉过正。