【问题标题】:Git: need to recursively 'git rm' the contents of all bin and obj foldersGit:需要递归 'git rm' 所有 bin 和 obj 文件夹的内容
【发布时间】:2011-08-17 18:18:36
【问题描述】:

有人偶然将他们所有的 bin 和 obj 文件夹提交到我们的 repo (大约有 40 个这样的文件夹)。我想做一个git rm -r 在所有这些文件夹上。有命令吗?

【问题讨论】:

    标签: git git-stage git-clean git-rm


    【解决方案1】:

    有备份,

     find . -type d -name bin -exec git rm -r {} \;
    
     find . -type d -name obj -exec git rm -r {} \;
    

    更新

    使用 bash,您可以设置 shopt globstar,并且很开心:

     shopt -s globstar
     git rm -r **/{obj,bin}/
    

    最后,如果您需要从存储库的历史记录中删除这些,请查看 git filter-branch 并阅读 Pro Git Book 中的 '删除对象' 部分>

    【讨论】:

    • 添加了对 filter-branch 和 pro git book、bash globstar 选项的引用
    • +1 用于显示对我来说是新的 2 星号 globstar
    • -1 不使用 git clean。它适用于这些情况。
    • 不正确。如果它包含其他包含正确更改的文件,请将提交标记为编辑。取消暂存 obj/bin 文件夹文件并 rebase --continue。问题解决了。我不敢相信这个答案得到了抽动。不使用 Git 并诉诸“查找”,这样的失败。
    • 哇! 4 年后,您仍然可以快速回复问题!
    【解决方案2】:

    一旦你恢复(将文件保留在历史中)或重置提交,

    git reset --hard
    

    一旦这些文件被忽略,

    git clean -xdf
    

    我在重建解决方案之前使用它进行清理。即使在签出不同的分支或合并之后,似乎 vs 也会使用一些 dll。

    您不需要求助于过滤器分支。交互式变基就可以了。记住 --preserve-merges 标志。

    希望这会有所帮助。

    【讨论】:

    • 正如经常提到的,git reset --hard 是危险的建议
    • 一个臃肿的历史也是如此。当然,这假设用户知道他们在做什么。
    • 什么会导致历史臃肿?我不确定你指的是什么
    • 使用revert代替reset,将dll、exe等大文件留在历史记录中。
    • 而且,这是我说的吗?我从来没有提到过 git revert
    【解决方案3】:

    另一种选择是使用git revert 还原有问题的提交。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-06
      • 2016-06-05
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 2013-04-30
      • 2013-10-11
      • 2011-10-23
      相关资源
      最近更新 更多