8

私は周りを検索していくつかの関連トピックを見つけましたが、それらはすべてファイルサイズの制限またはクォータがあるという懸念に関連していました。

学生がコースプロジェクトを共有できる場所として、Gitoliteを使用してGitサーバーを構築しました。これはすべて、サーバー上の1つのユーザー名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ホームフォルダーからプロジェクトを提供するためにこれを再設計して、ディスククォータを使用できるようにすることはできますが、サーバーが機能するようになったので、このサーバーを再設計する必要はありません。

基本的に、私はこのラフシェルスクリプトのようなことをするフックを探していました:

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

書き込めるサーバーサイドフックがあることは理解しています。ホイールを彫り始める前に、ホイールがすでに作成されているかどうかを確認したかったのです。では、リポジトリのサイズを制限するためのフックはありますか?

4

2 に答える 2

4

gitpre-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ボリュームを使用することができます(ここで提案されています)。

反対の提案にもかかわらず、リモートリポジトリにクォータを実装することはかなり一般的です。ほとんどのgit-hostingサービスはディスクストレージを制限し、制限に達すると更新を拒否します。

于 2012-06-06T14:36:31.260 に答える
0

git にはクォータを実装する機能がありません。それができる正気の方法はないと思います。クォータに達するとどうなりますか? コミット、リモート リポジトリからの更新のフェッチ、またはその他のメンテナンス タイプのアクティビティをいくつでも行うことができなくなります。かなり「クォータに到達」===「リポジトリ機能の即死」...

于 2012-06-06T14:12:09.293 に答える