簡體   English   中英

Git預提交鈎子以重新生成文件並在存在差異時拒絕提交

[英]Git pre-commit hook to regenerate a file and reject the commit if there are diffs

我的情況是(大致類似於)以下情況:

我們有目錄結構

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並提交該diff,而無需運行converter.py來更新.bins!

對於git pre-commit鈎子,這是一項完美的工作。

我們可以通過git diff --cached --name-only --diff-filter=ACM獲得更改文件的列表。 如果該列表包括input.txtconverter.py ,那么我們要運行converter.py ,然后將輸出與提交的.bin文件進行比較。

所以我有兩個問題/問題:

這個問題之所以很重要,是因為converter.py改變了工作樹的狀態,而不是僅僅將其輸出分散到stdout。 令人遺憾的是,這也是該問題的不可談判的公理。

思考? 工作代碼段? :)

如何將腳本復制到臨時位置,然后在其中運行並將結果與​​回購中的文件進行比較?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM