переписать историю Git, чтобы сохранить репо в новом каталоге верхнего уровня - PullRequest
0 голосов
/ 06 ноября 2019

Как мне переписать историю, чтобы коммиты под корневым каталогом появлялись под новым подкаталогом?

original: foo/bar.txt
desired: newsubdir/foo/bar.txt

Я пытаюсь разделить каталог из репозитория и импортировать его в другой, но конфликтует сroot - это проблема (см. Разделение подпапки в новый репозиторий

Когда я фильтрую нужный подкаталог, он становится root с его README.md и .gitingnore, вызывая много конфликтов, когда япопробуйте перенести это в существующий репозиторий как подкаталог.

git filter-branch --prune-empty --subdirectory-filter  foo --
result:  history of /foo stored as /

Итак, я хотел бы найти способ:

  • отфильтровать все данные коммитов вне /foo, поэтому в моем исходном репо остался только / foo
  • filter-branch с фильтром подкаталога и новым префиксом

Кто-нибудь достиг такого, что у нового репо нулевая история? за пределами нового каталога?

1 Ответ

0 голосов
/ 06 ноября 2019

После сокращения можно использовать индексный фильтр для преобразования в новый подкаталог

см. документация git: git-filter-branch для этого примера

Для перемещениявсе дерево в подкаталог или удалите его оттуда:

git filter-branch --index-filter \
    'git ls-files -s | sed "s-\t\"*-&newsubdir/-" |
        GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
            git update-index --index-info &&
     mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' HEAD

К вашему сведению, некоторые sed-файлы (особенно macOS) не будут использовать \ t в качестве вкладки, и можно использовать вставленную вкладку char

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