У меня есть репозиторий, который эффективно содержит кучу разных модулей.Я хотел бы разделить его на отдельные репозитории, сохраняя историю версий файлов в этих репозиториях.
Простой подход к этой проблеме - просто клонировать репозиторий и затем выполнить что-то вроде
git filter-branch \
--tree-filter $'find -type f \
| grep -vF <(echo "file1\nfile2\n...") -- --all \
| xargs rm' --prune-empty -- --all
но это (при условии, что мой непроверенный сценарий был написан правильно) удалит все файлы с указанными именами .
Что я действительно хочу сделатьэто просмотреть историю коммитов, найти и удалить файлы, которые не стали ни одним из этих файлов.Таким образом, если file_a
был переименован в file_b
14 коммитов назад, и (текущий) file_b
должен быть частью этого репо, эти старые file_a
также должны быть сохранены в репо.
Это должно продолжаться в обоих направлениях;т. е. если есть другая ветвь, в которой file_a
никогда не переименовывался, то это действительно должно быть, ну, на самом деле, это немного двусмысленно.Определение file_a
зависит от конкретной отрасли.То, что я хочу (я думаю ..), это указать набор BLOB-объектов, например HEAD:file_b
, и сделать так, чтобы фильтр удалял все BLOB-объекты, которые не являются частью истории одного из этих BLOB-объектов.