2013-08-23 64 views
2

在回答了previous question之後,我實現了一個Git鉤子腳本,只要更新工作目錄就需要啓動它。我掛這個腳本中的.git /掛鉤以下:結賬後更新工作目錄的任何操作的Git鉤子

  • 後提交
  • 後合併

這主要工作,但並非總是如此。我發現的一個案例是git stash。這是一個問題,因爲我的鉤子生成一個文本文件,我也用git update-index --assume-unchanged標記告訴Git,我不想檢查更改(檢入一個空的版本)。但是,git stash將恢復假定不變的文件(到空文件),這意味着該鉤子需要再次運行,但該鉤子在git stash之後不會被調用。

我懷疑類似的問題也可能存在git rebase,但這並不容易解釋。

我想要一個鉤子,Git將總是更新工作目錄後運行。這可能嗎?

+1

你試過一個['git update-index --skip-worktree'](http://stackoverflow.com/a/13631525/6309),看看這個文件是否也受git存儲的影響? – VonC

+0

我對'--skip-worktree'不知道。現在我已經嘗試過了,它似乎做了我想要的。如果您將其添加到您的答案中,我會接受它。 –

+0

答覆已更新。 – VonC

回答

1

不確定關於git stash pop(我在「Is there a way with to prevent 「git stash pop」 from marking files as modified?」中提供了一些備選方案)。

git update-index帶有另一個選項--skip-worktree,這可能會避免git隱藏問題。
請參閱 「Git - Difference Between 'assume-unchanged' and 'skip-worktree'


git rebase,你可能會感興趣的post-rewrite hook

該鉤子是重寫的提交(git commit --amendgit-rebase命令調用;目前git-filter-branch做不叫它!)。
它的第一個參數表示它被調用的命令:目前是修改或變更的命令之一。更多的依賴於命令的參數可能會在未來傳遞。

鉤接收改寫的列表提交在stdin,格式

<old-sha1> SP <new-sha1> [ SP <extra-info> ] LF 

extra-info是再次命令依賴性的。如果它是空的,則前面的SP也被省略。目前,沒有命令傳遞任何額外的信息。

+0

我試過後重寫,它並沒有解決'git stash'問題(請注意,即使'git stash'是一個問題,不僅是'git stash pop')。所以,感謝提示,稍後我可能會利用它來重新綁定,但我仍然需要一個存儲解決方案。 –

+0

@JohnZwinck我同意。我的答案是「git rebase」部分。我只提供了一個git存儲的鏈接,但沒有任何結論。 – VonC