2015-02-12 152 views
3

在pre-commit鉤子後,我要確保沒有人(除1人)是能夠改變restricted_file.txt如何GIT-DIFF對「他們」的文件版本解決衝突

掛鉤當某人執行'git pull'或'git merge some_branch'時需要處理這個案例,獲取最新的restricted_file.txt,但是something_else.txt會導致衝突。

他解決衝突並保留restricted_file.txt的「他們的」版本,執行'git add'和'git commit'。

此時,pre-commit鉤子被執行,它確定restricted_file.txt將被提交。 只有當文件與'git pull'或'git merge'(換句話說,如果他保留「他們的」版本)相同時,我們才允許提交。

是否有人知道在衝突解決過程中是否可以確定文件是否與「他們的」相同?

東西等同於以下不存在的命令:

git diff --cached --against_theirs -- restricted_file.txt 
+0

你爲什麼不比較受限制文件的緩存版本與上游的更新。即將緩存版本與傳入上游分支上的版本區分開來。 – 2015-02-12 07:22:02

+1

當你手動執行所有操作時,這是有意義的,因爲你知道你從哪裏合併......但是在腳本中,我們必須確定衝突的合併/拉取的傳入分支是什麼。 – user1865815 2015-02-12 08:42:28

回答

4

git diff --cached MERGE_HEAD -- restricted_file.txt將做的工作。這是有效的,因爲(並且因此也當且僅當)MERGE_HEAD包含被合併提交的SHA-1 ID,即「他們的」版本。

(一旦停止了衝突或--no-commit合併,git merge寫道,SHA-1的特殊MERGE_HEAD參考。)

+0

這工作!謝謝@torek – user1865815 2015-02-12 07:50:26