Альтернатива .gitattributes - PullRequest
       24

Альтернатива .gitattributes

0 голосов
/ 01 сентября 2018

Я искал способ объединить ветку в другую, не переопределяя папки image & css. Я посмотрел вокруг SO и нашел несколько вопросов и ответов, в которых упоминался .gitattribute.

Я также проверил официальную документацию.

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

Для справки, это мой файл .gitattributes, включенный в обе ветви:

/res/icon/                 merge=ours
/res/screen/               merge=ours
/platforms/                merge=ours
/www/assets/css/           merge=ours
/www/background_splash.png merge=ours
/www/bglogin.png           merge=ours
/www/top_bar.png           merge=ours

Я что-то здесь упускаю? Благодаря.

Кроме того, есть ли другой вариант для меня, чтобы достичь этого?

1 Ответ

0 голосов
/ 01 сентября 2018

Если вы хотите, чтобы все файлы в res/icon, вам нужно:

/res/icon/*                merge=ours

(если нет подкаталогов) или:

/res/icon/**/*             merge=ours

(если есть подкаталоги). Повторите этот шаблон для всех каталогов.

Но учтите, что есть недостаток: драйвер слияния ours будет использоваться только в том случае, если есть что объединить . То есть предположим, что существует файл с именем res/icon/foo.img. В коммите слияние базы это изображение буквы B для Base. В вашей ветке это по-прежнему образ буквы B, бит за битом идентичный исходному файлу. В их ветви это другое изображение, или другой цвет, или что-то еще, так что файл не является бит-идентичным.

Запустив git merge theirs, ваш Git сравнит базу B в res/icon/foo.img с вашей B, увидит, что они одинаковые, сравнит базу B с их изображением, увидит, что они разные, и выберет их файл потому что нечего разрешать.

Если вы действительно изменили файл каким-либо образом, Git сравнивает базовый res/icon/foo.img B с вашим res/icon/foo.img файлом (возможно, ваш B теперь другого цвета). Git сравнивает базу B с их файлом. И у вас, и у них есть изменения, поэтому есть разные изменения, которые нужно объединить. Теперь Git будет использовать ваш драйвер merge=ours для объединения.

(Git, вероятно, должен иметь флаг «драйвер слияния должен всегда использоваться» или что-то подобное, чтобы заставлять использовать его драйвер, даже если Git считает, что нет изменений для объединения. Но Git делает сегодня такого флага нет.)

...