Объединение нескольких Git-репозиториев - PullRequest
203 голосов
/ 10 ноября 2008

Допустим, у меня есть установка, похожая на

phd/code/
phd/figures/
phd/thesis/

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

cd phd/code
git commit 
cd ../figures
git commit

Было бы (сейчас) приятно просто выполнить

cd phd
git commit

Кажется, есть несколько способов сделать это с помощью субмодулей или извлечения из моих суб-репозиториев, но это немного сложнее, чем я ищу. По крайней мере, я был бы счастлив с

cd phd
git init
git add [[everything that's already in my other repositories]]

но это не похоже на однострочник. Есть ли в git что-нибудь, что может мне помочь?

Ответы [ 12 ]

1 голос
/ 28 июля 2015

Чтобы объединить второй проект с основным проектом:

А) Во втором проекте

git fast-export --all --date-order > /tmp/secondProjectExport

Б) В основном проекте:

git checkout -b secondProject
git fast-import --force < /tmp/secondProjectExport

В этой ветке делайте все тяжелые преобразования, которые вам нужно сделать, и фиксируйте их.

C) Затем вернемся к мастеру и классическому слиянию двух ветвей:

git checkout master
git merge secondProject
0 голосов
/ 17 октября 2015

Я тоже здесь добавлю свое решение. По сути, это довольно простая оболочка bash-скрипта вокруг git filter-branch. Как и другие решения, он переносит только основные ветви и не переносит теги. Но полная история генерации коммитов перенесена, и это короткий скрипт bash, поэтому пользователям должно быть относительно легко просматривать или настраивать.

https://github.com/Oakleon/git-join-repos

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...