Как git-diff файл против их версии после разрешения конфликтов

В хуке перед фиксацией я хочу убедиться, что никто (кроме 1 человека) не сможет изменить limited_file.txt

Хук должен обрабатывать случай, когда кто-то выполняет 'git pull' или 'git merge some_branch', получает последний файл limited_file.txt, но something_else.txt вызывает конфликт.

Он разрешает конфликт и сохраняет «их» версию limited_file.txt, выполняет «git add» и «git commit».

В этот момент выполняется хук перед фиксацией, и он идентифицирует, что limited_file.txt будет зафиксирован. Мы хотим разрешить коммит только в том случае, если файл идентичен тому, что он пришел из 'git pull' или 'git merge' (другими словами, если он сохранил "ихнюю" версию).

Кто-нибудь знает, можно ли при разрешении конфликта определить, идентичен ли файл "своему"?

Что-то эквивалентное следующей несуществующей команде:

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

person user1865815    schedule 12.02.2015    source источник
comment
Почему бы вам не сравнить кешированную версию файла с ограниченным доступом с версией обновленного исходного файла. т. е. сравните кешированную версию с версией во входящей восходящей ветке.   -  person Mudassir Razvi    schedule 12.02.2015
comment
Это имеет смысл, когда вы делаете все вручную, потому что вы знаете, откуда вы выполняете слияние... но в скрипте мы должны определить, что является входящей ветвью конфликтующего слияния/вытягивания.   -  person user1865815    schedule 12.02.2015


Ответы (1)


git diff --cached MERGE_HEAD -- restricted_file.txt выполнит эту работу. Это работает, потому что (и, следовательно, также тогда и только тогда) MERGE_HEAD содержит идентификатор SHA-1 коммита, который объединяется, то есть «их» версию.

(При остановке из-за конфликта или --no-commit слияния git merge записывает этот SHA-1 в специальную ссылку MERGE_HEAD.)

person torek    schedule 12.02.2015