Git 强制提交文件对

Git enforce commit of file pairs

在我的 git 存储库中,我有一个文件 workflow.vsd 代表在 Microsoft Visio 中创建的图表。

由于并非我们团队中的每个人都安装了 Visio,因此更改 workflow.vsd 的任何人也必须生成通讯器 workflow.png

问题是人们经常提交 vsd 文件的新版本而忘记提交 png,导致图像过时。

有什么方法可以让 git 只有在 workflow.vsdworkflow.png 都添加到同一个提交哈希下时才允许提交?

换句话说,我只想提交 Visio 项目,并且仅当 png 也被提交时:

git add workflow.vsd worflow.png
git commit

这应该会失败:

git add workflow.vsd
git commit

我不建议使用该设置。不应要求用户将生成的内容放入版本控制中。在编程中,我们有构建工具可以自动从 »source files« 生成派生文件,例如 vsd.也许您可以查看 Makefiles 或 Maven 或您认为合适的任何构建工具(尽管我不知道是否有从 vsds 制作 png 的工具)。

如果您必须在版本控制中使用 png,另一种解决方法是 commit hook,在 »git 服务器« 或本地存储库上。不过,你还是需要一个可以自动生成png的工具。

如果您也没有该工具,您仍然可以编写一个提交挂钩,以编程方式检查两个文件是否已更改,并在必要时拒绝提交。

您需要查看提交挂钩 - Git 允许访问流程的多个点,其中之一是预提交,您可以在其中注入一些代码。

您将能够使用以下方式检查这些文件 git status -s | grep "workflow.vsd".

然后您也可以检查 png,如果不存在则失败,或者 运行 一个自动生成 png 的脚本,正如依他普仑所建议的那样。