Новый git-репозиторий в корневом каталоге для добавления существующего репозитория в подкаталог - PullRequest
2 голосов
/ 25 августа 2011

Я работаю над большой базой кода, которая в настоящее время не находится под контролем ревизии (да, действительно).Я работал над одним компонентом в глубоком каталоге и создал скрытое хранилище git для отслеживания моих изменений.Теперь я хочу добавить весь код в систему управления версиями и создать репозиторий для всего дерева каталогов.Я хочу, чтобы новый внешний репозиторий включал всю историю файлов во внутреннем репозитории.Я не хочу отдельных проектов или подмодулей;Я хочу быть таким, как если бы репозиторий был создан в корне дерева кода с самого начала, а внутренний репозиторий никогда не существовал.Я хочу удалить каталог .git в подкаталоге, но предпочел бы не потерять содержащуюся в нем историю ревизий.

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

Спасибо.

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Допустим, ваш компонент в /project-root/deep/path/to/component. Следующие команды будут делать то, что вы хотите:

cd /project-root/deep/path/to/component
git filter-branch --tree-filter 'mkdir -p deep/path/to/component; git mv file1 file2 file2 deep/path/to/component' HEAD
rm -rf deep
mv .git /project-root
git reset --hard

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

0 голосов
/ 25 августа 2011

Вы можете использовать filter-branch и переместить существующие файлы в текущей истории в подкаталог, в котором они будут находиться, если бы хранилище существовало в корневом каталоге проекта с самого начала:

git filter-branch \
--tree-filter '
>/dev/null mkdir -p path/from/project/root/to/current/;
mv * path/from/project/root/to/current/;
# take care of special files, e.g. .gitignore and other hidden files
mv .gitignore path/from/project/root/to/current/;
'
--tag-filter cat \
--all

После того, как это закончено, проверьте полученную историю.Если все хорошо, переместите каталог .git в корневой каталог вашего проекта;вы не должны видеть никаких неподготовленных файлов.

Я почти уверен, что есть вычислительно более дешевый способ, использующий --index-filter и команды git, но я не знаю их наизусть.

Это переписает историю, поэтому не используйте этот метод, если ваш репозиторий был разделен между несколькими разработчиками.

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