Добавить драйвер git merge в репозиторий?

Я создаю драйвер слияния. Я определил файл .gitattributes следующим образом:

filename merge=mergeStrategy

Я создал драйвер слияния в $PROJECT/.git/config следующим образом:

[merge "mergeStrategy"]
    name = My merge strategy
    driver = scripts/mergeScript.sh

Это отлично работает локально, но я хотел бы зафиксировать этот драйвер слияния в репозиторий git, чтобы стратегия слияния действовала для всех.

Есть ли способ добавить это (или другие параметры конфигурации Git) в сам репозиторий?


person KurtPreston    schedule 12.01.2012    source источник
comment
есть ли пример репо, который решает эту проблему?   -  person Sibelius Seraphini    schedule 21.06.2019


Ответы (1)


Вы можете просто добавить и зафиксировать (и отправить) script/mergeScript (вместе с файлом .gitattributes, конечно)

Это будет работать до тех пор, пока:

  • mergeScript каким-то образом находится в $PATH пользователя, выполняющего драйвер слияния.
  • mergeScript является исполняемым, chmod +x
  • mergeScript не имеет расширения, чтобы позволить вам позже изменить его содержимое (от оболочки bash до сценария Perl, от исполняемого файла C до ...) при необходимости.

(Спасибо, MestreLion, за последние два пункта, как он упомянул их в комментарии)

Так было у вас локально, так как я подозреваю, что '.' было в вашем $PATH, но вы не можете предполагать, что это для всех.

Однако локальный файл конфигурации (.git/config) не будет отправлен/клонирован (как Александр Приймак указывает в комментарии), поэтому пользователям по-прежнему необходимо реплицировать объявление пользовательского драйвера слияния.
Это базовая мера безопасности, чтобы вы не запускали потенциально «вредный» скрипт, который мог бы затем автоматически выполняться при следующем слиянии.

person VonC    schedule 12.01.2012
comment
Это не сохраняет настройки конфигурации в репозитории git. - person Alexandr Priymak; 12.01.2012
comment
@AlexandrPriymak: хорошая мысль. Я добавил это важное предостережение к ответу. - person VonC; 12.01.2012
comment
Не забудьте установить mergeScript.sh как исполняемый файл с помощью chmod +x, иначе он может (не будет?) работать. Я также настоятельно рекомендую вам не использовать расширения для исполняемых файлов. Назовите его просто mergeScript, так как в будущем он может измениться со сценария оболочки на perl, python или даже на скомпилированный исполняемый файл C. - person MestreLion; 10.03.2012
comment
На самом деле это не решает проблему. Как люди делятся этими драйверами слияния в реальном проекте? - person Paul Tarjan; 05.05.2016
comment
@PaulTarjan конфигурационная часть драйвера слияния может храниться в версионном файле репозитория, но вам все равно придется выполнить ручную и локальную настройку, чтобы активировать эти драйверы слияния для вашего локального клонированного репо. - person VonC; 05.05.2016
comment
Ну, в компании с тысячами инженеров это большая просьба :( - person Paul Tarjan; 05.05.2016
comment
Я понимаю, но основным требованием безопасности является не копирование конфигурации. Вы по-прежнему можете применить его, отклонив коммиты, которые не получили преимущества от этого драйвера слияния (если вы можете обнаружить их применение только в содержимом коммита) - person VonC; 05.05.2016
comment
@Top-Master Нет: локальная конфигурация в репозитории Git никогда не передается и не извлекается. - person VonC; 13.05.2019
comment
спасибо, только что проверил, и вы правы, см. также пост force-merge-conflict. - person Top-Master; 13.05.2019