2013-12-03 6 views
1

У меня есть mainProject на git, с shared library. Этот shared library также находится в subProject.git merge in wrong folder

мой рабочий процесс

Я начинаю свой проект по клонированию проекта и создать ветвь:

git clone https://github.com/user/mainProject.git main-project 
git checkout -b fix 

Я работал на моем mainProject, и добавил awesomeClass.php в папке lib/ (корень из shared library)

Новая файловая структура:

/index.php 
/page1.php 
/lib/form/contact.php 
/lib/awesomeClass.php* 

* = новый

после этого я добавляю и совершать свои изменения.

git add lib/awesomeClass.php 
git commit -m "added new awesome class that will blow your mind" 

Добавить удаленность shared library, принесите и подключить пульт дистанционного управления для местного отделения

git remote add sharedlib https://github.com/user/sharedlib.git 
git fetch sharedlib 
git checkout -b sharedlib sharedlib/master 

это переключает свой филиал в sharedlib, где я пытаюсь объединить свои изменения, чтобы получить те же изменения от shared library к моему подпроекту.

git merge --squash -s subtree --no-commit fix 

Это где идет не так, структура файла (видно из sharedlib ветви перспективы):

/lib/form/contact.php 
/lib/awesomeClass.php 

после слияния:

/lib/form/index.php* 
/lib/form/page1.php* 
/lib/form/lib/form/contact.php* 
/lib/form/lib/awesomeClass.php* 

/lib/form/contact.php 
/lib/awesomeClass.php 

* = новый

Может кто-нибудь объяснить, как я могу объединить только shared library, а не полный mainProject в неправильную папку? Спасибо!

+0

Почему 'sharedLib' имеет все свои файлы в папке' lib'? Разве это не должно присутствовать только в 'mainProject', чтобы отделить« sharedLib »от остальной части содержимого репозитория? – LopSae

+0

Не знаете, как вы обрабатываете свой 'sharedLib', но на всякий случай эта статья объясняет одну возможную стратегию: http://git-scm.com/book/ch6-7.html – LopSae

+0

Я использовал это: [Вложенные библиотеки погружались ] (http://typecastexception.com/post/2013/03/16/Managing-Nested-Libraries-Using-the-GIT-Subtree-Merge-Workflow.aspx). эта статья работает только один раз. После первого слияния/обновления 'sharedLib', он просто слияние/обновление в неправильную папку. например. как описано выше в папке 'lib/form', а не просто' lib/'.. Я пробовал вашу статью, но то же самое происходит на шаге слияния. – Arazu

ответ

0

Существует несколько сложных рабочих процессов, которые вы выполняете в отношении стратегии слияния поддерева, но это устарело, и в наши дни это намного проще.

Что вы ищете, это contrib command git-subtree, который поставляется с функцией разделения, чтобы извлечь изменения из основного проекта, специально относящиеся к этому подкаталогу, чтобы вы могли объединить их обратно по направлению к подпроекту.

+0

Я видел это, но, наконец, нашел решение для этого. Я просто сделал рабочий процесс без поддерева. Я привязал папку к проекту и поместил ее в gitignore. Это намного проще и безопаснее. – Arazu

+0

Я не думаю, что согласен с любым из них, git-поддерево довольно простое, и гораздо безопаснее, если у вас есть история работоспособного состояния, вместо двух проектов, которые будут поддерживаться независимо, у вас будет больше риска, если пытаясь вернуться к определенному моменту времени. Subtree дает вам легкость иметь все файлы подпроектов прямо в суперпроекте, это примерно так же просто, как и получается. – johnb003