2013-01-10 85 views
3

我實現了一個git-hook來通過pyflakes和jshint掃描我的提交,並且在閱讀Yipit對why most pre-commit hooks are broken的評論之後,我選擇了實現他的git stashgit stash pop建議。有沒有辦法阻止「git stash pop」將文件標記爲已修改?

不幸的是,git stash pop將這些文件標記爲「已修改」,這會導致我的IDE在我回到「在磁盤上修改,從磁盤重新讀取?」頁面時發出警告。然後它會問「你確定要編輯這個緩衝區嗎?」最後是「你確定要將這個緩衝區保存在修改後的文件中嗎?」

我欣賞它試圖爲我做的一切,但它問我關於功能上不存在的「變化」。

缺少玩怪異猜謎遊戲touch有沒有辦法阻止git stash pop標記所有觸摸的文件被更改?

回答

0

我不這麼認爲(時間戳被改變,例如在「GIT: Adding Local Changes to Non-Current Branch」中提到)。

最簡單的方法是將IDE配置爲自動刷新。

對於Eclipse,例如,這將是設置"Refresh on Access"


另一種方法是讓另一個本地回購(一個地方有沒有過局部修改,所以沒有必要藏)。
您的預提交鉤子仍保留在當前的倉庫中。

您的掛鉤將使用您當前的索引(您添加的內容),但其他工作樹回購。
對於這一點,你需要與承諾:

git commit --work-tree=/path/to/other/local/repo -m "my commit message" 

如果鉤子沒有失敗,你可以有一個後提交(在當前的回購還是個)的鉤去其他回購,拉當前分支,更新其(原始)工作樹。

cd /path/to/other/local/repo 
git --work-tree=/path/to/other/local/repo --git-dir=/path/to/other/local/repo/.git pull 

(請注意你的鉤子,它生活在你的第一個回購協議,需要如何指定work-tree和第二回購git-dir,爲了正常工作)。
這是一個簡化的建議,因爲它沒有考慮到你正在工作的當前分支(它只假定一個分支的主分支)。
但你可以detect the branch並從那裏調整鉤子(具有正確的結賬並切換到右分支)。

第二次回購更新其工作樹(通過第一次回購後的提交鉤子)之後,該第二回購已準備好作爲原始工作樹,您的預提交鉤子(您的第一個和當前的回購)可以安全地運行。

+0

給自己的提示:這是我在Stack Overflow(在52個月)的第7000個答案**,在[6000th answer](http://stackoverflow.com/a/11644343/6309)後的6個月。在此之前[第5000個答案](http://stackoverflow.com/a/7917396/6309),[第4000個答案](http://stackoverflow.com/a/4953561/6309),[第3000個答案](http:///stackoverflow.com/a/3074849/6309),[2000th答案](http://stackoverflow.com/a/2027976/6309)和[第1000個答案](http://stackoverflow.com/a/665252/ 6309)。 – VonC

0

你確定這些改變是不存在的嗎?如果文件顯示爲已修改,則某些內容已更改,即使它是空白或文件的權限(可執行狀態)。 您可以使用git diff查看更改。您還可以使用git commit -av命令查看更改(-v標誌將顯示提交的差異)。

您的IDE將保持文件的當前「緩衝」狀態。如果該文件在磁盤上更改(其中git stash pop|apply將執行此操作),則IDE將識別該文件,除非您已將其設置爲自動刷新文件(通常在IDE設置/首選項中),否則它可能會提示您是否要保存當前緩衝區作爲一個新文件 - 當使用git時通常不需要這個文件),或者用改變後的文件狀態重新加載緩衝區。

相關問題