これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド git-http-backend です。
プログラム:
NAME
git-http-backend - HTTP 経由の Git のサーバー側実装
SYNOPSIS
git httpバックエンド
DESCRIPTION
アクセスする Git クライアントに Git リポジトリのコンテンツを提供する単純な CGI プログラム
http:// および https:// プロトコルを介したリポジトリ。 プログラムはクライアントのフェッチをサポートしています
スマート HTTP プロトコルと下位互換性のあるダム HTTP プロトコルの両方を使用します。
スマート HTTP プロトコルを使用してプッシュするクライアントも同様です。
ディレクトリにマジック ファイル「git-daemon-export-ok」があることを確認し、
この方法で明示的にエクスポート対象としてマークされていない Git ディレクトリのエクスポートを拒否します
(GIT_HTTP_EXPORT_ALL 環境変数が設定されている場合を除く)。
デフォルトでは、アップロード パック サービスのみが有効になっています。 git フェッチパック git
ls-リモート から呼び出されるクライアント git フェッチ, git プル, git 。 もし
クライアントが認証され、受信パック サービスが有効になり、 git 送信パック
から呼び出されるクライアント git プッシュ.
サービス
これらのサービスは、リポジトリごとの構成ファイルを使用して有効/無効にすることができます。
http.getanyfile
これにより、アップロードを使用できないバージョン 1.6.6 より古い Git クライアントにサービスが提供されます。
パックサービス。 有効にすると、クライアントはリポジトリ内の任意のファイルを読み取ることができます。
ブランチからはアクセスできなくなったが、まだ存在しているオブジェクトも含まれます。 それ
はデフォルトで有効になっていますが、リポジトリはこの構成を設定することで無効にすることができます
項目を false に設定します。
http.uploadpack
これは役に立ちます git フェッチパック git ls-リモート クライアント。 デフォルトで有効になっていますが、
リポジトリは、この構成項目を false に設定することでこれを無効にできます。
http.receivepack
これは役に立ちます git 送信パック クライアント、プッシュを許可します。 デフォルトでは無効になっています
匿名ユーザー、および Web サーバーによって認証されたユーザーに対してデフォルトで有効になります。 それ
この項目を false に設定することで無効にするか、すべてのユーザーに対して有効にすることができます。
匿名ユーザーを true に設定します。
URL 翻訳
ディスク上のリポジトリの場所を確認するには、 git httpバックエンド を連結します
環境変数 PATH_INFO (Web サーバーによって自動的に設定されます)、および
GIT_PROJECT_ROOT。Web サーバー構成で手動で設定する必要があります。 もし
GIT_PROJECT_ROOT が設定されていません。 git httpバックエンド PATH_TRANSLATED を読み取ります。これも設定されています
Web サーバーによって自動的に実行されます。
例
次の例はすべて、http://$hostname/git/foo/bar.git を次のようにマッピングします。
/var/www/git/foo/bar.git。
アパッチ2.x
mod_cgi、mod_alias、および mod_env が有効になっていることを確認し、GIT_PROJECT_ROOT (または
DocumentRoot) を適切に変更し、CGI への ScriptAlias を作成します。
SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
匿名の読み取りアクセスと認証された書き込みアクセスを有効にするには、承認が必要です
両方の最初の ref アドバタイズメント (サービスを介したプッシュとして検出)
クエリ文字列内のパラメータ)、および受信パックの呼び出し自体:
RewriteCond %{QUERY_STRING} service=git-receive-pack [OR]
RewriteCond %{REQUEST_URI} /git-receive-pack$
RewriteRule ^/git/ - [E=AUTHREQUIRED:yes]
注文拒否、許可
env=AUTHREQUIRED からの拒否
AuthTypeディレクティブの基本
認証名「Git Access」
グループコミッターが必要
どれも満足
...
クエリ文字列と照合できる mod_rewrite がない場合は、
次のように git-receive-pack 自体を保護するだけで十分です。
AuthTypeディレクティブの基本
認証名「Git Access」
グループコミッターが必要
...
このモードでは、サーバーはクライアントが実際に認証するまで認証を要求しません。
最初の段階ではなく、プッシュのオブジェクト ネゴシエーション フェーズを開始します。
接触。 このため、http.receivepack 構成オプションも有効にする必要があります。
プッシュを受け入れる必要があるリポジトリ。 http.receivepack の場合のデフォルトの動作
設定されていない場合は、認証されていないユーザーによるプッシュを拒否します。 最初のリクエストは
したがって、クライアントに403 Forbiddenを報告する機会も与えずに、
認証。
読み取りと書き込みの両方で認証を要求するには、次のように Location ディレクティブを使用します。
リポジトリ、またはその親ディレクトリの XNUMX つ:
AuthTypeディレクティブの基本
認証名 "プライベート Git アクセス"
グループコミッターが必要
...
同じ URL で gitweb を提供するには、次の URL にのみ ScriptAliasMatch を使用します。 git
httpバックエンド 処理し、残りを gitweb に転送できます。
ScriptAliasMatch \
"(?x)^/git/(.*/(HEAD | \
情報/参照 | \
オブジェクト/(情報/[^/]+ | \
[0-9a-f]{2}/[0-9a-f]{38} | \
Pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
git-(アップロード|受信)-パック))$" \
/usr/libexec/git-core/git-http-backend/$1
ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/
異なるリポジトリから複数のリポジトリを提供するには git名前空間(7) 単一のリポジトリ内:
SetEnvIf Request_URI "^/git/([^/]*)" GIT_NAMESPACE=$1
ScriptAliasMatch ^/git/[^/]*(.*) /usr/libexec/git-core/git-http-backend/storage.git$1
高速化された静的 Apache 2.x
上記と似ていますが、Apache を使用して、に保存されている静的ファイルを返すことができます。
ディスク。 多くのシステムでは、Apache がカーネルにコピーを要求できるため、これがより効率的になる可能性があります。
ファイルの内容をファイル システムからネットワークに直接送信します。
SetEnv GIT_PROJECT_ROOT /var/www/git
AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1
AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
これは gitweb 設定と組み合わせることができます。
SetEnv GIT_PROJECT_ROOT /var/www/git
AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1
AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1
ScriptAliasMatch \
"(?x)^/git/(.*/(HEAD | \
情報/参照 | \
オブジェクト/情報/[^/]+ | \
git-(アップロード|受信)-パック))$" \
/usr/libexec/git-core/git-http-backend/$1
ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/
Lighttpd
mod_cgi、mod_alias、mod_auth、mod_setenv がロードされていることを確認してから、
GIT_PROJECT_ROOT を適切に設定し、すべてのリクエストを CGI にリダイレクトします。
alias.url += ( "/git" => "/usr/lib/git-core/git-http-backend")
$HTTP["url"] =~ "^/git" {
cgi.assign = ("" => "")
setenv.add-environment = (
"GIT_PROJECT_ROOT" => "/var/www/git",
"GIT_HTTP_EXPORT_ALL" => ""
)
}
匿名の読み取りアクセスと認証された書き込みアクセスを有効にするには、次の手順を実行します。
$HTTP["クエリ文字列"] =~ "service=git-receive-pack" {
「git-auth.conf」を含める
}
$HTTP["url"] =~ "^/git/.*/git-receive-pack$" {
「git-auth.conf」を含める
}
git-auth.conf は次のようになります。
認証が必要 = (
"/" => (
「メソッド」=>「基本」、
"レルム" => "Git Access",
"require" => "有効なユーザー"
)
)
# ...ここで auth.backend を設定します
読み取りと書き込みの両方で認証を要求するには:
$HTTP["url"] =~ "^/git/private" {
「git-auth.conf」を含める
}
ENVIRONMENT
git httpバックエンド 呼び出し元の Web サーバーによって設定された CGI 環境変数に依存します。
含みます:
· PATH_INFO (GIT_PROJECT_ROOT が設定されている場合、それ以外の場合は PATH_TRANSLATED)
· REMOTE_USER
· REMOTE_ADDR
· コンテンツタイプ
・ クエリ文字列
· REQUEST_METHOD
GIT_HTTP_EXPORT_ALL 環境変数は次のように渡される場合があります。 git-http-バックエンド バイパスする
エクスポートを許可する前に、各リポジトリ内の「git-daemon-export-ok」ファイルをチェックします。
そのリポジトリ。
GIT_HTTP_MAX_REQUEST_BUFFER 環境変数 (または http.maxRequestBuffer 構成)
変数) を設定して、git が処理する最大の ref ネゴシエーション リクエストを変更することができます。
フェッチ中。 より大きなバッファを必要とするフェッチは成功しません。 この値は、
通常は変更する必要はありませんが、リポジトリから取得する場合には役立つ場合があります
非常に多くの参照が含まれます。 値は単位で指定できます(例:100M)
100メガバイトの場合)。 デフォルトは 10 メガバイトです。
バックエンド プロセスは、GIT_COMMITTER_NAME を次のように設定します。 $REMOTE_USER および GIT_COMMITTER_EMAIL に
${REMOTE_USER}@http.${REMOTE_ADDR}によって作成されたすべての reflog が確実に実行されるようにします。 git 受信パック
プッシュを実行したリモート ユーザーの識別情報が含まれています。
すべての CGI 環境変数は、
git 受信パック.
GIT
の一部 git(1)スイート
onworks.net サービスを使用してオンラインで git-http-backend を使用する