git merge різні сховища?


79

Я використовую SVN для всіх своїх проектів. Іноді проект B походить як копія проекту A. Коли проект A має загальні зміни, я можу використовувати його svn merge Aв каталозі B, і він об’єднає ці зміни.

Тепер, якби я хотів використовувати git. Мені не подобається мати всі свої проекти в одному сховищі, оскільки мені тоді доводиться все клонувати і не можу вибрати лише один проект, як у SVN. Але маючи одне сховище для кожного проекту, як я можу робити те саме, що робив раніше зі SVN?

Питання: Який найкращий спосіб структурувати його, якщо я хочу кілька підпроектів, які насправді стосуються одного оригінального проекту, та синхронізувати їх? І що я також хочу мати можливість перевірити їх окремо


1
Вам, мабуть, краще поглянути на git-submodule ( kernel.org/pub/software/scm/git/docs/git-submodule.html ).
Cascabel

@Jefromi, але вихідні файли в основному з тієї ж історії, це означало б, що у мене є дві копії файлів? Я думаю, що підмодуль - це більше для відстеження зовнішніх бібліотек, які ви включаєте як окремі файли (а не злиття)?
baloo

Неважливо, я не бачив, що ви сказали, що Б є копією А. Читаючи ваше "питання", де ви сказали "підпроекти ..., що стосуються одного оригінального проекту ... синхронно" Я припускав, що ви мали на увазі взяти фрагменти оригінального проекту, але синхронізуючи їх у метапроекті.
Cascabel

Відповіді:


140

Якщо у вас є два проекти, proj1і ви proj2хочете об’єднати зміни proj1в proj2, ви зробите це так:

# in proj2:
git remote add proj1 path/to/proj1
git fetch proj1
git merge proj1/master # or whichever branch you want to merge

Я вважаю, що це робить те саме, що ви робили з SVN.


Але чи об’єднаємо зміну №2 з тим, що ми вже об’єднали зміну №1, роблячи це таким чином? Мені довелося об’єднувати всі зміни (і виправляти конфлікти) для всіх змін кожного разу, коли додавались нові зміни, якщо я пам’ятаю правильні. Цього не сталося по SVN-шляху
baloo

Звичайно, злиття працює як зазвичай. Вам не потрібно "змішувати всі зміни". Це не що інше, як звичайне злиття, яке б ви використовували з віддаленим сервером.
Олів'є Вердьє

Що робити, якщо у мене немає пульта дистанційного керування? Я хотів би зробити те саме (об'єднати projA у projB), але я працюю лише локально, без пультів дистанційного керування.
L. Holanda

1
@LeoHolanda Місцеві файли вважаються віддаленими, що стосується git.
PyRulez

3
@LeoHolanda У вас тут точка. Мені довелося позначити локальне репо у форматі URL, наприклад файл: ///Users/abc/path/to/my/repo/.git
mcku
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.