Мне нужно переместить подпапку в новый репозиторий git, а затем повторно добавить ее как подмодуль в исходное хранилище и сохранить исходную структуру каталогов. Github help предлагают использовать
git filter-branch --prune-empty --subdirectory-filter FOLDER-NAME BRANCH-NAME
для фильтрации исходного репо, который сохраняет историю, связанную с этой папкой и т. Д. Однако этот подход не является полным, хорошо отфильтровать этот каталог и его историю из исходного репо и повторно добавить его в качестве субмодуля в тот момент, когда каталог в истории был создано.
У меня следующая структура каталогов:
/
/lib
/mylib
/server
/src
/tests
LICENSE
README.md
Команда
git filter-branch --prune-empty --subdirectory-filter lib/mylib master
перемещает источники в корень нового репо, а это не то, что я хочу. То же самое для верхнего каталога:
git filter-branch --prune-empty --subdirectory-filter lib master
сохраняет mylib
dir в отфильтрованном репо (но потенциально может захватить другие библиотеки - не в моем случае для счастливчиков) и работать немного лучше. Итак, каковы следующие шаги:
- Отфильтруйте
/lib/mylib
и его историю из исходного репо, чтобы уменьшить размер репо и улучшить его структуру (простой способ - просто удалить его и повторно добавить как подмодуль).
- Повторно добавить
/lib/mylib
репо в качестве подмодуля для сохранения структуры каталогов
- Хорошо бы повторно добавить 2-е место в истории, когда было создано
/lib/mylib
, чтобы сохранить целостность репо и возможность создания источников на любом этапе (или это не имеет смысла?).
Трудно сделать? Есть мысли?