Git: указать нашу стратегию слияния git в gitattribute для всей папки (или просто отключить ошибки слияния для конкретной папки?)

Мне нужно исключить папку dist/ из ошибок слияния, мне все равно, будет ли это theirs, ours или другая стратегия, но мне нужно держать ее в контроле версий, так как это способ развертывания в Heroku. .gitattributes сценарий кажется подходящим вариантом. Но я не могу заставить эту работу работать.

Я прочитал этот канонический ответ и этот < href="https://stackoverflow.com/questions/14093540/tell-git-to-use-ours-merge-strategy-on-specific-files">похожий ответ, но не могу понять, что Я делаю неправильно.

Мой .gitattributes конфиг:

* text=auto
dist/ merge=keepMine

Соответствующая часть моего .git/config :

[merge "keepMine"]
    name = always keep mine dist during merge
    driver = keepMine.sh %O %A %B

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

# copied as is from the SO answer
# I want to keep MY version when there is a conflict
# Nothing to do: %A (the second parameter) already contains my version
# Just indicate the merge has been successfully "resolved" with the exit status
exit 0

EDIT: Также попробовал git config merge.keepMine.driver true, как было предложено в одном из ответов SO выше. Не работает.

Но я все еще получаю ошибки слияния (если я их создаю), например, например, в dist/styles/sdkasl.main.css.

Что я делаю неправильно? Спасибо за помощь.


person alonisser    schedule 23.01.2014    source источник
comment
Я в лучшем случае новичок в git, но последние несколько дней я следил за этим вопросом в надежде увидеть решение вашей проблемы. Вы решили это? Если нет, возможно, Как заставить git игнорировать каталог при слиянии может помочь?   -  person    schedule 25.01.2014
comment
@ChronoKitsune, это еще одна проблема, я не хочу выполнять ручное слияние (в котором этот ответ поможет), а автоматическое слияние.   -  person alonisser    schedule 25.01.2014
comment
Я только что попробовал то, что вы описали, и это работает для меня. Не могли бы вы обновить свой вопрос, указав результат неудачного слияния? Например. GIT_TRACE=2 git слить...   -  person Lasse    schedule 24.02.2014
comment
Пожалуйста, опубликуйте вывод git check-attr --all dist/styles/sdkasl.main.css   -  person jthill    schedule 30.04.2014
comment
Это старый вопрос, не уверен, что у меня есть эти файлы. Я проверю. просто ради учебы   -  person alonisser    schedule 30.04.2014
comment
вы не сохраняете этот каталог как подмодуль git? то, что вы пытаетесь сделать, вызывает много проблем с историей в git на случай, если вам нужно будет проверить различия или отменить некоторые коммиты в будущем.   -  person Anas Al Hamdan    schedule 30.03.2015
comment
Разве это не должно быть dist/** в файле .gitattributes?   -  person kfunk    schedule 07.01.2016
comment
Шаблоны .gitattributes следуют тому же соглашению, что и .gitignore, поэтому папка будет включать в себя все, что находится в этой папке и ниже.   -  person Haralan Dobrev    schedule 26.01.2018


Ответы (1)


документация не очень хороша в этом один.

Вы также можете использовать атрибуты Git, чтобы указать Git использовать разные стратегии слияния для определенных файлов в вашем проекте.

Звучит здорово! О стратегиях слияния можно прочитать здесь. нашим, это было бы очень полезно.

К сожалению, следующая строка разрушает эту мечту. Акцент мой.

Один очень полезный вариант — указать Git не пытаться объединять определенные файлы, когда у них есть конфликты, а использовать свою сторону слияния, а не чужую.

К сожалению для нас, если изменения dist/ в feature не конфликтуют с master, то они будут объединены в dist/ master. Второй ответ на вопрос вы связались выше, обсуждает это.

Я бы предложил перехватчик слияния который сбрасывает dist/ в некое первозданное состояние.

person Adam    schedule 23.01.2019