Git的pre-commit钩子再生一个文件,并拒绝是否有差异列表

我的情况是提交(大致类似)如下:Git的pre-commit钩子再生一个文件,并拒绝是否有差异列表

我们的目录结构

my-repo/ 

input.txt

output-1.bin

output-2.bin

output-3.bin

converter.py

为了简单起见,让我们说,converter.py看起来像这样:

#/usr/bin/env python 

from shutil import copyfile

copyfile('input.txt', 'output-1.bin')

copyfile('input.txt', 'output-2.bin')

copyfile('input.txt', 'output-3.bin')

我们的版本控制input.txtoutput-*.bin。我知道,我知道,你会说没有理由对生成的文件进行版本控制......但在我们的案例中,这是不可协商的。我们使用.bin文件很多,他们是关键任务的,我们不能冒险在converter.py搞砸他们的微妙的错误。版本控制converter.py脚本输出可确保任何脚本更改的分支在git历史记录中都非常明显。

但是这会导致我们遇到问题。我们可以修改input.txt并提交该差异,而不用运行converter.py来更新.bins!

这是一个git pre-commit hook完美的工作。

我们可以通过git diff --cached --name-only --diff-filter=ACM获取更改文件的列表。如果该列表包含input.txtconverter.py,那么我们想要运行converter.py,然后将输出与提交的.bin文件进行比较。

所以,我有两个问题/问题:

  • 如何运行从pre-commit钩子内converter.py,没有任何重挫未提交更改的用户可能在他的本地结账?这基本上是How do I properly git stash/pop in pre-commit hooks to get a clean working tree for tests?

  • 哪有我那么,运行converter.py,问混帐“在工作树现在在那里任何未提交的diff?”我的意思是我希望答案只是git diff,但我不确定在执行前的提交钩子的含义。

原因这个问题是不平凡的是,converter.py变异,而不是仅仅吐痰其输出到标准输出工作树的状态。可悲的是,这也是这个问题的一个不可协商的公理。

想法?工作代码片段? :)

回答:

如何将脚本复制到临时位置,在那里运行并将结果与​​repo中的文件进行比较?

以上是 Git的pre-commit钩子再生一个文件,并拒绝是否有差异列表 的全部内容, 来源链接: utcz.com/qa/258093.html

回到顶部