git subtree pull -P без разницы ‹repo› ‹ref› всегда объединять конфликт

Проблема: у меня возникает конфликт слияния каждый раз, когда я пытаюсь вставить свое поддерево, даже если у меня нет изменений.

Чем я занимаюсь:

В поддерево-репо

# Make some changes

$ git commit -am 'Changes made'

$ git push origin master

В main-repo

$ git subtree add --prefix public/common {{subtree-repo}} master --squash

# Make some changes

$ git commit -am 'Changes made'

$ git subtree push --prefix public/common {{subtree-repo}} master

В поддерево-репо

$ git pull origin master

# Make some changes

$ git commit -am 'Changes made'

$ git push origin master

В main-repo

$ git subtree pull --prefix public/common {{subtree-repo}} master --squash

И здесь все взрывается. Притяжение дает мне:

remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From {{subtree-repo}}
 * branch            master     -> FETCH_HEAD
   a53e6fc..c078461  master     -> {{subtree-repo}}/master
Auto-merging public/common/README.md
CONFLICT (content): Merge conflict in public/common/README.md
Automatic merge failed; fix conflicts and then commit the result.

Так почему я получаю конфликт слияния, если я не внес никаких изменений?

Чего я пытаюсь достичь: у меня есть веб-проект и мобильный проект, над которым я работаю в Кордове. Поскольку они оба используют JavaScript, у меня есть несколько компонентов и моделей, которыми я хочу поделиться между ними. Я хотел бы поместить эти общие вещи в общую папку между ними двумя, чтобы мне не пришлось копировать пасту. Я изучил плюсы и минусы подмодулей и поддеревьев и остановился на поддеревьях. Сейчас это проект одного человека, но я хотел бы все делать правильно, чтобы он мог масштабироваться.

Примечание. Если у вас есть предложение, как лучше выполнить то, что я пытаюсь сделать, было бы здорово :-)


person kentcdodds    schedule 27.03.2014    source источник


Ответы (1)


Не уверен, что вызывает проблему, но я нашел лучшее решение для своей задачи:

bower install [email protected]:username/my_repo.git --save

Так что я просто буду использовать bower для обмена материалами между репозиториями. Я не понимал, что вы можете использовать URL-адрес репозитория git для компонента bower. Я говорю очень мило. К сожалению, это не позволяет мне вносить изменения в исходный поток из репо, которое я использую, но, по крайней мере, у меня есть очень простой способ сделать это :)


Обновить

Я разместил этот метод в Google+ и Роб Беккер упомянул, что вы можете сделать это еще проще, используя символическую ссылку на беседку:

Попробуйте добавить ссылку на беседку, чтобы уменьшить все это копирование. Вы можете просто разместить свой общий код в отдельных репозиториях и настроить как компоненты bower, какие у вас уже есть. Затем выполните $ bower link в bs-js-common

Это устанавливает ссылку. Затем в вашем основном проекте, где у вас есть зависимость bower от bs-js-common, просто выполните: $ bower link bs-js-common

После этого у вас будет ссылка на файловую систему из папки bower_components / bs-js-common ваших основных проектов, где находится реальное репозиторий проекта. Это позволяет вам видеть живые изменения в обоих местах.

person kentcdodds    schedule 30.03.2014
comment
Хотелось бы увидеть правильный ответ на исходный вопрос! Та же проблема возникает в другом сценарии использования, когда bower неприменима. - person Alex R; 05.12.2015
comment
@AlexR, рекомендую еще раз спросить. - person kentcdodds; 06.12.2015