Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 理解git filter branch为什么不清理我的历史记录_Bash_Git_Shell_Unix - Fatal编程技术网

Bash 理解git filter branch为什么不清理我的历史记录

Bash 理解git filter branch为什么不清理我的历史记录,bash,git,shell,unix,Bash,Git,Shell,Unix,我用gitleaks检查我回购历史中泄露的秘密。当我运行下面的命令并强制推 git filter-branch --force --index-filter \ 'git rm -r --cached --ignore-unmatch terra/fixtures.go' \ --prune-empty --tag-name-filter cat -- --all 它似乎起了作用,但我注意到以下几点: WARNING: Ref 'refs/heads/automate_tests' i

我用gitleaks检查我回购历史中泄露的秘密。当我运行下面的命令并强制推

git filter-branch --force --index-filter \
  'git rm -r --cached --ignore-unmatch terra/fixtures.go' \
  --prune-empty --tag-name-filter cat -- --all
它似乎起了作用,但我注意到以下几点:

WARNING: Ref 'refs/heads/automate_tests' is unchanged
WARNING: Ref 'refs/heads/ethRawTransaction' is unchanged
WARNING: Ref 'refs/heads/feature/177/leave-bastion' is unchanged
WARNING: Ref 'refs/heads/feature/FAQ' is unchanged
WARNING: Ref 'refs/heads/master' is unchanged
WARNING: Ref 'refs/heads/mjolnir' is unchanged
WARNING: Ref 'refs/heads/tmp' is unchanged
WARNING: Ref 'refs/remotes/origin/master' is unchanged
WARNING: Ref 'refs/remotes/origin/automate_tests' is unchanged
WARNING: Ref 'refs/remotes/origin/bug/0.0.11-beta-fix' is unchanged
WARNING: Ref 'refs/remotes/origin/bug/bastion-ssh' is unchanged
WARNING: Ref 'refs/remotes/origin/bug/fix-examples-merge' is unchanged
WARNING: Ref 'refs/remotes/origin/develop' is unchanged
WARNING: Ref 'refs/remotes/origin/ethRawTransaction' is unchanged
WARNING: Ref 'refs/remotes/origin/feature/168/auto-ssh-to-bastion' is unchanged
WARNING: Ref 'refs/remotes/origin/feature/169/ethstats_for_pantheon' is unchanged
WARNING: Ref 'refs/remotes/origin/feature/175/ssh-to-certain-nodes' is unchanged
WARNING: Ref 'refs/remotes/origin/feature/176/tagging-nodes-to-ips' is unchanged
WARNING: Ref 'refs/remotes/origin/feature/177/leave-bastion' is unchanged
WARNING: Ref 'refs/remotes/origin/feature/FAQ' is unchanged
WARNING: Ref 'refs/remotes/origin/feature/README' is unchanged
WARNING: Ref 'refs/remotes/origin/master' is unchanged
WARNING: Ref 'refs/remotes/origin/mjolnir' is unchanged
WARNING: Ref 'refs/remotes/origin/tmp' is unchanged
WARNING: Ref 'refs/tags/0.0.4' is unchanged
WARNING: Ref 'refs/tags/20190820141131-866368a' is unchanged
WARNING: Ref 'refs/tags/20190820142202-bd96767' is unchanged
WARNING: Ref 'refs/tags/20190820143451-fc7f46a' is unchanged
WARNING: Ref 'refs/tags/20190820143903-832818a' is unchanged
WARNING: Ref 'refs/tags/20190820150546-05e3105' is unchanged
WARNING: Ref 'refs/tags/20190820154631-da0cdab' is unchanged
WARNING: Ref 'refs/tags/20190820160956-047caa6' is unchanged
WARNING: Ref 'refs/tags/20190820162243-a300fa5' is unchanged
WARNING: Ref 'refs/tags/20190820170410-47f8878' is unchanged
WARNING: Ref 'refs/tags/untagged-f148f02c4d71ed0bea99' is unchanged
WARNING: Ref 'refs/tags/v.0.0.1' is unchanged
WARNING: Ref 'refs/tags/v0.0.1' is unchanged
WARNING: Ref 'refs/tags/v0.0.1-alpha' is unchanged
WARNING: Ref 'refs/tags/v0.0.10' is unchanged
WARNING: Ref 'refs/tags/v0.0.11-beta' is unchanged
WARNING: Ref 'refs/tags/v0.0.14' is unchanged
WARNING: Ref 'refs/tags/v0.0.3-alpha' is unchanged
WARNING: Ref 'refs/tags/v0.0.4-chaos-poc' is unchanged
因此,泄漏的数量似乎没有下降


