章節 ▾ 第二版

4.2 在伺服器上搭建Git服務

在伺服器上搭建Git服務

現在,我們將介紹如何在自己的伺服器上設定執行這些協議的 Git 服務。

注意

在這裡,我們將演示在基於 Linux 的伺服器上進行基本、簡化安裝所需的命令和步驟,不過這些服務也可以在 macOS 或 Windows 伺服器上執行。在您的基礎設施中實際設定生產伺服器,肯定會在安全措施或作業系統工具方面有所不同,但希望這能讓您對所涉及的內容有一個大致的瞭解。

為了初步設定任何 Git 伺服器,您必須將現有倉庫匯出到一個新的裸倉庫中——一個不包含工作目錄的倉庫。這通常很簡單。為了克隆您的倉庫以建立新的裸倉庫,您需要執行帶 --bare 選項的 clone 命令。按照慣例,裸倉庫目錄名以 .git 為字尾,例如:

$ git clone --bare my_project my_project.git
Cloning into bare repository 'my_project.git'...
done.

現在您應該在 my_project.git 目錄中擁有 Git 目錄資料的副本。

這大致等同於:

$ cp -Rf my_project/.git my_project.git

配置檔案中有一些細微的差別,但就您的目的而言,這與它們幾乎相同。它單獨獲取 Git 倉庫,不帶工作目錄,並專門為它建立一個目錄。

將裸倉庫放到伺服器上

現在您已經有了倉庫的裸副本,您需要做的就是將其放到伺服器上並設定您的協議。假設您已經設定了一個名為 git.example.com 的伺服器,您有 SSH 訪問許可權,並且您希望將所有 Git 倉庫儲存在 /srv/git 目錄中。假設該伺服器上存在 /srv/git,您可以透過複製裸倉庫來設定您的新倉庫:

$ scp -r my_project.git user@git.example.com:/srv/git

此時,對該伺服器上 /srv/git 目錄具有基於 SSH 的讀取許可權的其他使用者可以透過執行以下命令克隆您的倉庫:

$ git clone user@git.example.com:/srv/git/my_project.git

如果使用者透過 SSH 登入到伺服器並對 /srv/git/my_project.git 目錄具有寫入許可權,他們也將自動擁有推送許可權。

如果您使用 --shared 選項執行 git init 命令,Git 將自動為倉庫正確新增組寫入許可權。請注意,執行此命令不會在此過程中銷燬任何提交、引用等。

$ ssh user@git.example.com
$ cd /srv/git/my_project.git
$ git init --bare --shared

您可以看到將 Git 倉庫轉換為裸版本並將其放置在您和您的協作者都有 SSH 訪問許可權的伺服器上是多麼容易。現在您已準備好在同一個專案上進行協作。

重要的是要記住,這就是您執行一個有用且多人可訪問的 Git 伺服器所需要的全部內容——只需在伺服器上新增可 SSH 訪問的帳戶,並將裸倉庫放在所有這些使用者都具有讀寫訪問許可權的地方。您已準備就緒——不需要其他任何東西。

在接下來的幾節中,您將看到如何擴充套件到更復雜的設定。這包括不必為每個使用者建立使用者帳戶、為倉庫新增公共讀取訪問許可權、設定 Web UI 等。但是,請記住,要與幾個人協作進行私人專案,您 需要 的只是一個 SSH 伺服器和一個裸倉庫。

小型設定

如果您是一個小團隊,或者只是在您的組織中嘗試 Git,並且只有少數開發人員,那麼事情對您來說可以很簡單。設定 Git 伺服器最複雜的一個方面是使用者管理。如果您希望某些倉庫對某些使用者是隻讀的,而對其他使用者是讀/寫的,那麼訪問和許可權的安排可能會有點困難。

SSH 訪問

如果您有一個所有開發人員都已經擁有 SSH 訪問許可權的伺服器,那麼在那裡設定您的第一個倉庫通常是最簡單的,因為您幾乎不需要做任何工作(正如我們在上一節中介紹的)。如果您希望對倉庫進行更復雜的訪問控制型別許可權管理,則可以使用伺服器作業系統的普通檔案系統許可權來處理它們。

如果您想將倉庫放置在沒有為團隊中所有需要授予寫入訪問許可權的人建立帳戶的伺服器上,那麼您必須為他們設定 SSH 訪問。我們假設如果您有一個可以做到這一點的伺服器,您已經安裝了 SSH 伺服器,並且您就是透過這種方式訪問伺服器的。

有幾種方法可以授予團隊中每個人訪問許可權。第一種是為每個人設定帳戶,這很簡單但可能很麻煩。您可能不想執行 adduser(或可能的替代 useradd)併為每個新使用者設定臨時密碼。

第二種方法是在機器上建立一個單獨的“git”使用者帳戶,要求每個需要寫入許可權的使用者向您傳送一個 SSH 公鑰,並將該金鑰新增到該新“git”帳戶的 ~/.ssh/authorized_keys 檔案中。此時,每個人都將能夠透過“git”帳戶訪問該機器。這不會以任何方式影響提交資料——您連線時使用的 SSH 使用者不會影響您記錄的提交。

另一種方法是讓您的 SSH 伺服器從 LDAP 伺服器或您可能已經設定的任何其他集中式身份驗證源進行身份驗證。只要每個使用者都能在機器上獲得 shell 訪問許可權,您能想到的任何 SSH 身份驗證機制都應該有效。

scroll-to-top