亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

directory search
Guides gitattributes giteveryday gitglossary gitignore gitmodules gitrevisions gittutorial gitworkflows Administration git archive git bundle git clean git filter-branch git fsck git gc git instaweb git reflog Basic Snapshotting git add git commit git diff git mv git reset git rm git status Branching and Merging git branch git checkout git log git merge git mergetool git stash git tag Debugging git bisect git blame git grep Email git am git format-patch git request-pull git send-email External Systems git fast-import git svn Getting and Creating Projects git clone git init Git git annotate git archimport git bisect-lk2009 git check-attr git check-mailmap git check-ref-format git checkout-index git cherry git citool git column git credential git credential-cache git credential-store git cvsexportcommit git cvsimport git cvsserver git diff-files git diff-tree git difftool git fast-export git fetch-pack git fmt-merge-msg git get-tar-commit-id git gui git http-backend git http-fetch git http-push git imap-send git index-pack git interpret-trailers git ls-remote git ls-tree git mailinfo git mailsplit git merge-file git merge-index git merge-one-file git merge-tree git mktag git mktree git name-rev git notes git p4 git pack-objects git pack-redundant git pack-refs git parse-remote git patch-id git prune git prune-packed git quiltimport git receive-pack git remote-ext git remote-fd git remote-testgit git repack git replace git rerere git send-pack git sh-i18n git sh-setup git shell git show-branch git show-index git stripspace git unpack-file git unpack-objects git upload-archive git upload-pack git var git verify-commit git verify-tag git whatchanged git worktree Inspection and Comparison git describe git shortlog git show Miscellaneous api credentials api index gitcli gitcore tutorial gitcredentials gitcvs migration gitdiffcore githooks gitk gitnamespaces gitremote helpers gitrepository layout gitsubmodules gittutorial 2 gitweb gitweb.conf pack format User Manual Patching git apply git cherry-pick git rebase git revert Plumbing Commands git cat-file git check-ignore git commit-tree git count-objects git diff-index git for-each-ref git hash-object git ls-files git merge-base git read-tree git rev-list git rev-parse git show-ref git symbolic-ref git update-index git update-ref git verify-pack git write-tree Server Admin git daemon git update-server-info Setup and Config git git config git help Sharing and Updating Projects git fetch git pull git push git remote git submodule
characters

名稱

git-http-backend  -  Git 在HTTP的服務(wù)器端實現(xiàn)

概要

git http-backend

描述

一個簡單的 CGI 程序,用于向通過 http://和https://協(xié)議訪問存儲庫的 Git 客戶端提供 Git 存儲庫的內(nèi)容。該程序支持客戶端使用智能 HTTP 協(xié)議和向后兼容的愚蠢 HTTP 協(xié)議以及客戶端使用智能 HTTP 協(xié)議進(jìn)行推送。

它會驗證該目錄是否具有魔術(shù)文件“git-daemon-export-ok”,并且它會拒絕導(dǎo)出任何未明確標(biāo)記為導(dǎo)出的 Git 目錄(除非GIT_HTTP_EXPORT_ALL設(shè)置了環(huán)境變量)。

默認(rèn)情況下,只有upload-pack服務(wù)已啟用,供應(yīng)git fetch-packgit ls-remote客戶,這是從調(diào)用git fetch,git pullgit clone。如果客戶端已通過身份驗證,receive-pack則會啟用該服務(wù),該服務(wù)將為git send-pack客戶端提供服務(wù),并從中調(diào)用該服務(wù)git push。

服務(wù)

可以使用每個存儲庫配置文件啟用/禁用這些服務(wù):

http.getanyfile

這為不能使用上傳包服務(wù)的版本低于1.6.6的 Git 客戶端提供服務(wù)。啟用時,客戶端可以讀取存儲庫中的任何文件,包括不再從分支中訪問但仍存在的對象。它是默認(rèn)啟用的,但是一個存儲庫可以通過設(shè)置這個配置項來禁用它false。

http.uploadpack

這服務(wù)git fetch-packgit ls-remote客戶。它是默認(rèn)啟用的,但是一個存儲庫可以通過設(shè)置這個配置項來禁用它false。

http.receivepack

這為git send-pack客戶提供服務(wù),從而推動。默認(rèn)情況下,它對于匿名用戶是禁用的,并且默認(rèn)情況下為 Web 服務(wù)器驗證的用戶啟用??梢酝ㄟ^將該項目設(shè)置為false或禁用所有用戶(包括匿名用戶),將其設(shè)置為true。

網(wǎng)址翻譯

要確定存儲庫在磁盤上的位置,需要git http-backend連接由 Web 服務(wù)器自動設(shè)置的環(huán)境變量 PATH_INFO 和必須在 Web 服務(wù)器配置中手動設(shè)置的 GIT_PROJECT_ROOT。如果未設(shè)置 GIT_PROJECT_ROOT,則git http-backend讀取 PATH_TRANSLATED,它也由 Web 服務(wù)器自動設(shè)置。

示例

以下所有示例都映射http://$hostname/git/foo/bar.git/var/www/git/foo/bar.git。

Apache 2.x

確保已啟用mod_cgi,mod_alias 和 mod_env,并正確設(shè)置 GIT_PROJECT_ROOT(或DocumentRoot),并為 CGI 創(chuàng)建一個 ScriptAlias:

SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/

要啟用匿名讀取訪問但授權(quán)寫入訪問,需要授權(quán)初始引用廣告(我們通過查詢字符串中的服務(wù)參數(shù)檢測為推送)以及接收包調(diào)用本身:

