2015-02-12 3 views
3

В предварительно зафиксированной крючок, я хочу, чтобы убедиться, что никто (кроме 1 человека) может изменить restricted_file.txtКак GIT-дифф файл от «ихнего» версии после разрешения конфликтов

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

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

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

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

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

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

Почему вы не сравнить кэшированную версию файла с ограниченным, что в обновленном вверх по течению. i. сравните кешированную версию с версией на входящей ветке вверх. –

+1

Это имеет смысл, когда вы делаете все вручную, потому что знаете, где вы сливаетесь ... но в сценарии мы должны определить, что является входящей ветвью конфликтующего слияния/вытягивания. – user1865815

ответ

4

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

(После остановки для конфликтного или --no-commit слияния, git merge пишет, что SHA-1 к специальной MERGE_HEAD ссылке.)

+0

Это сработало! Спасибо @torek – user1865815