Git — как объединить несколько репозиториев с общими файлами?

Итак, моя проблема такова: у меня есть 2 разных репозитория, и мне нужно сделать другой, новый, содержащий файлы из этих двух. Однако репозитории совместно используют некоторые файлы (например, main.c), которые я хочу объединить вручную... Я пытался объединить репозитории с помощью этого руководства: http://blog.caplin.com/2013/18/09/merging-two-git-repositories/, однако я получить только одну «копию» main.c. Может быть, я не понимаю, как работает git (я новичок в этом), но мне действительно нужно, чтобы git дал мне два файла, которые затем я мог бы вручную изменить и превратить в новый main.c... Надеюсь, я Я ясно дал понять о своей проблеме ... Я мог бы просто сделать две разные рабочие копии этих репозиториев, скопировать содержимое и создать новый репозиторий ... Но тогда история будет потеряна, верно?


person JinLisek    schedule 10.12.2014    source источник


Ответы (2)


Создайте репозиторий с ДВУМЯ пультами, используя git add remote - http://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes

Клонируйте первый удаленный сервер, чтобы создать начальный набор файлов локально — http://git-scm.com/docs/git-clone

Затем используйте git pull [remote2] для получения файлов из другого репозитория — http://git-scm.com/docs/git-pull

Затем разрешите любые конфликты кода.

Затем, при желании, добавьте третий пульт для нового репо и вставьте в него код кода.

person Michael Durrant    schedule 10.12.2014
comment
Я не могу клонировать удаленное устройство, потому что оно говорит фатально: репозиторий «ps3» не существует. ps3 — это имя моего первого пульта, который вы хотите, чтобы я клонировал. Подтянул думал, через git pull ps3 master и заработало. Однако, когда я пытаюсь git pull ps4 master, я получаю: From *******... * branch master -> FETCH_HEAD * [new branch] master -> p4/master Already up-to-date. . И это не актуально, потому что ps4 (мой второй пульт) имеет другой main.c, чем мой ps3 ... - person JinLisek; 11.12.2014

Вам нужно выбрать центральную точку. Для проекта_a это будет значение по умолчанию, ваш репозиторий кода в https://path.toyourproject.com/p/project_a. Начните с проверки и перемещения всего его содержимого в подкаталог:

$ git clone https://path.toyourproject.com/p/project_a
$ cd project_a
$ mkdir project_a-cli
$ git mv * project_a-cli
$ git commit -a -m "Move."

Теперь вы готовы приступить к слиянию вторичного репозитория. Например, https://path.toyourproject.com/p/project.testers

Первый шаг — добавить этот вторичный репозиторий в центральную точку.

$ git remote add origin-testers https://code.google.com/p/project.testers
$ git fetch origin-testers

разместите его во временной ветке и переместите все его содержимое в подкаталог

$ git branch merge-testers origin-testers/master
$ mkdir project.testers-testers
$ git mv * project.testers-testers
$ git commit -a -m "Move."

Объединить два репозитория в один

$ git checkout master
$ git merge merge-testers

Очистка

$ git branch -d merge-testers
$ git remote remove origin-testers

после этого разрешить конфликты вручную. вы можете установить инструмент визуального сравнения для Git.

person unixmiah    schedule 10.12.2014
comment
После перехода в каталог project_a и создания новой папки, когда я пытаюсь выполнить git mv * project_a-cli, я получаю сообщение о том, что фатально: невозможно переместить каталог в себя, source=project_a-cli, destination=project_a-cli/project_a-cli. Итак, я переместил файлы на git mv *.c project_a-cli, и тогда это сработало. Та же фатальная ошибка произошла после получения второго репо и выполнения git mv * project.testers-testers. Поэтому я попытался сделать то же самое, что и раньше: git mv *.c project.testers-testers. Однако затем я получаю другую ошибку: fatal: bad source, source=*.c, destination=project.piask4-piask4/*.c. - person JinLisek; 11.12.2014
comment
Таким образом, кажется, что после извлечения 2-го репозитория я не получил из него никаких файлов ... Я пытался игнорировать его, проверять мастер, затем пытаться объединить тестеры слияния ... Но, очевидно, он сказал, что он уже обновлен. - person JinLisek; 11.12.2014