Git 强制提交文件对
Git enforce commit of file pairs
在我的 git 存储库中,我有一个文件 workflow.vsd
代表在 Microsoft Visio 中创建的图表。
由于并非我们团队中的每个人都安装了 Visio,因此更改 workflow.vsd
的任何人也必须生成通讯器 workflow.png
。
问题是人们经常提交 vsd
文件的新版本而忘记提交 png
,导致图像过时。
有什么方法可以让 git 只有在 workflow.vsd
和 workflow.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
的脚本,正如依他普仑所建议的那样。
在我的 git 存储库中,我有一个文件 workflow.vsd
代表在 Microsoft Visio 中创建的图表。
由于并非我们团队中的每个人都安装了 Visio,因此更改 workflow.vsd
的任何人也必须生成通讯器 workflow.png
。
问题是人们经常提交 vsd
文件的新版本而忘记提交 png
,导致图像过时。
有什么方法可以让 git 只有在 workflow.vsd
和 workflow.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
的脚本,正如依他普仑所建议的那样。