gpt4 book ai didi

git-rewrite-history - 从特定路径中删除文件名?

转载 作者:行者123 更新时间:2023-12-03 14:43:18 25 4
gpt4 key购买 nike

我一直在玩 BFG Repo-Cleaner 工具,以便通过从目录层次结构中的多个位置删除(临时/大)文件来清理 git repo 的历史......

IE。
/root/test/a.txt
/root/test2/a.txt

现在我想删除“test/a.txt”的所有引用,但保留/test2/a.txt 版本..

有什么方法可以使用 BFG 彻底删除它? (如 https://help.github.com/articles/remove-sensitive-data 中所述)

由于 repo 具有相当大的历史(10K 提交)BFG 确实比我迄今为止看到的其他方法快很多......

最佳答案

我是 The BFG 的开发者,我很高兴您发现它有用且快速。使 BFG 如此快速的部分特殊原因在于它是路径无关的 - 所以你不能直接说像 --delete /root/test/a.txt 这样的话.我正在考虑为依赖路径的操作添加一些支持,但我不希望它对性能产生不利影响。

清理你的 repo 时的关键问题是:在这两个选项中,你想要实现什么:

  • 减少 Git 存储库大小
  • 删除私有(private)数据

  • 从您的问题来看,听起来您唯一的目标是第一个目标,即减少 Git 存储库的大小。如果 /root/test/a.txt相当小 - 即大小与您存储库中的其他合法文件相当 - 您不能真正使用 --strip-blobs-bigger-than X摆脱它,因为它会删除太多其他常规文件。但如果是这样的话,我会放松一下,放手——与整个 repo 相比,它不会花费你太多的存储空间。

    如果 /root/test/a.txt大到足以打扰您,您可能只需使用 --strip-blobs-bigger-than X摆脱它 - 请记住,BFG 保护您当前提交中的所有文件(如果您使用 --protect-blobs-from <refs>,则保护更多分支) - 因此您当前正在使用的合法大文件不会被触及。

    如果你真的想摆脱这个可怜的无害文件,但是 不要想要过滤大小,有两个 BFG 支持的选项:

    使用 --delete-folders test
    ...这将删除整个文件夹 /root/test/ (以及所有其他名为 'test' 的文件夹),但不包括 /root/test2/ .如果 /root/test/ 里还有其他的东西,用处不大你想保留的。

    使用 --strip-blobs-with-ids <blob-ids-file>
    ...您必须查找 /root/test/a.txt 的所有 Git blob-id ,您可以使用一些 git 命令来完成,如下所示:
    git log --format=%H -- /root/test/a.txt | xargs -IcommitId git rev-parse commitId:/root/test/a.txt

    关于git-rewrite-history - 从特定路径中删除文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21142986/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com