Git Precommit Hook, чтобы гарантировать, что Head актуальна из Master Repo

StackOverflow https://stackoverflow.com/questions/3994252

  •  10-10-2019
  •  | 
  •  

Вопрос

Я перевожу свою команду из старого репозитория CVS в использование git. Я надеялся добавить крюк с предварительной докладом, чтобы убедиться, что коммит будет выполнен на местном уровне (и выдвинут), у каждого человека есть современный репо.

Например, в CVS каждый сделает «CVS Up», прежде чем вносить изменения, а затем совершать. Я хочу заставить это заставить его не совершать изменения, если они не сделали git pull origin master Сначала (мы не будем использовать дополнительные ветви)

Есть простой способ сделать это? Ура за любую помощь :)

Это было полезно?

Решение

Проверьте и посмотрите, есть ли Shas от git ls-remote origin HEAD (удаленный наконечник) и git rev-parse HEAD (местный совет) равны?

Обратите внимание, что при этом вы выбрасываете МНОГО о гибкости Гита - подумайте о том, В самом деле что ты хочешь делать. Часть силы git pull Это даже если вы совершаете вещи, которые расходились из основной копии, когда вы вытащите из мастер -копии ваши изменения, которые могут быть объединены (и в большинстве случаев процесс полностью автоматический).

Если ваша цель состоит в том, чтобы иметь линейную историю коммита (у которой есть свои компромиссы), я бы посоветовал взглянуть на rebase командовать вместо того, чтобы заставлять своих разработчиков никогда не совершать за rigin/Master.

Редактировать

На самом деле, если вы делаете просто git pull (Вместо переживания), вы не сможете сравнить головы, потому что Pull будет делать коммиты. Вместо этого вам нужно сравнить git ls-remote origin HEAD к git merge-base origin/HEAD HEAD.

Некоторые другие комментарии

  • Почему вы используете git, но тогда вообще не используете дополнительные ветви? Это похоже на покупку автомобиля, но никогда не использует двигатель (и вместо этого просто толкает его повсюду). Ветви дешевый В GIT быстро настройка и почти легко слияние. Вы оказываете себе медвежью услугу, если не используете их.

  • Почему вы заботитесь о том, чтобы все были в курсе, прежде чем вносить изменения? Это не CVS, разрешение конфликтов не ужасное - GIT будет автоматически разрешать 95% конфликтов для вас без необходимости делать что -то, так что, независимо от того, независимо от того, независимо от того, независимо от того, независимо от того, независимо от того, независимо от того, независимо от того, независимо от того, независимо от того, независимо от того, независимо от того, независимо от того, независимо от того, независимо от того, независимо от того, независимо от того, независимо от того, независимо от того, независимо от того, независимо от того, независимо от того, если вы git pull До или после того, как вы внесете свои изменения, на самом деле не имеет значения - вам просто нужно тянуть, прежде чем нажимать, и все будет в порядке.

  • Связанные с предыдущим пунктом: поскольку невыразительные толчки отклоняются по умолчанию, вам не нужен крючок. Просто скажите своим разработчикам: «Если ваш толчок отвергнут как незабываемые, сделайте git pull, затем попробуйте снова нажать », и все будет работать.

Другие советы

Это разрушает «распределенную» природу git. Это делает каждый коммит несколько глобальным. CVS «Commit» аналогичен GIT «Push», что и общается с удаленным концом.

Если вы действительно хотите воспользоваться распределенной моделью, вы должны поощрять и заставить вашу команду понимать точку местных коммитов, а не заставить систему попасть в центральное репо на каждом коммите (который отбил централизован).

Если вы отслеживаете удаленную ветку:

git fetch
git log HEAD..origin
# or:
git diff ...origin

Как намекались другие ответы, принуждение такого рода проверки не всегда является хорошим решением для Любые Удаленное репо, но может быть интересным как предупреждение.

Не забывай, что git push по умолчанию будет отклонен, если это не является изменением быстрого нанесения.
Итак git pull В любом случае будет способ избежать этого сообщения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top