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.txt
和output-*.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.txt
或converter.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