Могу ли я переместить каталог .git для репо в родительский каталог?
У меня есть два подкаталога с репо, поэтому:
PPP/
|--ABC/
| |--.git/
| |--AAA/
| | BBB/
| | CCC/
|
|--DEF/
| |--.git/
| |--DDD/
| |--EEE/
И хотел бы объединить их в одно репо, поэтому я бы предположил, что структура каталогов будет такой:
PPP/
|--.git/
|--ABC/
| |--AAA/
| |--BBB/
| |--CCC/
|
|--DEF/
| |--DDD/
| |--EEE/
Возможно ли это?
В настоящее время несколько человек имеют репозитории на своих машинах. Насколько сложнее это делает жизнь?
Та.
Ответы
Ответ 1
Вы можете делать то, что вы описываете следующим образом:
-
Переместите содержимое ABC
в подкаталог ABC/
и исправьте историю, чтобы она выглядела так, будто она всегда была:
$ cd /path/to/ABC
$ git filter-branch --index-filter \
'git ls-files -s | sed "s-\t-&ABC/-" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
git update-index --index-info &&
mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
Теперь ваша структура каталогов ABC/ABC/your_code
-
То же самое для содержимого DEF
:
$ cd /path/to/DEF
$ git filter-branch --index-filter \
'git ls-files -s | sed "s-\t-&DEF/-" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
git update-index --index-info &&
mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
Теперь ваша структура каталогов DEF/DEF/your_code
-
Наконец, создайте репозиторий PPP
и потяните в него ABC
и DEF
:
$ mkdir /path/to/PPP
$ cd /path/to/PPP
$ git init
$ git pull /path/to/ABC
$ git pull /path/to/DEF
Теперь у вас есть PPP/ABC/your_code
и PPP/DEF/your_code
, а также вся история.
Вероятно, вы должны попросить коллег выполнить предыдущие команды в своей системе, чтобы все могли синхронизироваться.
Примечание: команды funky filter-branch
появляются на странице руководства.: -)
Ответ 2
Вам действительно нужно объединить два существующих репозитория в один репозиторий, или просто хотите сгруппировать их?
Если вы просто хотите сгруппировать их, то git -submodule будет делать то, что вы хотите: вы получите три репозитория, где верхний уровень связывается с текущими двумя.
В качестве руководства:
-
Вы должны объединить их в один репозиторий, если вы собираетесь увеличить связь между ними, чтобы не было смысла использовать одну версию репо A с другой версией репо B.
-
Вы должны использовать подмодули, если они остаются несколько отдельными (иногда бывает целесообразно работать над одним отдельно), но вы хотите, чтобы у вас была возможность работать вместе с ними (например, загружать одновременно, контрольную точку хорошо известные состояния для обоих и т.д.).
Использование подмодулей позволит избежать проблем с существующими копиями репозиториев, поскольку история не изменяется. Объединение их создаст новую историю, и людям, работающим из существующих веток, будет труднее объединить свои изменения.
Ответ 3
Мне кажется, что трудно сделать так, как вы этого хотите, потому что история обоих проектов не будет сливаться.
Мой лучший совет - создать новый репозиторий для хранения ABC и DEF, сохранив старое репо из этих двух, чтобы иметь резервное копирование истории и начать новую историю с этим новым проектом.