原来 gitignore 的文件夹去除后提交推送,然后反悔了想把这个文件夹继续放到 ignore 里,怎么操作? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
whistle
V2EX    GitHub

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

  •  
  •   whistle 2016 年 6 月 13 日 4599 次点击
    这是一个创建于 3559 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    3 条回复    2016-06-24 11:44:52 +08:00
    SpicyCat
        1
    SpicyCat  
       2016 年 6 月 13 日   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 年 6 月 13 日
    万分感谢,我试试这个 bfg
    MezY
        3
    MezY  
       2016 年 6 月 24 日
    学习了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1018 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 19:15 PVG 03:15 LAX 12:15 JFK 15:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86