Наши репозитории Git начинались как часть единственного репозитория SVN-монстра, в котором каждый отдельный проект имел свое собственное дерево:
project1/branches
/tags
/trunk
project2/branches
/tags
/trunk
Очевидно, было довольно легко перемещать файлы из одного в другое с помощью svn mv
. Но в Git каждый проект находится в собственном репозитории, и сегодня меня попросили переместить подкаталог из project2
в project1
. Я сделал что-то вроде этого:
$ git clone project2
$ cd project2
$ git filter-branch --subdirectory-filter deeply/buried/java/source/directory/A -- --all
$ git remote rm origin # so I don't accidentally the repo ;-)
$ mkdir -p deeply/buried/different/java/source/directory/B
$ for f in *.java; do
> git mv $f deeply/buried/different/java/source/directory/B
> done
$ git commit -m "moved files to new subdirectory"
$ cd ..
$
$ git clone project1
$ cd project1
$ git remote add p2 ../project2
$ git fetch p2
$ git branch p2 remotes/p2/master
$ git merge p2 # --allow-unrelated-histories for git 2.9
$ git remote rm p2
$ git push
Но это кажется довольно запутанным. Есть ли лучший способ сделать это вообще? Или я принял правильный подход?
Обратите внимание, что это связано с объединением истории в существующий репозиторий, а не просто созданием нового автономного репозитория из части другого (как в более раннем вопросе).