отфильтровывать другие файлы, уважая переименования - PullRequest
1 голос
/ 24 августа 2010

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

Простой подход к этой проблеме - просто клонировать репозиторий и затем выполнить что-то вроде

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-объектов.

...