RewriteCond %{QUERY_STRING} service=git-receive-pack [OR]RewriteCond %{REQUEST_URI} /git-receive-pack$
RewriteRule ^/git/ - [E=AUTHREQUIRED:yes]<LocationMatch "^/git/">
        Order Deny,Allow
        Deny from env=AUTHREQUIRED

        AuthType Basic
        AuthName "Git Access"
        Require group committers
        Satisfy Any        ...</LocationMatch>

如果您沒有mod_rewrite可用于匹配查詢字符串,則僅保護(hù)git-receive-pack自己就足夠了,如:

<LocationMatch "^/git/.*/git-receive-pack$">
        AuthType Basic
        AuthName "Git Access"
        Require group committers        ...</LocationMatch>

在這種模式下,服務(wù)器將不會請求認(rèn)證,直到客戶端實際啟動推送的對象協(xié)商階段,而不是在初始聯(lián)系期間。出于這個原因,您還必須http.receivepack在任何應(yīng)該接受推送的存儲庫中啟用配置選項。默認(rèn)行為如果http.receivepack未設(shè)置,則拒絕未經(jīng)身份驗證的用戶進(jìn)行的任何推送; 因此最初的請求會403 Forbidden向客戶報告,甚至沒有提供認(rèn)證的機(jī)會。

要對讀取和寫入進(jìn)行身份驗證,請在存儲庫或其父目錄之一使用 Location 指令:

<Location /git/private>
        AuthType Basic
        AuthName "Private Git Access"
        Require group committers        ...</Location>

要在相同的 url 上提供 gitweb,請使用 ScriptAliasMatch 僅git http-backend處理那些可以處理的 URL ,然后將其余的轉(zhuǎn)發(fā)到 gitweb:

ScriptAliasMatch \        "(?x)^/git/(.*/(HEAD | \
                        info/refs | \
                        objects/(info/[^/]+ | \
                                 [0-9a-f]{2}/[0-9a-f]{38} | \
                                 pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
                        git-(upload|receive)-pack))$" \        /usr/libexec/git-core/git-http-backend/$1ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/

要在單個存儲庫中提供來自不同 gitnamespaces [7]的多個存儲庫:

SetEnvIf Request_URI "^/git/([^/]*)" GIT_NAMESPACE=$1ScriptAliasMatch ^/git/[^/]*(.*) /usr/libexec/git-core/git-http-backend/storage.git$1

Accelerated static Apache 2.x

與上面類似,但 Apache 可用于返回存儲在磁盤上的靜態(tài)文件。在許多系統(tǒng)上,這可能更有效,因為 Apache 可以要求內(nèi)核將文件內(nèi)容從文件系統(tǒng)直接復(fù)制到網(wǎng)絡(luò):

SetEnv GIT_PROJECT_ROOT /var/www/git

AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$          /var/www/git/$1AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/

這可以與 gitweb 配置結(jié)合使用:

SetEnv GIT_PROJECT_ROOT /var/www/git

AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$          /var/www/git/$1AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1ScriptAliasMatch \        "(?x)^/git/(.*/(HEAD | \
                        info/refs | \
                        objects/info/[^/]+ | \
                        git-(upload|receive)-pack))$" \        /usr/libexec/git-core/git-http-backend/$1ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/

Lighttpd

確保mod_cgimod_alias,mod_authmod_setenv加載,然后設(shè)置GIT_PROJECT_ROOT適當(dāng)?shù)暮椭囟ㄏ虻?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["querystring"] =~ "service=git-receive-pack" {
        include "git-auth.conf"}$HTTP["url"] =~ "^/git/.*/git-receive-pack$" {
        include "git-auth.conf"}

git-auth.conf某些地方看起來類似:

auth.require = (        "/" => (                "method" => "basic",                "realm" => "Git Access",                "require" => "valid-user"               ))# ...and set up auth.backend here

要求讀取和寫入驗證:

$HTTP["url"] =~ "^/git/private" {
        include "git-auth.conf"}

環(huán)境

git http-backend依賴于CGI調(diào)用 Web 服務(wù)器設(shè)置的環(huán)境變量,包括:

  • PATH_INFO (if GIT_PROJECT_ROOT is set, otherwise PATH_TRANSLATED)

  • REMOTE_USER

  • REMOTE_ADDR

  • CONTENT_TYPE

  • QUERY_STRING

  • REQUEST_METHOD

在允許導(dǎo)出該存儲庫之前,可以將GIT_HTTP_EXPORT_ALL環(huán)境變量傳遞給git-http-backend繞過每個存儲庫中“git-daemon-export-ok”文件的檢查。

GIT_HTTP_MAX_REQUEST_BUFFER環(huán)境變量(或http.maxRequestBuffer配置變量)可以被設(shè)置為改變最大 REF 協(xié)商請求中取回 git 會處理; 任何需要較大緩沖區(qū)的獲取都不會成功。通常不需要更改此值,但是如果從具有極大數(shù)量的引用的存儲庫中提取,可能會有所幫助。該值可以用單位指定(例如,100M代表100兆字節(jié))。默認(rèn)值是10兆字節(jié)。

后端進(jìn)程將 GIT_COMMITTER_NAME 設(shè)置為,$REMOTE_USER和將GIT_COMMITTER_EMAIL 設(shè)置為,以${REMOTE_USER}@http.${REMOTE_ADDR}確保git-receive-pack創(chuàng)建的任何reflog 包含執(zhí)行推送的遠(yuǎn)程用戶的一些標(biāo)識信息。

所有的CGI環(huán)境變量都可用于每個被git-receive-pack調(diào)用的鉤子。

Previous article: Next article: