【问题标题】:Remove all ignored files from the git history, but not from local filesystem从 git 历史记录中删除所有被忽略的文件,但不从本地文件系统中删除
【发布时间】:2013-11-11 00:32:35
【问题描述】:

有几个关于从 git 历史记录中删除某些文件的问题(即Remove a file from a Git repository without deleting it from the local filesystem)。但是,我找不到从历史记录中删除所有 .gitignore 文件的方法。问题是我有一个个人本地存储库并且不太关心被忽略的文件,但现在我需要共享它,并且由于大量不相关的 *.csv、*.zip 和 *.zip 和其它文件。它们分布在相当多的目录之间,很难一个接一个地执行此任务。

那么,是否可以对具有特定扩展名的所有文件执行git rm --cached

【问题讨论】:

    标签: git


    【解决方案1】:

    是的,git filter-branch 就是为这种任务而设计的。你可以这样做:

    git filter-branch --tree-filter 'rm *.csv *.zip' HEAD
    

    如果您想在本地工作目录中不跟踪这些文件,最好在存储库的另一个克隆中执行此操作。

    【讨论】:

    • 嗯...它抛出“无法删除`*.csv':没有这样的文件或目录”
    • 我猜 git 没有通过 shell 运行命令,所以 shell 扩展没有发生。试试--tree-filter 'sh -c "rm *.csv *.zip"'
    • 试过了,一样的。
    • 请参阅stackoverflow.com/questions/7096528/… 了解如何执行此操作的示例。
    • “树过滤器”通过外壳运行(eval-ed),问题是*.csv 没有匹配任何东西。另请注意, filter-branch 使用起来有点痛苦。有人写了BFG作为替代。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 2014-06-19
    • 2020-03-20
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 2013-03-10
    相关资源
    最近更新 更多