2009-08-27 61 views
5

我正在編寫一個預先提交的鉤子,並且想要檢查每個即將提交的文件的全部內容(特別是對文件)。我想lint檢查文件,因爲它將被提交,而不是它存在於我的工作樹中(可能有所不同)。顯示完整的文件,因爲它們將存在於git索引

git附帶的pre-commit hook示例顯示如何獲取diff(以便您可以檢查空格等),但是我需要獲取整個文件,因爲它將要提交。

回答

9

試試這個:

git --work-tree=/path/to/checkout-area checkout-index path/to/file-to-checkout 

--work-tree選項告訴git的使用不同的區域作爲工件樹,這樣就不會覆蓋文件在你真正的工作樹。如果需要,您可能還想添加-f選項以告訴它被覆蓋,但是如果您的腳本自行清理完畢,則不需要。請參閱man page for checkout-index瞭解更多信息。

+0

是的,結帳索引只是我需要找到我需要找到的提示。謝謝! – 2009-08-27 19:02:09

6

單個 文件另​​一種解決方案是(假設你不衝突的合併過程中或衍合):

$ git show :0:path/to/file 

(其中path/to/file是相對於在存儲庫頂層目錄)。

或「git cat-file blob :0:path/to/file」,這(我認爲)不會調用任何過濾器(關鍵字擴展,行結束轉換等)。

看到有關部分延伸SHA-1語法git-rev-parse手冊頁


1)Jefromi's answer的優點是,使用git checkout-index你可以檢出多個文件;你可以簽出整個目錄甚至整個項目。

+0

雖然我會找到一個藉口來使用它,但這非常棒。 – Cascabel 2009-08-27 18:26:42

相關問題