从git存储库的历史记录中删除所有.txt文件

时间:2020-09-28 18:22:57

标签: git

本月初,我被提升为新职位并继承了一个网站。我将网站加载到git存储库中并开始工作,但是大约50次提交后,我意识到整个网站中散布着许多.txt文件,其中包含用户名和电子邮件地址。因为我已经部署了网站的完整重写,所以我不担心任何附带损害,并且希望删除存储库中每次提交中的每个.txt文件。我知道可以使用git filter-branch删除单个文件,但是我尝试对其进行扩展似乎没有任何作用。

git filter-branch --force --index-filter \           
"find . -type f | grep .txt | xargs -I {} git rm --cached --ignore-unmatch {}" \
--prune-empty --tag-name-filter cat -- --all

删除git存储库历史记录中每个.txt文件的最佳方法是什么?无需重写每个文件的整个历史记录就能做到吗?

1 个答案:

答案 0 :(得分:3)

将整个过滤器替换为

'git rm --cached --ignore-unmatch \*.txt'

带有单引号和反斜杠。

git filter-branch -f --index-filter '
        git rm --cached --ignore-unmatched \*.txt
' --prune-empty --tag-name-filter cat -- --all

当您发出命令时,单引号使所包含的过滤器文本完全不经过任何外壳处理,因此,正在运行filter-branch的外壳会看到git rm --cached --ignore-unmatch \*.txt,并且其转义处理会将其传递给通配符一直坚持git rm。 Git理解glob,因此可以从索引中删除所有.txt文件。

还有其他方法,需要牢记的是,您正在发出shell命令,构造该命令将看到的args,然后对您正在发出的命令进行filter-branch,然后发出您所提供的内容作为命令,在自己的外壳中。有语法和命令可让您控制哪个shell执行哪个扩展,这里我将单引号和嵌入式转义用作最快的类型。

相关问题