Мы только недавно начали использовать Git (ранее использовал Subversion), и я обнаружил изменение в рабочем процессе, которое может помочь с вашей проблемой, без необходимости блокировок. Он использует преимущества того, как Git разработан и насколько просты ветки.
По сути, это сводится к переходу на неосновную ветвь, выполнению обзора этой ветки и затем слиянию с основной ветвью (или какой-либо целевой ветвью).
Способ, которым git «предназначен» для использования: каждый разработчик публикует свой собственный общедоступный репозиторий, из которого они просят других использовать его. Я обнаружил, что у пользователей Subversion есть проблемы с этим. Поэтому вместо этого мы нажимаем на ветви деревьев в центральном репозитории, где каждый пользователь имеет свое собственное дерево ветвей. Например, такая иерархия может работать:
users/a/feature1
users/a/feature2
users/b/feature3
teams/d/featurey
Не стесняйтесь использовать свою собственную структуру. Заметьте, что я также показываю ветки тем, еще один распространенный идиот git.
Затем в локальном репо для пользователя:
feature1
feature2
И чтобы получить его на центральном сервере (источник):
git push origin feature1:users/a/feature1
(возможно, это можно упростить с изменениями конфигурации)
В любом случае, после того, как функция1 будет рассмотрена, кто бы ни был ответственным (в нашем случае это разработчик функции, вы могли бы назначить одного пользователя, ответственного за слияние с мастером), он делает следующее:
git checkout master
git pull
git merge users/name/feature1
git push
Извлечение извлекает (извлекает любые новые основные изменения и ветвь функций) и обновляет мастер, который имеет центральное хранилище. Если пользователь a выполнил свою работу и правильно отследил мастера, проблем со слиянием не должно быть.
Все это означает, что, даже если пользователь или удаленная группа вносят изменения в двоичный ресурс, он проверяется перед включением в основную ветку. И есть четкое разграничение (основанное на процессе) того, когда что-то входит в основную ветвь.
Вы также можете программно реализовать некоторые аспекты этого, используя git hooks, но опять же, я еще не работал с ними, поэтому не могу говорить о них.