我应该在repo clone上使用git-filter-repo还是在self hosted bare repo上使用git-filter-repo?

sirbozc5  于 2023-09-29  发布在  Git
关注(0)|答案(1)|浏览(122)

在Windows服务器上有一个自托管的git存储库(如果有人感兴趣,可以使用Bonobo)。由于二进制blob,存储库变得臃肿,我想剥离这些大blob沿着整个历史。
我看了bfg/git filter-branchbfg-ishgit filter-repo。我认为我的问题是这些不变的,但听起来git filter-repo是最值得推荐的。
最大的问题是我应该在存储库克隆(工作副本)上执行--strip-blobs-bigger-than 4M,还是应该直接操作Bobono管理的托管裸存储库?如果我在客户端克隆上执行它,那么更改将如何传播到Bonobo?这些变化将是非常基本的,它们甚至可以提交吗?
我已经备份了所有东西做了一些过滤回收分析我在gitignore中包含了blob(尽管它们的修改仍然显示为更改)。

2eafrhcq

2eafrhcq1#

我最终在托管的裸存储库上操作。看起来filter-repo是要在一个仓库的干净克隆上使用的:

git filter-repo --strip-blobs-bigger-than 4M
Aborting: Refusing to destructively overwrite repo history since
this does not look like a fresh clone.
  (expected freshly packed repo)
Please operate on a fresh clone instead.  If you want to proceed
anyway, use --force.

所以我在一个干净的克隆上重试,指令运行了,但后来我对下一步该怎么做一无所知。不存在要提交或推送的文件更改本身,“Meta数据”被修改。有趣的是,该操作还从.git/config中剥离了[remote "origin"][branch "master"],因此我需要重新建立远程和分支。
所以我决定继续修改托管的裸存储库。该工具识别出它不是一个干净的克隆:

warning: no corresponding .pack: ./objects/pack/pack-f8fc2556f0b95c1a66219fe3ad3fe41d6319a985.idx
Aborting: Refusing to destructively overwrite repo history since
this does not look like a fresh clone.
  (expected freshly packed repo)
Please operate on a fresh clone instead.  If you want to proceed
anyway, use --force.

通过强制,Meta数据大小从1.3GB减少到150 MB,与在干净克隆元数据上执行类似。

> git filter-repo --force --strip-blobs-bigger-than 4M
Processed 19965 blob sizes
Parsed 3536 commits
New history written in 1.44 seconds; now repacking/cleaning...
Repacking your repo and cleaning out old unneeded objects
Enumerating objects: 42458, done.
Counting objects: 100% (42458/42458), done.
Delta compression using up to 8 threads
Compressing objects: 100% (12993/12993), done.
Writing objects: 100% (42458/42458), done.
Selecting bitmap commits: 3257, done.
Building bitmaps: 100% (137/137), done.
Total 42458 (delta 33284), reused 37896 (delta 29067), pack-reused 0
Removing duplicate objects: 100% (256/256), done.
Completely finished after 10.20 seconds.

这恰好是一个Windows环境,在那之后我开始了一个干净的克隆,我不得不重新信任Visual Studio中的存储库。到目前为止,我可以推动一些变化,我会报告回来,如果有什么似乎不工作。
如果你正在处理由GitHub或其他git服务管理的存储库,那就是另一回事了,在这种情况下,你将无法直接访问他们管理的裸存储库。不知道在这种情况下会发生什么。我想你可以以某种方式推动Meta数据的变化?应该有人评论。

相关问题