Git
章節 ▾ 第二版

4.2 伺服器上的 Git - 在伺服器上取得 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