2017-02-05 2 views
4

Как предотвратить git от тотальных коммитов, которые содержат заданную строку в совершении массажа, например. "НЕ ДАВИ" ?предотвращает «git» от подталкивания фиксации с данным сообщением фиксации

Контекст/UseCase:

Мой типичный рабочий процесс: я хак хак, разделение работы на микро зафиксируется, когда все работает, я переписать историю, изменив порядок совершения группировать их разумно и позже давя в больший смысл куски. Как только работа будет готова, все будет готово к нажатию!

Теперь я хотел бы, чтобы git мешал мне случайно вдаваться в репозитарий, который все еще продолжается. Я считал, что держать сообщение «НЕ ПУСТЬ» как часть сообщения о фиксации. Как сделать git автоматически помешать мне нажать, когда он достигнет такой фиксации после git push?

(On для предварительного приема крюков решения: давайте рассмотрим GitHub как пример сервиса, который AFAIK does not allow pre-recevie hooks, за исключением его «Enterprise» издание)

+0

Не было [git stash] (https://git-scm.com/book/ ru/v1/Git-Tools-Stashing) выполняют эту работу за вас? – michalronin

+0

Есть ли что-нибудь в ответе? – VonC

+0

* У меня есть несколько ветвей многократных микрокоманд, и я над ними работаю: проверяю их, сравниваю их и т. Д. * 'git rebase -i' - вещь, которая, как оказалось, работает лучше всего для меня. Как только я достиг желаемой формы, я редактирую и сквошу. –

ответ

4

Вы можете использовать pre-push крюк, но остается местный крюк, который можно обойти.
Посмотрите этот pre-push example which does look at each commit message

# Check for foo commit 
     commit=`git rev-list -n 1 --grep '^foo' "$range"` 
     if [ -n "$commit" ] 
     then 
echo "ERROR: git pre-push hook found commit message starting with 'foo' in $local_ref" 

Но лучший способ остается pre-receive hook на стороне сервера, хотя. Таким образом, политика применяется для всех участников. Это не всегда возможно (когда у вас нет прямого доступа к удаленному серверу, например, GitHub, BitBucket или GitLab.com)

+0

@ Leon Конечно, добавлено. – VonC

+0

Как уже упоминалось выше, это правильный ответ, но проверка должна быть также на стороне сервера. Любой разработчик может отключить локальные перехватчики, поэтому вы должны проверить его на сервере. Единственное, что вам нужно проверить, это то, что в ответе используется '-n 1', который будет проверять только последний фиксатор, поэтому вам нужно сделать это во всех своих записях, так как пользователь может нажать несколько коммитов одновременно. – CodeWizard