【发布时间】:2019-12-28 04:32:33
【问题描述】:
我已经向我的本地存储库提交了一堆尚未发布的敏感数据。
敏感数据分散在项目的不同文件夹中,我想从 git 历史记录中完全删除所有这些。
所有相关文件夹同名,并且在不同文件夹的目录中处于同一级别。以下是我的文件夹结构示例:
root
folder1
./sensitiveData
folder2
./sensitiveData
folder3
./sensitiveData
使用以下命令,我可以一次删除一个包含敏感数据的文件夹:
git filter-branch -f --index-filter 'git rm -r --cached --ignore-unmatch javascript/folder1/.sensitiveData' --prune-empty HEAD
但是我想一次性删除所有包含敏感数据的文件夹,因为它们太多了,我想了解它是如何工作的。
但是使用下面的命令,什么都没有被重写,我被警告'refs/heads/master' is unchanged 没有改变:
git filter-branch -f --index-filter 'git rm -r --cached --ignore-unmatch javascript/*/.sensitiveData' --prune-empty HEAD
在我看来,有两种策略:
- 要么我的模式有问题,我需要更改它。
- 或者我应该用 bash 做一些循环。
如果可能的话,选项一似乎更明智。
【问题讨论】:
-
你似乎需要一个完整的脚本,而不是单行脚本,你可以在其中做任何你想做的事情。
-
所以
*在这种情况下不会展开? -
我不知道,但即使是这样,如果有很多文件夹,您的命令行可能会太长。这种方法最初是错误的。
-
地址是相对的,因此不会比您在命令中看到的三个级别更深。
标签: bash git git-filter-branch