SVN to Git Migration: переместить выбранный набор коммитов в новый репозиторий - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь перенести очень старый svn репозиторий в git и изменить структуру каталогов.Первоначально структура хранилища svn была такой:

Стадия A

application/
            .svn
            dev/
                dev1/
                dev2/               
            test/
                test1/
                test2/
            others/
                others1/
                others2/

Через несколько лет структура изменилась на что-то вроде этого.

Стадия B

application/
            .svn
            dev1/
                dev/
                test/
                others/
            dev2/
                dev/
                test/
                others/

Содержимое

  • dev / dev1 перемещено в dev1 / dev
  • test / test1 перемещенов dev1 / test
  • others / others1 перемещено в dev1 / others

То же самое проделано и для каталога dev2.

Теперь я переместил источниккод git с использованием git svn clone, ведение всей истории коммитов.В настоящее время структура каталогов выглядит следующим образом.

Этап C

application/
            .git
            dev1/
                dev/
                test/
                others/
            dev2/
                dev/
                test/
                others/

Теперь я хочу разделить этот репозиторий на два новых репозитория, подобных этому

Этап D

dev1/
    .git
    dev/
    test/
    others/


dev2/
    .git/
    dev/
    test/
    others/

Я пробовал git filter-branch subdirectory-filter, как это.

git filter-branch --subdirectory-filter dev1 --prune-empty

, который успешно создал структуру каталогов, которую я хотел, , поддерживая всезафиксируйте историю dev1 вплоть до движения, упомянутого в Stage B.Все коммиты до того, как движение, упомянутое в Stage B, потеряно.

Я хочу добиться создания структуры каталогов, упомянутой в Stage D, поддерживая все истории коммитов всех файлов, которые присутствуют в dev1и dev2.

Важно : большинство файлов, присутствующих в dev1 и dev2, создаются даже до создания dev1 и dev2 - эти файлыпозже перешел на dev1 / dev2.

1 Ответ

0 голосов
/ 19 марта 2019

По моему мнению, вы должны создать 2 копии хранилища из стадии C - dev1 и dev2. Затем удалите каталог dev2 из репо dev1 и удалите каталог dev1 из репо dev2. Затем в обоих репозиториях переместите все подкаталоги на один уровень вверх и удалите каталоги dev1 и dev2 .

cp -a repo_c dev1
cp -a repo_c dev2

cd dev1
git rm -rf dev2
cd dev1
git mv * ..
cd ..
git rm -rf dev1
git commit -m "Restructure repository"

Повторите то же самое для dev2 обмена dev2 и dev1 .

...