У меня проблемы с подачей большого списка имен файлов в команду в (git для windows git, я думаю, это cygwin) оболочка bash.
Это базовая команда, которая отлично работает с небольшим наборомаргументов: git filter-branch -f --tree-filter 'rm -rf file1 directory2 file3 file4'
Однако у меня около 1500 имен файлов.
Я пробовал: git filter-branch -f --tree-filter 'rm -rf file1 directory2... all 1500 names here'
, но я получаю сообщение об ошибке:
/ mingw64 / bin / git:Слишком длинный список аргументов
Я пытался использовать цикл for: git filter-branch -f --tree-filter 'for f in $(cat files.txt) ; do rm -fr "$f" ; done'
, и он проходит через цикл с ошибкой:
cat: files.txt: Нет такого файла или каталога
К вашему сведению - содержимое файла files.txt выглядит следующим образом:
./file1
./directory2
./file3
./file4
Затем я попытался: git filter-branch -f --tree-filter < cat files.txt
и cat files.txt | git filter-branch -f --tree-filter
, но я получаю ошибкио неправильном синтаксисе - он показывает диалог «помощь». Например:
использование: git filter-branch [--setup] [--subdirectory-filter] [--env-filter] [--tree-filter] [--index-filter][--parent-filter] [--msg-filter] [--commit-filter] [--tag-name-filter] [--original] [-d] [-f |--force] [--state-branch] [-] [...]
Тогда я подумал, может быть, я мог бы просто добавить аргументы в файл следующим образом: git filter-branch -f
Файл:
--tree-filter './file1 ./directory2 ./file3 ./file4'
Но я снова получаю диалог помощи.
Я уверен, что есть способ сделать это, но мой unix-fu слишкомслабый. Пожалуйста помоги!
В ответ на @ dash-o:
Я пробовал это, но получаю ошибку:
C: / Program Files / Git /mingw64 / libexec / git-core \ git-filter-branch: eval: строка 414: неожиданный EOF при поиске соответствия `'' C: / Program Files / Git / mingw64 / libexec / git-core \ git-filter-branch:eval: строка 415: синтаксическая ошибка: неожиданный конец файла
В файле files.txt перечислены файлы по одному на строку. Однако, rm -rf требует, чтобы они были в одной строке и были разделены пробелом.
Я пытался поместить имена файлов в одну строку, но я получаю другую ошибку:
C: / Program Files / Git / mingw64 / libexec / git-core \git-filter-branch: line 414: rm -rf .vs ./file1 ./directory2: команда не найдена. Фильтр дерева не выполнен: 'rm -rf ./file1 ./directory2'
Может бытьодиночные кавычки экранируются и не заключаются в команду rm?