互聯網絕對存在着對此問題的不正確和非理想答案。這很不幸,因爲你會認爲這是你想做的事。測試預先提交的內容中的內容
問題:當pre-commit
鉤子運行時,存儲庫可能不乾淨。所以如果你天真地運行你的測試,他們不會反對你所做的事情,但不管你的工作樹中有什麼污垢。
顯而易見的事情是在pre-commit
和git pop
的出口處開始時的git stash --keep-index --include-untracked
。這樣,你正在測試(純)索引,這是我們想要的。
不幸的是,如果您使用git add --patch
(尤其是如果您編輯區塊),則會生成合並衝突標記,因爲[email protected]{0}
的內容可能與提交後的工作樹不匹配。
另一個常見的解決方案是克隆存儲庫並在新的臨時文件中運行測試。這有兩個問題:一個是我們還沒有完成任務,所以我們不能輕易地在我們即將提交的狀態下獲取存儲庫的副本(我確信有一種方法可以做到這一點,但我不感興趣,因爲:)。其次,我的測試可能對當前工作目錄的位置很敏感。例如由於本地環境配置。
所以:如何在不引入合併衝突標記的情況下將工作樹恢復到git stash --keep-index --include-untracked
之前的狀態,並且不需要修改提交後的HEAD
?
預commit腳本接收數據被提交作爲輸入。你爲什麼需要看別的東西?也許你試圖做的事情最好在除了預先提交鉤子以外的其他事情上完成。你想做什麼樣的測試需要訪問完整的存儲庫? –
@WilliamPursell:「承諾的數據」是什麼意思?預提交腳本在我的工作樹中運行(即源存儲庫的基礎)。問題是,如果您對存儲庫進行了一些更改並僅對其中的一部分進行了更改(例如,添加了一些文件但不添加其他文件),那麼在發生提前(我想要執行的操作)之前,您不會對提交進行測試,你會測試你工作目錄中的任何東西。 – pwaller
你正在提交的補丁在標準輸入提供給pre-commit鉤子。如果不是正在提交的補丁程序,你在測試什麼?預提交鉤的目的是驗證補丁。 –