git包:创建选择性;“受保护”;和优化包?

git包:创建选择性;“受保护”;和优化包?,git,Git,$dayjob的主存储库相当大,既有相对稳定的“仅更新”分支,也有相当积极的更新和重写开发和集成分支 git-gc--aggressive(或者通过--repack的更激进的策略)工作良好,可以显著提高存储库的大小,但是它们重新打包整个存储库,这意味着它们将来自开发分支的一堆即将成为垃圾的东西与稳定分支一起打包 有没有一种简单的方法可以给git提供一个应该打包在一起的“稳定”分支的列表,并且可能只进行增量更新,除非该包被明确标记为替换或类似的内容?git的标准GC行为没有任何选项来控制这样打包在

$dayjob的主存储库相当大,既有相对稳定的“仅更新”分支,也有相当积极的更新和重写开发和集成分支

git-gc--aggressive
(或者通过
--repack
的更激进的策略)工作良好,可以显著提高存储库的大小,但是它们重新打包整个存储库,这意味着它们将来自开发分支的一堆即将成为垃圾的东西与稳定分支一起打包


有没有一种简单的方法可以给git提供一个应该打包在一起的“稳定”分支的列表,并且可能只进行增量更新,除非该包被明确标记为替换或类似的内容?

git的标准GC行为没有任何选项来控制这样打包在一起的内容。默认情况下,它会将未打包的对象打包到一个包中,如果包太多(默认情况下为50个),则会将对象重新打包到一个大包中

如果您想创建一个经过优化的特定包,并且无论发生什么都要保留它,您可以执行以下操作:

tmpdir=$(mktemp -d)
# Adjust to print whatever refs you want.
echo refs/heads/master | git pack-objects --revs --progress $tmpdir/pack
touch "$tmpdir/$(basename "$tmpdir/"*.pack .pack).keep"
mv "$tmpdir/"* .git/objects/pack/
rm -fr "$tmpdir"
这将把所有引用(在我的示例中是,
master
)打包成一个包,并将其标记为与
.keep
文件一起保存。如果有足够的松散物品,其他物品仍将被包装

如果要重新打包存储库,请删除现有的
。保留
文件,然后再次运行这些命令

如果您想要一个更具攻击性的打包,您可以向将生成这种打包的
git-pack对象
传递额外的参数

如果您使用标准的托管解决方案,那么服务器端应该以合理的间隔在服务器上自动打包