Как объединить два репозитория git, не теряя историю ни для одного из репозиториев - PullRequest
0 голосов
/ 09 мая 2019

Мне потребовалось объединить два репозитория, не теряя историю ни того, ни другого. Я искал несколько форумов, но ни один не мог предоставить полное решение. После выполнения нескольких шагов, взятых из разных источников, мне удалось объединить отсутствующие точки и объединить два отдельных репозитория в один репозиторий с сохранением их истории.

Есть несколько других ответов, которые говорят о слиянии ветвей или просто не содержат полных инструкций / шагов.

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Если на вашем компьютере есть оба репозитория, например, у вас есть папки

A/.git
A/client-src

B/.git
B/server-src

, просто перейдите к одному из них:

cd A

и введите:

git remote add repo-b ../B

Это создает символическую ссылку из repo-a на repo-b («repo-b» - это просто символическое имя, вы можете выбрать все, что захотите), а затем

git fetch repo-b

объединит дваРЕПО.На этом этапе вы будете иметь обе истории в одном репозитории, но все же в разных ветках.Ветка "master" (мастер папки, в которой вы находитесь) будет содержать код клиента.Ветка "repo-b / master" будет содержать код сервера.

Тогда вам нужно только объединить два:

git merge repo-b/master --allow-unrelated

После этого у вас будет в Repo A комбинированный мастерветка.Если вы уверены, что в Repo B нет другой значимой информации (теги, другие ветви), вы можете отменить ее и продолжить работу с Repo A. Обе истории останутся нетронутыми.

Для полноты данных вам, наконец, следует удалитьбесполезная ссылка от Repo-A на Repo-B:

git remote remove repo-b
0 голосов
/ 09 мая 2019

Ниже приведены шаги

git clone <NEW REPO>
cd <NEW REPO FOLDER>
dir > README.MD --> this step is just to initiate the new repository.
git commit -m "initiate the new repository"
git remote add -f <RANDOM NAME A> <OLD BRANCH A>
git remote add -f <RANDOM NAME B> <OLD BRANCH B>
git pull origin master --allow-unrelated-histories
git push -u origin master
git merge --allow-unrelated <RANDOM NAME A>/master
git merge --allow-unrelated <RANDOM NAME B>/master
git push origin master

Я считаю, что этот пост должен быть полезным для других.

...