Извлечь данный набор файлов в хранилище - PullRequest
1 голос
/ 06 января 2020

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

git filter-branch --subdirectory-filter на самом деле не вариант, так как он принимает только один каталог. Кроме того, он не следует переименованиям, поэтому часть истории, если файл был изначально введен в другой каталог, теряется.

Мое текущее решение:

git filter-branch --tree-filter 'fd -E 3166 -X rm -rf'

Где fd быстрее find, а 3166 является уникальной частью имени файла всех извлеченных файлов. Что он делает, он проходит через все коммиты, находит все несвязанные файлы и удаляет их. Это ужасно медленно, однако, это занимает часы.

Есть ли лучший подход?

Ответы [ 2 ]

3 голосов
/ 06 января 2020

Полагаю, вы могли бы протестировать filter-repo (что рекомендовано git upstream для использования вместо filter-branch). Там вы можете указать более одной папки .... Я думаю, вы могли бы предоставить все каталоги, которые вам нужны, как "текущие", так и исторически.

https://github.com/newren/git-filter-repo

2 голосов
/ 06 января 2020

git filter-branch также имеет режим --index-filter .

Как указано в документации:

Это фильтр для перезаписи индекса. Он похож на древовидный фильтр, но не проверяет дерево, что делает его намного быстрее.

Как все еще говорится в документации: вы хотите использовать его вместе с git rm --cached [all the files that don't match your filter]

...