-
1. 起步
-
2. Git 基礎
-
3. Git 分支
-
4. 伺服器上的 Git
- 4.1 協議
- 4.2 在伺服器上安裝 Git
- 4.3 生成 SSH 公鑰
- 4.4 架設伺服器
- 4.5 Git Daemon
- 4.6 Smart 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.2 Git 在伺服器上 - 在伺服器上安裝 Git
在伺服器上安裝 Git
現在我們將介紹如何在您自己的伺服器上設定執行這些協議的 Git 服務。
|
注意
|
在這裡,我們將演示在基於 Linux 的伺服器上進行基本、簡化的安裝所需的命令和步驟,儘管也可以在 macOS 或 Windows 伺服器上執行這些服務。實際上在您的基礎設施中設定生產伺服器肯定會涉及到安全措施或作業系統工具上的差異,但希望這能讓您對涉及的內容有一個大致的瞭解。 |
為了初步設定任何 Git 伺服器,您必須將現有的倉庫匯出為一個新的裸倉庫(bare repository)— 這是一個不包含工作目錄的倉庫。這通常很容易做到。為了克隆您的倉庫來建立一個新的裸倉庫,您需要使用 --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 目錄具有寫入許可權,他們也將自動擁有推送許可權。
如果您使用 git init 命令並帶上 --shared 選項,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 身份驗證機制都應該有效。