我无法在bash shell中将大量文件名输入到命令中(对于Windows git的git,我认为是cygwin)。
这是基本命令,可以使用少量参数运行: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] [ - 原版的 ] [-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:评估: 第414行:寻找匹配的`''C:/ Program时出现意外的EOF 文件/ 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:行 414:rm -rf .vs ./file1 ./directory2:找不到命令树过滤器 失败:'rm -rf ./file1 ./directory2'
也许单引号已被转义并且没有被包裹在rm命令周围?