簡體   English   中英

使用 git pre-commit hook 檢查 repo 的最終狀態?

[英]Use git pre-commit hook to inspect the eventual state of the repo?

假設我有一個帶有pre-commit鈎子的 git repo,我編輯了一堆文件,但我只提交了其中的一些。 或者我(錯誤地)在上次向提交中添加了一些文件后進行了進一步的編輯。 但是它發生了,我對不在索引中的文件進行了編輯,因此它們可以被鈎子看到,但不會成為提交的一部分。 如果其他人要檢查那個提交,鈎子就會失敗。

有一種簡單的方法來得到一個目錄的比賽會是什么后提交狀態(即我會得到,如果是做一個新的克隆,從提交我期待創造),這樣的掛鈎可以測試,而不是工作目錄?


我可以通過以下方式一起破解一些東西:

OLDR=$PWD
NEWR=$(mktemp -d -t hook-XXXXXXXXXX)
HEAD=$(git rev-parse HEAD)
INDEX=$(mktemp -t hook-XXXXXXXXXX.patch)
git diff --staged > $INDEX

cd $NEWR
git clone $OLDR $NEWR
git checkout $HEAD
git apply $INDEX

...

但這似乎......不僅僅是一個黑客,我不確定我可以相信它跨版本和操作系統工作的可靠性。

您需要做的是提取 Git 索引的內容,如果設置了$GIT_INDEX_FILE變量定義,否則為默認索引。

序列:

dir=$(mktemp -d)
git checkout-index --prefix=${dir}/ -a

將做到這一點,填充新的臨時目錄。 (當然,此片段不會自行清理,並且您省略了-t模板;這只是一個最小的演示。)

不幸的是,這種簡單的方法通常是不夠的,因為您通常還需要任何未跟蹤的文件。 使這一切工作得很好是相當困難的。

這里描述一個名為pre-commit的相當奇特的程序,它試圖處理所有事情。 我沒有實際使用過它。

暫無
暫無

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

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