git объединить разные репозитории?

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
Неважно, я не видел, чтобы вы сказали, что B является копией A. Прочитав ваше «вопрос в том», где вы сказали «подпроекты ... относящиеся к одному исходному проекту ... синхронно», я предположил, что вы имели в виду извлекают фрагменты исходного проекта, но синхронизируют их в метапроекте.
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, который мы уже объединяли, делая это таким образом? Мне приходилось повторно объединять все изменения (и исправлять конфликты) для всех изменений каждый раз, когда добавлялось новое изменение, если я правильно помню. Этого не произошло по-SVN
балу
Конечно, слияние работает как обычно. Вам не нужно «повторно объединять все изменения». Это не что иное, как обычное слияние, которое вы использовали бы с удаленным сервером.
Оливье Вердье
Что делать, если у меня нет пульта? Я хотел бы сделать то же самое (слить projA с projB), но я работаю только локально, без пультов.
Л. Холанда
1
@LeoHolanda Локальные файлы считаются удаленными с точки зрения git.
PyRulez 09
3
@LeoHolanda У тебя есть смысл. Мне пришлось обозначить локальное репо в формате URL, например file: ///Users/abc/path/to/my/repo/.git
mcku