由于历史上包含二进制测试文件和 java 文件,我们有许多git
存储库已经增长到无法管理的大小.jar
。
我们即将完成git filter-branch
这些存储库的练习,在使用它们的任何地方重新克隆它们(每个部署从几十个到数百个,取决于存储库)并且考虑到重写历史的问题,我想知道是否可能任何其他解决方案。
理想情况下,我想在不重写每个存储库的历史记录的情况下将问题文件外部化。从理论上讲,这应该是可能的,因为您正在检查相同的文件,具有相同的大小和相同的哈希值,只是从不同的地方(远程而不是本地对象存储)采购它们。唉,到目前为止,我发现的任何潜在解决方案似乎都不允许我这样做。
从git-annex开始,我能找到的最接近问题的解决方案是如何追溯附加 git repo 中已经存在的文件,但与删除大文件一样,这需要重写历史记录以进行转换原来git add
变成了一个git annex add
。
从那里继续,我开始查看列出的其他项目git-annex is not,所以我检查了git-bigfiles、git-media和git-fat。不幸的是,我们不能使用git-bigfiles fork,git
因为我们是一家 Eclipse商店并使用EGitgit
和EGit的混合物。它看起来不像git-media或git-fat可以做我想做的事,因为虽然你可以用外部等价物替换现有的大文件,但你仍然需要重写历史以删除已经存在的大文件被承诺。
那么,是否可以在不重写历史记录的情况下精简 .git 存储库,或者我们应该回到使用计划git filter-branch
和重新部署的整个负载?
顺便说一句,相信这应该git
是可能的,但可能与当前浅克隆实现的限制相同。
Git 已经支持同一个 blob 的多个可能位置,因为任何给定的 blob 都可能位于松散对象存储(而不是更高层(即,如果您愿意,可以使用按需下载远程 blob的概念)。不幸的是,我找不到任何人已经实施甚至建议过这样的事情。.git/objects
git-annex