有一个项目文件夹 Parent,其中有一个 child 文件夹。Parent 已经历过多次 commit,希望分离 child 为孤立的 git 。
使用的方法是:
但是隔了好久,发现有问题。因为 Parent 之前 commit 多次,而且有误操作,commit 了大文件进去。child 只有 20M,git 有 200M+。用了官方推荐的 BFG,的确能删除大文件,缩减到 100M,但还是很大。
猜测可能是 filter 的问题,child 以外的子文件夹的 git 记录还在,虽然没有大文件,但也积少成多。
现在还有没有办法理清 child 的 commit,使其摆脱 parent 的遗毒。
用 BFG 能看到的那些大文件,直接用 git log 是看不到的,都是 child 目录以外的内容。child 的 git log 是干净的。但那些属于 parent 的记忆应该还保留在某处,怎么查看呢?
1
blakejia 2020-12-27 09:47:15 +08:00
git submodule?
|
2
JCZ2MkKb5S8ZX9pq OP @blakejia 现在已经不是拆分的问题了,是整理既有的 git 历史记录的问题。
|
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 来一套
|
4
JCZ2MkKb5S8ZX9pq OP @favourstreet 应该是远超一个月了,要不是用了 BFG,我都不知道以前竟然还把 pdf 和 psd 也 commit 了。
现在从 git log 或者各个 gui 看,都只能看到 filter 的结果,也就是包含我目前目录的一些 commit 。 请问具体我怎么能看到其他的内容呢?我 git 就用些基础功能,不太熟悉,请赐教。 |
5
codehz 2020-12-27 13:08:56 +08:00
(要不你去.git/objects 里找找大文件?然后 git cat-file 的方式看看是啥内容
|
6
favourstreet 2020-12-27 13:19:05 +08:00
@JCZ2MkKb5S8ZX9pq 我只能说从楼主的措辞来看 BFG 帮楼主看到了文件名,这意味着那些文件仍在 git 管理之下,楼主最好检查一下当初 subdirectory-filter 是否漏了什么,比如漏了 branch 或 tag 之类的 refs
|
7
SoloCompany 2020-12-27 17:56:55 +08:00
用了 BFG 之后, BFG 的源文件也需要使用 filter-branch 删掉啊
|
8
JCZ2MkKb5S8ZX9pq OP |
9
newdongyuwei 2020-12-28 10:06:37 +08:00
推荐试试 git-filter-repo: https://github.com/newren/git-filter-repo
|