2015-02-12 148 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