2015-03-02 2 views
0

Я хочу отредактировать сообщение о слиянии по умолчанию Git, у меня объявлен крюк на стороне сервера, который проверяет, начинается ли сообщение фиксации с 7 номерами (например, «1234567 - разрешить ошибку 3»,).Редактировать сообщение об автоматическом слиянии

Иногда мы делаем локальное слияние между 2 ветвями, поэтому, слияние создает по умолчанию сообщения фиксации без номеров, как это: «Слияние ветви„newBranch“в newBranch2»

Если разработчик не видит auto merge message и делать другие фиксации после слияния, когда он нажимает ветвь на сборку, сервер отказывается от нажатия, потому что сообщение о слиянии неверно.

Как изменить префикс сообщения автоматической фиксации на «0000000 -» без «--amend» и без «git merge -m»?

+0

Возможный дубликат [как я могу настроить сообщение об объединении git?] (Http://stackoverflow.com/questions/3148863/how-can-i-customize-gits-merge-commit-message) – Makoto

+1

Не было бы проще ли и * более идиоматично просто не выполнять свою проверку при компиляции? –

+0

По-видимому, лучше включить параметр '--no-ff' по умолчанию. –

ответ

1

Возьмите loook на --edit флаг для git merge: https://www.kernel.org/pub/software/scm/git/docs/git-merge.html

--edit

--no-редактировать

Вызов редактора перед совершением успешного механического слияния для дальнейшего редактирования авто- сгенерированное сообщение слияния, так что пользователь может объяснить и обосновать слияние. Опция -no-edit может использоваться для принимать автоматически сгенерированное сообщение (обычно это не рекомендуется). Опция --edit по-прежнему полезна, если вы даете черновик сообщения с параметром -m из командной строки и хотите отредактировать его в редакторе.

Старые сценарии могут зависеть от исторического поведения, не позволяющего пользователю редактировать сообщение журнала слияния. Они будут видеть, как открывается редактор , когда они запускают git merge. Чтобы упростить настройку таких сценариев для обновленного поведения, переменная окружения GIT_MERGE_AUTOEDIT может быть установлена ​​в no в начале их.

обновление

Для упрощения вы можете добавить псевдоним:

git config --global alias.emerge 'merge --edit'

, а затем просто использовать git emerge <branch> вместо git merge --edit <branch>

обновления 2

Возможно, вам не нужно «изменять настройки по умолчанию», а создавать отдельный фиксатор даже для быстрой пересылки (это считается хорошей практикой для выполнения отдельной фиксации даже для быстрого перехода вперед) , Вам просто нужно установить merge.ff вариант false. Запуск git config merge.ff false (для одного репо) или git config --global merge.ff false (глобально для всех сделок).

merge.ff

По умолчанию мерзавец не создает дополнительные слияния совершить при объединении коммит, который является потомком текущей фиксации.Вместо этого, конец , текущая ветка быстро перенаправляется. Когда установлено значение false, эта переменная сообщает git, чтобы создать дополнительный слияние в таком случае (эквивалент для предоставления опции -no-ff из командной строки). Если установлено только , допускаются только такие быстрые слияния (эквивалентно предоставлению опции -ff-only из командной строки).

(https://www.kernel.org/pub/software/scm/git/docs/git-config.html)

После этого выполняется каждый git merge команда создаст отдельный фиксации и пользователь будет удален в редакторе сообщений

+0

Привет, есть ли другой способ? Я не хочу зависеть от команды разработчиков, чтобы не использовать «emerge» вместо слияния. – user2117237

+0

@ user2117237, пожалуйста, уточните обновление 2. Кажется, вам нужно пойти в другом направлении. –

+0

Проблема не в быстрой пересылке. На самом деле, fast-forwards демонстрируют желаемое поведение: они явно * не * производят объединение с сообщением. –

0

merge.ff не работает.

Я сделал это решение, используя скрипт hook (prepare-commit-msg) в каталоге hooks. Сценарий проверить содержание сообщения содержит слово «сливаться», и если он не имеет «0000000» (нули по умолчанию, которые мы используем в сливаться сообщения вместо номера билета)

#!/bin/sh 
# 
# Automatically add zeros in the merge commit message if it has not the zeros. 
# 
COMMIT_EDITMSG=$1 
MERGE_MSG="0000000 - " 
MERGE=$(cat $COMMIT_EDITMSG|grep -i 'merge'|wc -l) 
NUMEROS=$(cat $COMMIT_EDITMSG|grep -i '000000'|wc -l) 
if [ $MERGE -ne 0 ] && [ $NUMEROS -eq 0 ] ; then 
     sed -i.bak -e "1s/^/$MERGE_MSG /" $1   
fi 

Так , если разработчик забывает помещать числа в сообщения автоматической фиксации, когда он пытается вывести код в сборку, сервер не будет блокировать его фиксацию из-за сообщения.

Смежные вопросы