Драйвер слияния .gitattributes не используется

Во-первых, я знаю этот вопрос merges-on-as">Как указать git всегда выбирать мою локальную версию для конфликтующих слияний определенного файла? но этот пост мне не помогает, и я не могу добавлять комментарии из-за своей репутации .

http://git-scm.com/book/en/Customizing-Git-Git-Attributes предлагает установить нашу стратегию слияния для пути вместо установки собственного драйвера слияния.

В чем преимущество и отличие добавления пользовательского драйвера слияния, возвращающего код выхода 0?

У меня есть файл .gitattributes на верхнем уровне моего репозитория:

pom.xml merge=ours

Но когда я объединяю две ветки с измененными файлами pom.xml, слияние не может быть разрешено:

$ git merge origin/master
Auto-merging pom.xml
CONFLICT (content): Merge conflict in pom.xml
Automatic merge failed; fix conflicts and then commit the result.

И я получаю стандартный результат конфликта слияния:

<pom>
<<<<<<< HEAD
    <version>0.88-SNAPSHOT</version>
=======
    <version>0.87.0</version>
>>>>>>> origin/master
</pom>

Что я делаю неправильно?


person BlackEye    schedule 22.03.2014    source источник


Ответы (1)


Вы можете объявить драйвер слияния, но это означает, что вы должны определить его в конфигурации git, как в ".gitattributes и отдельной стратегии слияния для файл":

[merge "ours"]
    name = "Keep ours merge"
    driver = true

Это позволяет использовать стратегию слияния для файла или набора файлов, в отличие от параметра -s для git merge стратегии, которые не не требует определения драйвера, но разрешает конфликт для всех файлов (а не только для pom.xml)

git merge -s ours
person VonC    schedule 22.03.2014
comment
Ох, ладно. Это было большое недоразумение. Я думал, что в нашей будет указан вариант стратегии слияния, потому что в книге не было подробностей относительно .git/config или пользовательских драйверов слияния. Большое спасибо, теперь это работает. - person BlackEye; 22.03.2014
comment
@BlackEye, я согласен. Эта часть книги немного сбивает с толку. - person VonC; 22.03.2014
comment
Проблема в том, что мы используем Atlassian Stash в качестве нашего корпоративного git-репозитория, поэтому мы не можем указать какие-либо параметры для слияния. Следующая проблема заключается в том, что я не знаю, как предоставить запрос на включение с помощью драйвера слияния: / Я жду ответа от Atlassian по этой теме. - person BlackEye; 25.03.2014
comment
@BlackEye, но если вы определите драйвер слияния, Stash подхватит его, поскольку он читает .gitattributes вашего репо. - person VonC; 25.03.2014
comment
Я не уверен, но я думаю, что Stash использует временный репозиторий для слияния запроса на включение. Как такой репозиторий должен знать драйвер слияния? - person BlackEye; 25.03.2014
comment
@BlackEye (при условии, что он выполняет слияние на вашей рабочей станции), он увидит ваши .gitattributes, поскольку это файл из вашего репозитория. Но он будет знать о директоре только в том случае, если он определен в глобальной опции (git config --global ...), потому что временное репо не увидит локальную конфигурацию вашего локального репо. - person VonC; 25.03.2014
comment
Stash — это веб-приложение, интерфейс для git-пультов, в соответствии с которым он управляет голыми репозиториями. Записи из .git/config голого репозитория не наследуются клонированными репозиториями, поэтому я не вижу возможности предоставить конфигурацию для временного репозитория:/ - person BlackEye; 25.03.2014
comment
@BlackEye было бы достаточно легко убедить вашего администратора Stash объявить в глобальной конфигурации на сервере Stash ваш драйвер слияния. - person VonC; 25.03.2014
comment
Звучит как отличная идея! :) Буду тестировать. - person BlackEye; 26.03.2014
comment
@BlackEye, приятно это слышать! - person VonC; 26.03.2014