-
1. 起步
-
2. Git 基礎
-
3. Git 分支
-
4. 伺服器上的 Git
- 4.1 協定
- 4.2 在伺服器上取得 Git
- 4.3 產生您的 SSH 公開金鑰
- 4.4 設定伺服器
- 4.5 Git Daemon
- 4.6 智慧型 HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 第三方託管選項
- 4.10 摘要
-
5. 分散式 Git
-
A1. 附錄 A:其他環境中的 Git
- A1.1 圖形介面
- A1.2 Visual Studio 中的 Git
- A1.3 Visual Studio Code 中的 Git
- A1.4 IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine 中的 Git
- A1.5 Sublime Text 中的 Git
- A1.6 Bash 中的 Git
- A1.7 Zsh 中的 Git
- A1.8 PowerShell 中的 Git
- A1.9 摘要
-
A2. 附錄 B:在您的應用程式中嵌入 Git
-
A3. 附錄 C:Git 命令
4.6 伺服器上的 Git - 智慧型 HTTP
智慧型 HTTP
我們現在可以透過 SSH 進行驗證存取,並透過 git://
進行未驗證存取,但還有一個可以同時進行兩者的協定。設定智慧型 HTTP 基本上只是啟用伺服器上隨附於 Git 的 CGI 腳本,稱為 git-http-backend
。此 CGI 將讀取由 git fetch
或 git push
發送到 HTTP URL 的路徑和標頭,並判斷客戶端是否可以透過 HTTP 進行通訊(對於任何版本 1.6.6 及以上的客戶端都是如此)。如果 CGI 看到客戶端是智慧型的,它將會與其進行智慧通訊;否則它將會退回到較舊的行為(因此它與舊客戶端的讀取相容)。
讓我們逐步完成一個非常基本的設定。我們將使用 Apache 作為 CGI 伺服器進行設定。如果您尚未設定 Apache,您可以在 Linux 機器上使用類似以下的指令進行設定
$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env
這也會啟用 mod_cgi
、mod_alias
和 mod_env
模組,這些都是正常運作所必需的。
您還需要將 /srv/git
目錄的 Unix 使用者群組設定為 www-data
,以便您的網路伺服器可以讀寫存取儲存庫,因為執行 CGI 腳本的 Apache 實例(預設)將以該使用者身份執行
$ chgrp -R www-data /srv/git
接下來,我們需要在 Apache 設定中新增一些內容,以執行 git-http-backend
作為任何進入您網路伺服器 /git
路徑的處理常式。
SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
如果您省略 GIT_HTTP_EXPORT_ALL
環境變數,那麼 Git 將只會像 Git daemon 一樣,對未驗證的客戶端提供含有 git-daemon-export-ok
檔案的儲存庫。
最後,您會希望告訴 Apache 允許對 git-http-backend
的請求,並以某種方式驗證寫入操作,可能使用像這樣的 Auth 區塊。
<Files "git-http-backend">
AuthType Basic
AuthName "Git Access"
AuthUserFile /srv/git/.htpasswd
Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#)
Require valid-user
</Files>
這將需要您建立一個 .htpasswd
檔案,其中包含所有有效使用者的密碼。以下是一個將 "schacon" 使用者新增到該檔案的範例:
$ htpasswd -c /srv/git/.htpasswd schacon
有很多種方式可以讓 Apache 驗證使用者,您必須選擇並實作其中一種。這只是我們能想到的最簡單的範例。您也幾乎肯定會想透過 SSL 設定這個,以便加密所有這些資料。
我們不想過度深入 Apache 設定的細節,因為您可能正在使用不同的伺服器或有不同的驗證需求。重點是 Git 提供了一個名為 git-http-backend
的 CGI,當它被調用時,將會執行所有透過 HTTP 發送和接收資料的協商。它本身不實作任何驗證,但這可以很容易地在調用它的網頁伺服器層級進行控制。您可以使用幾乎任何具有 CGI 功能的網頁伺服器來執行此操作,所以選擇您最熟悉的那個即可。
注意
|
有關在 Apache 中設定驗證的更多資訊,請查閱此處的 Apache 文件:https://apache-httpd.dev.org.tw/docs/current/howto/auth.html。 |