Как я могу преобразовать эту команду git filter-branch from tree-filter в index-filter? - PullRequest
0 голосов
/ 25 сентября 2018

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

$ shopt -s dotglob
$ git filter-branch --tree-filter 'mkdir <Subdirectory>; git mv -k * <Subdirectory>' --tag-name-filter cat --prune-empty -- --all

Это довольно медленно (часы), и мне нужно сделать это еще несколько раз.Чем заменить часть mkdir ...; git mv ..., чтобы вместо нее можно было использовать index-filter?В большинстве примеров, которые я могу найти только для индексного фильтра, используется git rm.

1 Ответ

0 голосов
/ 25 сентября 2018

Это глупо.Я попробовал следующее, и оно работало быстро, но оно скопировало , а не двигалось .Но я попробовал это снова, и это сработало, так что я думаю, что в первый раз сделал что-то странное.

$ git filter-branch --index-filter 'git ls-files -s | sed "s-\t\"*-&Subdirectory/-" | GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info && mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' --tag-name-filter cat -- --all
...