git 分离子文件夹导致的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
JCZ2MkKb5S8ZX9pq
V2EX    git

git 分离子文件夹导致的问题

  •  
  •   JCZ2MkKb5S8ZX9pq 2020-12-27 07:02:38 +08:00 2964 次点击
    这是一个创建于 1802 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 有一个项目文件夹 Parent,其中有一个 child 文件夹。Parent 已经历过多次 commit,希望分离 child 为孤立的 git 。

    • 使用的方法是:

      • 复制 Parent 为副本
      • 在副本内过滤 git filter-branch --prune-empty --subdirectory-filter child
      • 这样获得的 child 看上去是对的
      • 再去 parent 里 ignore 掉 child 就好了
    • 但是隔了好久,发现有问题。因为 Parent 之前 commit 多次,而且有误操作,commit 了大文件进去。child 只有 20M,git 有 200M+。用了官方推荐的 BFG,的确能删除大文件,缩减到 100M,但还是很大。

    • 猜测可能是 filter 的问题,child 以外的子文件夹的 git 记录还在,虽然没有大文件,但也积少成多。

    提问

    • 现在还有没有办法理清 child 的 commit,使其摆脱 parent 的遗毒。

    • 用 BFG 能看到的那些大文件,直接用 git log 是看不到的,都是 child 目录以外的内容。child 的 git log 是干净的。但那些属于 parent 的记忆应该还保留在某处,怎么查看呢?

    9 条回复    2020-12-28 10:06:37 +08:00
    blakejia
        1
    blakejia  
       2020-12-27 09:47:15 +08:00
    git submodule?
    JCZ2MkKb5S8ZX9pq
        2
    JCZ2MkKb5S8ZX9pq  
    OP
       2020-12-27 09:50:31 +08:00
    @blakejia 现在已经不是拆分的问题了,是整理既有的 git 历史记录的问题。
    favourstreet
        3
    favourstreet  
       2020-12-27 10:04:54 +08:00 via Android   1
    如果楼主以为不该存在的文件实际上却是可达的,git 说什么也不会替你删除。如果是不可达的( unreachable, dangling ),git 不会自动删除还未过一个月期限和已经打包进 pack 的 object,所以,git reflog expire --expire=now --all ; git gc --prune=now ; git repack -a -d 来一套
    JCZ2MkKb5S8ZX9pq
        4
    JCZ2MkKb5S8ZX9pq  
    OP
       2020-12-27 12:11:15 +08:00
    @favourstreet 应该是远超一个月了,要不是用了 BFG,我都不知道以前竟然还把 pdf 和 psd 也 commit 了。

    现在从 git log 或者各个 gui 看,都只能看到 filter 的结果,也就是包含我目前目录的一些 commit 。
    请问具体我怎么能看到其他的内容呢?我 git 就用些基础功能,不太熟悉,请赐教。
    codehz
        5
    codehz  
       2020-12-27 13:08:56 +08:00
    (要不你去.git/objects 里找找大文件?然后 git cat-file 的方式看看是啥内容
    favourstreet
        6
    favourstreet  
       2020-12-27 13:19:05 +08:00
    @JCZ2MkKb5S8ZX9pq 我只能说从楼主的措辞来看 BFG 帮楼主看到了文件名,这意味着那些文件仍在 git 管理之下,楼主最好检查一下当初 subdirectory-filter 是否漏了什么,比如漏了 branch 或 tag 之类的 refs
    SoloCompany
        7
    SoloCompany  
       2020-12-27 17:56:55 +08:00
    用了 BFG 之后, BFG 的源文件也需要使用 filter-branch 删掉啊
    JCZ2MkKb5S8ZX9pq
        8
    JCZ2MkKb5S8ZX9pq  
    OP
       2020-12-27 21:18:29 +08:00
    @codehz

    的确大文件就是 objects 里,我不知道怎么看它到底是啥,原本是一整个 200M 的。我去搜下你说的这个命令。
    newdongyuwei
        9
    newdongyuwei  
       2020-12-28 10:06:37 +08:00
    推荐试试 git-filter-repo: https://github.com/newren/git-filter-repo
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     967 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 124ms UTC 19:00 PVG 03:00 LAX 11:00 JFK 14:00
    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