Git强制提交文件对

Git强制提交文件对,git,githooks,git-commit,Git,Githooks,Git Commit,在我的git存储库中,我有一个文件workflow.vsd,它表示在Microsoft Visio中创建的图表 由于我们团队中并非每个人都安装了Visio,因此任何更改workflow.vsd的人都必须生成相应的workflow.png 问题是,人们经常提交新版本的vsd文件,而忘记提交png,从而使图像过时 只有当workflow.vsd和workflow.png都添加到同一个提交哈希下时,git才允许提交吗 换句话说,我只想提交Visio项目,并且仅在提交png时: git add work

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

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

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

只有当
workflow.vsd
workflow.png
都添加到同一个提交哈希下时,git才允许提交吗

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

git add workflow.vsd worflow.png
git commit
这应该失败:

git add workflow.vsd
git commit

我建议不要这样设置。用户不应该被要求将生成的内容放入版本控制中。在编程中,我们有构建工具来自动从»源文件«生成派生文件,如vsd。也许你可以研究Makefiles或Maven或任何你认为合适的构建工具(尽管我不知道是否有工具可以从VSD生成PNG)

如果必须在版本控制中使用png,另一种方法是在»git server«或本地存储库中使用png。尽管如此,您仍然需要一个能够自动生成PNG的工具


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

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

您将能够使用以下内容检查这些文件:
git status-s | grep“workflow.vsd”


然后,您还可以检查
png
,如果它不存在则失败,或者按照escitalopram的建议运行一个脚本,自动生成
png

您可以使用预提交挂钩来检查提交是否符合您的规则,但每个人都必须安装自己的预提交挂钩。如果您有一个可以安装钩子的中央服务器,那么您可以设置一个预接收钩子来拒绝不符合您的规则的推送。如果使用拉动工作流,则可以拒绝与规则不匹配的拉动请求。我同意你的观点,因为我通常使用构建工具来生成这样的文件。但在这种情况下,高层管理层却做出了相反的决定,因为他们中的一些人仍然拥有旧版本的Office(没有Visio),并且希望在单击bitbucket链接时能够方便地直接在浏览器上查看流。