gpt4 book ai didi

git - 是否有 Git Server Side Hook 可以为存储库大小设置配额?

转载 作者:太空狗 更新时间:2023-10-29 13:02:30 24 4
gpt4 key购买 nike

我四处搜索并找到了一些相关主题,但它们都与限制文件大小或担心存在配额有关。

我用 Gitolite 构建了一个 Git 服务器,供学生共享类(class)项目。这一切都在服务器上的一个用户名下运行,git,带有通配符存储库“projects/Creator/[a-zA-Z0-9].*”。存储库定义了 WRITERS 和 READERS,因此用户可以修改谁可以写入和读取他们的存储库。

已实现 SSH key 文件,因此用户只需通过以下方式创建存储库:

git clone git@servername.edu:projects/bob/project1git clone git@xervername.edu:projects/bob/someotherproj

等等。 “bob”文件夹是在他们第一次执行 git 克隆时创建的(这是他们的用户名)。

我的问题是,作为学生,会有虐待行为,我需要限制“bob”文件夹的大小。磁盘配额不起作用,因为所有文件夹和文件都归 git 所有,并且已经受到限制。

我可能可以重新设计它以从他们的 Linux 主文件夹为他们的项目提供服务,从而能够使用磁盘配额,但是,我宁愿不必重新设计这个服务器,因为我已经可以工作了。

本质上,我正在寻找一个钩子(Hook)来做类似这个粗糙的 shell 脚本的事情:

foldersize=`du -s $GITPATH/projects/$USERNAME`
if [ $foldersize > 250000 ]; then
echo "Quota Exceeded"
exit 1
fi

我知道可以编写服务器端 Hook ,我想在开始雕刻之前查看轮子是否已经创建。那么,是否有限制存储库大小的 Hook ?

最佳答案

git pre-receive 钩子(Hook)可以用来实现配额。从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 托管服务限制你的磁盘存储,一旦达到限制将拒绝更新。

关于git - 是否有 Git Server Side Hook 可以为存储库大小设置配额?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10914208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com