在预提交挂钩中,我想确保没有人(除了一个人)能够更改restricted_file.txt
当有人执行"git pull"或"git merge some_branch",获得最新的restricted_file.txt,但something_else.txt导致冲突时,钩子需要处理这种情况。
他解决了冲突,并保留了restricted_file.txt的"他们的"版本,执行"git add"one_answers"git commit"。
此时,执行预提交挂钩,它确定restricted_file.txt将被提交。只有当文件与"git pull"或"git merge"中的文件相同时(换句话说,如果他保留了"他们的"版本),我们才允许提交。
有人知道在冲突解决过程中是否可以确定文件是否与"他们的"相同吗?
相当于以下不存在的命令:
git diff --cached --against_theirs -- restricted_file.txt
git diff --cached MERGE_HEAD -- restricted_file.txt
将完成此项工作。这之所以有效,是因为(因此,当且仅当)MERGE_HEAD
包含要合并的提交的SHA-1 ID,即"他们的"版本。
(由于冲突或--no-commit
合并而停止时,git merge
将SHA-1写入特殊的MERGE_HEAD
引用。)