【问题标题】:How to prevent a Git repository growing above a maximum size?如何防止 Git 存储库超过最大大小?
【发布时间】:2017-12-13 11:05:30
【问题描述】:

有一个存储库,您需要在其中控制其大小,并在超出限制的情况下 - 阻止任何更改。如何实现?

【问题讨论】:

  • 如果你达到门槛并阻塞,那么你的开发工作将如何继续?我认为更好的方法是确保您将真正大而坏的东西排除在回购之外,例如大型二进制文件。
  • 任务是故意限制git仓库的大小。
  • 不是通过阻塞来解决问题,你已经看过 Git 虚拟文件系统了吗? github.com/Microsoft/GVFS 这使得庞大的存储库可以完美运行。
  • 您可以使用挂钩来检查跟踪文件的组合大小。
  • 另请注意,“存储库的大小”是一件很挑剔的事情,因为垃圾收集和打包也会使其下降。例如,在增长到/超过目标大小之后,如果我及时强制推送一个分支以摆脱提交,或者删除一些分支怎么办?您是否应该再次允许更改?

标签: git


【解决方案1】:

.git/hooks/pre-receive

#!/bin/bash

# size limit 2(Gb)
sizelimit_gb=2

reposize_kb=`git count-objects -v | grep 'size-pack' | sed  's/.*\(size-pack:\).//'`
let reposize_b=$reposize_kb*1024
let sizelimit_b=$sizelimit_gb*1024*1024*1024

if [ $reposize_b -gt $sizelimit_b ]; then
    echo "Error: repository size > $sizelimit_gb Gb"
    exit 1
#else
#    echo "<= $sizelimit_gb Gb"
fi

exit 0

以上脚本必须在服务器中保存为.git/hooks/pre-receive,并启用执行权限(chmod +x .git/hooks/pre-receive)。

【讨论】:

  • 我在运行此脚本时收到警告“警告:没有相应的 .idx 或 .pack:/data/gitlab/git-data/repositories/@hashed/27/82/2782526eaa0c5c254b36d0c90e1f8c06af41d167a8b539bd3c81cd6d155e7e5f.git objects/pack/pack-01293e2926b1a7766dae5863003f065107c78c32.bitmap" 并且 Repo 大小将变为 0,而不是大约 3GB 的实际大小
  • 请帮助我@Dima Kodnik
猜你喜欢
  • 2011-03-14
  • 1970-01-01
  • 2014-09-02
  • 2021-12-02
  • 2011-01-08
  • 2015-08-14
  • 2020-04-23
  • 2012-01-01
相关资源
最近更新 更多