无法使用bash脚本从git历史记录中删除文件

杰克

我正在编写的bash脚本有问题。我正在尝试从Github文档中应用此过程的步骤3,以从git历史记录中删除我们存储库历史记录中的所有文件。例如,如果.gitignore忽略.txt,我想从历史记录中删除所有.txt。对于每个.gitignore行,依此类推。

我可以在示例文件中使用通配符。因此,我可以运行以下命令删除所有.txt文件:

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *.txt' --prune-empty --tag-name-filter cat -- --all

因此,我试图制作一个bash脚本来执行相同的操作。

我制作了一个简单的.gitignore文件进行测试,如下所示:

#foo
*.txt
*.docx

我的shell脚本如下所示:

#!/bin/bash

s1="#"
str1="'git rm --cached --ignore-unmatch "
str2="'"

cat .gitignore | while read line
do
    if [[ $line == *"$s1"* ]]
    then
        echo #skip
    else
        str3=$str1$line$str2
        git filter-branch --force --index-filter $str3 --prune-empty --tag-name-filter cat -- --all
    fi
done

但是,这将导致以下输出:

fatal: bad revision 'rm'
fatal: bad revision 'rm'

(对.gitignore文件的每一行一次)

我做错了什么?

伊坦·赖斯纳

我相信这可能会做您想要的。

#!/bin/bash

cat .gitignore | while read line
do
    if [[ $line == *#* ]]
    then
        echo #skip
    else
        git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch '"$line" --prune-empty --tag-name-filter cat -- --all
    fi
done

我避免了所有只会使事情复杂化的毫无意义的中间变量。(虽然只是去除单引号str1和下降str2可能已经足够,这是理智的,据我很担心。)

过滤器只需要一个字符串,但是如何构造该字符串由您决定。

您可能还可以从gitignore收集所有模式,并只运行一次filter-branch(--force此时不需要)。

#!/bin/bash

patts=()
while read -r line
do
    if [[ $line != *#* ]]; then
        patts+=("$line")
    fi
done < .gitignore

git filter-branch --index-filter 'git rm --cached --ignore-unmatch '"${patts[*]}" --prune-empty --tag-name-filter cat -- --all

还要注意,您可能应该确保只在这里处理简单的模式,因为在我不认为的所有情况下rm.gitignore对模式的理解理解都不尽相同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法从Git历史记录中删除目录

来自分类Dev

脚本中的Bash历史记录:`!#:*`

来自分类Dev

从Bash历史记录文件中删除某行

来自分类Dev

从所有git历史记录中删除文件

来自分类Dev

从Git历史记录中删除大文件

来自分类Dev

Git-从分支的历史记录中删除文件

来自分类Dev

从 git 历史记录中删除文件的某些内容

来自分类Dev

缺少删除文件历史记录中的行 (git)

来自分类Dev

从 git 历史记录中永久删除文件

来自分类Dev

从git历史记录中删除未使用的资产

来自分类Dev

从Git历史记录中删除文件而不删除文件

来自分类Dev

如何使用bash历史记录使用历史记录中的参数运行命令?

来自分类Dev

如何在Mac上的python脚本中删除bash历史记录?

来自分类Dev

如何在Mac上的python脚本中删除bash历史记录?

来自分类Dev

bash脚本删除历史记录中的最后10行

来自分类Dev

从git历史记录中删除已删除的文件夹

来自分类Dev

从git历史记录中删除已删除的文件夹

来自分类Dev

Git:从历史记录中删除文件,这些文件的名称类似于CLI选项

来自分类Dev

从Git历史记录中删除文件夹内容(一组文件除外)

来自分类Dev

Git:从历史记录中删除文件,这些文件的名称类似于CLI选项

来自分类Dev

如何从bash历史记录中删除所选结果?

来自分类Dev

如何从bash历史记录中删除所选结果?

来自分类Dev

如何从bash历史记录中删除重复项?

来自分类Dev

从bash历史记录中删除最后N行

来自分类Dev

如何从git历史记录中完全删除提交

来自分类Dev

从git历史记录中删除提交(永远)

来自分类Dev

Git-从历史记录中删除提交

来自分类Dev

从庞大的Git存储库中删除历史记录

来自分类Dev

从历史记录中删除git commit

Related 相关文章

  1. 1

    无法从Git历史记录中删除目录

  2. 2

    脚本中的Bash历史记录:`!#:*`

  3. 3

    从Bash历史记录文件中删除某行

  4. 4

    从所有git历史记录中删除文件

  5. 5

    从Git历史记录中删除大文件

  6. 6

    Git-从分支的历史记录中删除文件

  7. 7

    从 git 历史记录中删除文件的某些内容

  8. 8

    缺少删除文件历史记录中的行 (git)

  9. 9

    从 git 历史记录中永久删除文件

  10. 10

    从git历史记录中删除未使用的资产

  11. 11

    从Git历史记录中删除文件而不删除文件

  12. 12

    如何使用bash历史记录使用历史记录中的参数运行命令?

  13. 13

    如何在Mac上的python脚本中删除bash历史记录?

  14. 14

    如何在Mac上的python脚本中删除bash历史记录?

  15. 15

    bash脚本删除历史记录中的最后10行

  16. 16

    从git历史记录中删除已删除的文件夹

  17. 17

    从git历史记录中删除已删除的文件夹

  18. 18

    Git:从历史记录中删除文件,这些文件的名称类似于CLI选项

  19. 19

    从Git历史记录中删除文件夹内容(一组文件除外)

  20. 20

    Git:从历史记录中删除文件,这些文件的名称类似于CLI选项

  21. 21

    如何从bash历史记录中删除所选结果?

  22. 22

    如何从bash历史记录中删除所选结果?

  23. 23

    如何从bash历史记录中删除重复项?

  24. 24

    从bash历史记录中删除最后N行

  25. 25

    如何从git历史记录中完全删除提交

  26. 26

    从git历史记录中删除提交(永远)

  27. 27

    Git-从历史记录中删除提交

  28. 28

    从庞大的Git存储库中删除历史记录

  29. 29

    从历史记录中删除git commit

热门标签

归档