вопрос по git Branch-Filter для разделения существующего хранилища на основе содержимого файлов - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть структура папок репо:

git-base
  custom
    app1
      app1_file.txt
      app2_file.txt
    app2
      app2_file.txt
      app2_file.txt

В app1 и app2 много файлов, и они находятся на удаленном компьютере с историей git. Мне нужно перенести пользовательскую папку в качестве нового базового репо при фильтрации файлов в приложениях app1 и app2 на основе их содержимого. Таким образом, только файлы app1_file1.txt и app2_file.txt (многие другие файлы, но только пример) являются файлами-кандидатами для нового репо.

Мой подход:

У меня есть скрипт, который перемещает все файлы, которые не являются кандидатами на новое репо в папку с именем discard (в этой папке есть подпапка с 1000 файлами). Я фиксирую (ха sh: delete123) их и git распознает их как переименования файлов.

, тогда

git filter-branch -f --index-filter 'git rm -r --cached --ignore-unmatch git-base/custom/discard/' -- --all
git filter-branch --subdirectory-filter git-base/custom/ -- --all
git reset --hard
git gc --aggressive
git prune
git clean -fd

git по-прежнему имеет историю коммитов для сброса фиксации файла ( ха sh: delet123), к которому я могу откатиться. Когда я добавляю это в новый репозиторий, я не хочу сохранять историю для удаления папки или содержимого этой папки.

Я пробовал древовидный фильтр (который по сути такой же, как индексный), но не повезло. Я не хочу делать индексный фильтр для каждого файла в папках app1 и app2, которые не являются кандидатами для нового репо. Есть ли способ удалить содержимое папки «Отменить», чтобы ее не было в новой истории репо?

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