Вы можете использовать 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, но я не знаю их наизусть.
Это переписает историю, поэтому не используйте этот метод, если ваш репозиторий был разделен между несколькими разработчиками.