V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
whistle
V2EX  ›  GitHub

原来 gitignore 的文件夹去除后提交推送,然后反悔了想把这个文件夹继续放到 ignore 里,怎么操作?

  •  
  •   whistle · 2016-06-13 15:52:26 +08:00 · 3677 次点击
    这是一个创建于 2846 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为什么我再加到.gitignore 里以后还是不行,并且我在 git 上删除了这个目录提交推送后还是可以正常跟踪这个目录里的文件变化?

    并且这个目录里面很多文件,导致了现在 clone 时需要下载好多的 git 日志文件,有方法清除吗?

    3 条回复    2016-06-24 11:44:52 +08:00
    SpicyCat
        1
    SpicyCat  
       2016-06-13 16:36:38 +08:00   ❤️ 4
    已经被 git 追踪的文件,简单地把文件名加到 .gitignore 里是无法取消追踪的。
    你在 .gitignore 里追加一个文件夹名字,那么这个文件夹下面新建的文件都不会被追踪,但是之前已经被追踪的文件,还是会被 git 追踪。
    想要取消追踪,有两个方法,一个简单只是治标,一个复杂但是治本。

    简单的就是 git rm xxx ,如果需要记得先备份。这个就是把文件从本地已经 git 仓库中删除,之后你再追加这些文件,.gitignore 就起作用了。但是这些文件依然存在于历史记录中,用 git log 依然能查看到,如果你不慎加入的是个大文件(比如视频)或者敏感文件(比如存了密码),那么这种方法并不适用。因为代码仓库占用的磁盘空间并不会变小,而敏感文件的内容依然可以从 log 中看到。

    复杂的就是遍历一遍 commits, 重写每个包含目标文件的 commit ,把该文件从所有 commit 里删除。这种删除比较彻底。如果你之前没有 push 过,那么这种方式使用后,你再 push ,别人不会感觉到你曾经误加过文件。
    这个工作推荐你用工具来做:

    https://rtyley.github.io/bfg-repo-cleaner/

    我用的是这个。

    如果你更倾向用 git 本身的命令来解决这个问题,也能实现。
    如果你误加文件的 commit 是最近提交的,并且数量不多,那么可以用 git rebase -i 手动更改每个有问题的 commit 。事实上,即使有问题的 commit 比较多,只要你有耐心, git rebase -i 理论上也能解决问题。
    如果你误加文件的 commit 比较多也比较久远,或者你根本记不得是哪个 commit ,那么可以用 git filter-branch ,具体可以参照这个链接

    http://stackoverflow.com/questions/307828/completely-remove-file-from-all-git-repository-commit-history

    这则问答涵盖了所有可能的方法。
    whistle
        2
    whistle  
    OP
       2016-06-13 17:22:01 +08:00
    万分感谢,我试试这个 bfg
    MezY
        3
    MezY  
       2016-06-24 11:44:52 +08:00
    学习了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5341 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 08:09 · PVG 16:09 · LAX 01:09 · JFK 04:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.