Git强制提交文件对

时间:2016-10-07 08:29:09

标签: git githooks git-commit

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

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

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

只有在同一提交哈希下添加workflow.vsdworkflow.png时,git是否有某种方式允许提交?

换句话说,我只想提交Visio项目,并且只有在提交png时才提交:

git add workflow.vsd worflow.png
git commit

这应该会失败:

git add workflow.vsd
git commit

2 个答案:

答案 0 :(得分:2)

你想要查看提交钩子--Git允许访问进程的几个点,其中一个点是预先提交的,你可以在其中注入一些代码。

您将能够检查那些带有某些内容的文件 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <body> <ul id="primary-menu"> <li class="menu-item-has-children"> <a href="http://example.org">Click me</a> </li> </ul> </body>

然后你也可以检查git status -s | grep "workflow.vsd"并在它不存在时失败,或者运行一个自动生成png的脚本,如escitalopram建议的那样。

答案 1 :(得分:1)

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

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

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