我不明白为什么会发生这种情况,希望您能给我一些建议。

尝试使用双引号

git filter-branch --force --index-filter \
  "git rm -r --cached --ignore-unmatch 'terra/fixtures.go'" \
  --prune-empty --tag-name-filter cat -- --all
试着换一种方法,它

默认情况下,此新命令适用于所有分支。
然后一个
git push--all--force
,覆盖远程存储库的历史记录。

git filter branch报告为未更改的引用在其历史记录中没有名为
terra/fixtures.go
的文件。Filter branch通知您,尽管您要求它更新这些分支名称以指向任何复制的提交,但在该过程中实际上没有复制任何提交

查找具有此类文件的可访问提交散列ID的列表,然后在此类散列ID上运行
git branch--contains
,可能会很有趣。见下文

哪些提交包含文件F? 请注意,这是对不同问题的不同回答。它也不寻找某些路径名被修改的提交,而是寻找存在某些路径名的提交

我们首先使用
git rev list
列出所有提交:

git rev-list --all |
git rev list
的输出只是一个列表,其中列出了可从指定修订版访问的每个提交哈希ID。在这种情况下,
--all
命名所有分支和标记,以及其他引用,如
refs/stash
,但不命名任何reflog条目

然后,对于列出的每个提交,我们要测试此提交是否包含命名文件。在这一点上,您通常需要很多可编程性。例如,假设文件名为
a/b/c.txt
。是否还要查找
A/B/C.TXT
?如果您使用的是Windows或MacOS,您可能会。如果您使用的是Linux,可能不会。或者,您可能想查找名称以某种模式开头或结尾的任何文件

我们将在这里使用
gitls tree-r
,它列出所有文件名,然后通过搜索和状态命令(如
grep
)运行它们。请注意,
grep
搜索正则表达式,而不是glob模式,因此
a*b
表示零个或多个
a
字符后跟
b
字符,并将与字符串“abc.txt”、“b”、“flobby”等匹配:这些字符串都有零个或多个
a
s后跟
b
。我们将让实际匹配的姓名显示出来,以便用户可以在需要时应用进一步的筛选:

git rev-list --all |
    while read hash; do
        git ls-tree -r $hash > /tmp/files
        if grep -s 'terra/fixtures\.go' /tmp/files; then
            echo "commit ${hash} :"
            grep 'terra/fixtures\.go' /tmp/files
        fi
    done
rm /tmp/files
这组命令的输出可能应该放在一个文件中,我还没有测试过,并且可能包含错误,它是一个适合提取的提交哈希ID列表,但后面紧跟着匹配的名称:您可能应该放弃匹配,例如,
sputera/fixtures.gobble

(可以编写更精确匹配的fancier
grep
模式。在这种情况下,使用
^
$
锚定正则表达式就足够了。在更复杂的情况下,需要更复杂的正则表达式。我将这留给使用代码的人。)

获得散列ID后,运行上述操作并重定向到文件,清理文件,然后提取更有趣的散列ID,然后执行以下操作:

git branch --contains <hash>
git分支——包含

在任何给定的提交哈希上,查看哪些分支包含该特定提交。请注意,可能有零个或多个分支包含任何给定的提交。更多信息,请阅读并理解。

谢谢!我发现:
git:'filter repo'不是git命令。请参阅“git--help”。
<代码>git--版本git 2.21.0(Apple git-122)@SamuelDare是:您需要首先在路径中安装它:尝试使用Makefile,即make install,但得到以下结果:
SamuelDare$make installmkdir-p man1 git show docs:man1/git filter repo.1>Documentation/man1/git filter repo.1/bin/sh:Documentation/man1/git filter repo.1:没有这样的文件或目录make:**[文档/man1/git filter repo.1]错误1
@SamuelDare No make required.克隆repo并将文件夹添加到您的路径中。谢谢!!现在我得到了这个
错误:需要一个git版本,它的diff-tree命令具有--combined all PATH选项
谢谢您的帮助!您能解释一下怎么做吗
找到一个可访问的提交哈希ID列表可能会很有趣我没有这样的文件,然后在这样的散列ID上运行git branch--contains。)
git branch --contains <hash>