我四处搜索并找到了一些相关的主题,但它们都与限制文件大小或有关配额的担忧有关。
我用Gitolite建立了一个Git服务器,供学生分享课程项目。它都在服务器上的一个用户名下运行,git,带有通配符存储库“projects / Creator / [a-zA-Z0-9]。*”。存储库定义了WRITERS和READERS,因此用户可以修改谁可以编写和读取其存储库。
实施SSH密钥文件,以便用户可以通过以下方式创建存储库:
git clone git@servername.edu:projects / bob / project1 git clone git@xervername.edu:projects / bob / someotherproj
等等。 “bob”文件夹是在他们第一次执行git clone时创建的(它是用户名)。
我的问题是,作为学生,会有滥用行为,我需要限制“bob”文件夹的大小。磁盘配额不起作用,因为所有文件夹和文件都归git所有,并且已经受到限制。
我可以重新设计它来从他们的Linux主文件夹服务他们的项目,因此能够使用磁盘配额,但是,我现在不需要重新设计这个服务器,因为我已经让它工作了。 / p>
基本上,我正在寻找一个类似于这个粗糙的shell脚本的钩子:
foldersize=`du -s $GITPATH/projects/$USERNAME`
if [ $foldersize > 250000 ]; then
echo "Quota Exceeded"
exit 1
fi
我知道有可以编写的服务器端挂钩,我想在我开始雕刻之前看看是否已经创建了滚轮。那么,任何限制存储库大小的钩子?
答案 0 :(得分:4)
git pre-receive
挂钩可用于实现配额。从
githooks(5)
手册页:
This hook is invoked by git-receive-pack on the remote repository,
which happens when a git push is done on a local repository. Just
before starting to update refs on the remote repository, the
pre-receive hook is invoked. Its exit status determines the success or
failure of the update.
所以你会把你的配额检查逻辑放在这个脚本中并允许或 根据结果拒绝传入更新。这将是你的 实际执行配额管理的工作;有很多方法 要做到这一点,最简单的依赖于您的文件系统的支持 用户配额。
你当然可以使用你的du
示例,尽管随着存储库大小的增加,这会给每次更新带来很大的延迟(和i / o负担)。将脚本中的结果缓存一段时间可能会有所帮助,尽管这里的权衡很明显,如果在缓存过期之前推送更新,有人可能会超过他们的配额。
根据存储的组织方式,您可以查看git存储库的每个目录配额(如果您的存储来自支持此功能的内容,如大多数企业文件服务器),或者每个存储库使用LVM卷(如建议的那样) here)。
尽管有相反的建议,但实施了远程配额 存储库很常见。大多数git托管服务限制你的 磁盘存储,一旦达到限制就会拒绝更新。
答案 1 :(得分:0)
git没有任何实现配额的功能。我认为不会有任何理智的方式。达到配额后会发生什么?您将无法再提交,从远程存储库获取更新或任何其他维护类型活动。几乎“达到配额”==='即时死亡到存储库功能'......