-
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.8 伺服器上的 Git - GitLab
GitLab
GitWeb 相當簡單。如果你正在尋找一個現代的、功能齊全的 Git 伺服器,有一些開源解決方案可供你安裝。由於 GitLab 是其中一個受歡迎的選擇,我們將以安裝和使用它為例。這比 GitWeb 選項更難,需要更多的維護,但它是一個功能齊全的解決方案。
安裝
GitLab 是一個由資料庫支援的 Web 應用程式,因此其安裝過程比其他一些 Git 伺服器更復雜。幸運的是,這個過程有詳細的文件和支援。GitLab 強烈建議透過官方的 Omnibus GitLab 軟體包在你的伺服器上安裝 GitLab。
其他安裝選項包括:
-
GitLab Helm chart,用於 Kubernetes。
-
Docker 化 GitLab 軟體包,用於 Docker。
-
從原始碼檔案安裝。
-
雲服務提供商,如 AWS、Google Cloud Platform、Azure、OpenShift 和 Digital Ocean。
欲瞭解更多資訊,請閱讀 GitLab Community Edition (CE) readme。
管理
GitLab 的管理介面透過 Web 訪問。只需將瀏覽器指向安裝 GitLab 的主機名或 IP 地址,並以 root
使用者身份登入。密碼將取決於你的安裝型別,但預設情況下,Omnibus GitLab 會自動生成密碼並將其儲存到 /etc/gitlab/initial_root_password 至少 24 小時。請參閱文件瞭解更多詳細資訊。登入後,點選右上角選單中的“Admin area”圖示。
使用者
每個使用你的 GitLab 伺服器的人都必須擁有一個使用者帳戶。使用者帳戶非常簡單,主要包含與登入資料相關的個人資訊。每個使用者帳戶都有一個名稱空間(namespace),這是一個屬於該使用者的專案邏輯分組。如果使用者 jane 有一個名為 project 的專案,那麼該專案的 URL 將是 http://server/jane/project
。

你可以透過兩種方式刪除使用者帳戶:“阻止(Blocking)”使用者可防止他們登入 GitLab 例項,但該使用者名稱空間下的所有資料將保留,並且使用該使用者電子郵件地址簽名的提交仍將連結回其個人資料。
另一方面,“銷燬(Destroying)”使用者會將其從資料庫和檔案系統中完全刪除。其名稱空間中的所有專案和資料都將被刪除,他們擁有的任何群組也將被刪除。這顯然是一個更永久和破壞性的操作,你很少需要用到它。
群組
GitLab 群組是專案的集合,以及有關使用者如何訪問這些專案的資料。每個群組都有一個專案名稱空間(與使用者相同),因此如果群組 training 有一個專案 materials,其 URL 將是 http://server/training/materials
。

每個群組都關聯著許多使用者,每個使用者對群組的專案和群組本身都擁有不同級別的許可權。這些許可權從“訪客(Guest)”(僅限議題和聊天)到“所有者(Owner)”(完全控制群組、其成員和專案)。許可權型別太多,無法在此列出,但 GitLab 在管理介面上提供了一個有用的連結。
專案
一個 GitLab 專案大致對應一個 Git 倉庫。每個專案都屬於一個名稱空間,可以是使用者或群組。如果專案屬於使用者,則專案所有者直接控制誰有權訪問該專案;如果專案屬於群組,則群組的使用者級別許可權將生效。
每個專案都有一個可見性級別,它控制誰有權讀取該專案的頁面和倉庫。如果專案是私有的(Private),則專案所有者必須明確授予特定使用者訪問許可權。內部(Internal)專案對任何已登入使用者可見,而公共(Public)專案對所有人可見。請注意,這既控制 git fetch
訪問,也控制對該專案 Web UI 的訪問。
鉤子
GitLab 支援專案級和系統級的鉤子。對於這兩種情況,GitLab 伺服器在發生相關事件時,都會執行一個帶有描述性 JSON 的 HTTP POST 請求。這是將你的 Git 倉庫和 GitLab 例項連線到開發自動化其他部分(例如 CI 伺服器、聊天室或部署工具)的好方法。
基本使用
使用 GitLab 的第一件事是建立一個新專案。你可以透過點選工具欄上的“+”圖示來完成此操作。系統會要求你輸入專案名稱、它應該屬於哪個名稱空間以及其可見性級別。你在此處指定的大部分內容並非永久性的,稍後可以透過設定介面進行更改。點選“Create Project”,即可完成。
專案建立後,你可能希望將其與本地 Git 倉庫連線。每個專案都可以透過 HTTPS 或 SSH 訪問,兩者都可用於配置 Git 遠端。URL 在專案主頁的頂部可見。對於現有的本地倉庫,此命令將建立一個名為 gitlab
的遠端,指向託管位置:
$ git remote add gitlab https://server/namespace/project.git
如果你沒有倉庫的本地副本,可以這樣做:
$ git clone https://server/namespace/project.git
Web UI 提供了對倉庫本身的幾個有用檢視的訪問。每個專案的主頁都顯示最近的活動,頂部的連結將引導你檢視專案的檔案和提交日誌。
協同工作
在 GitLab 專案上協同工作最簡單的方式是授予每個使用者對 Git 倉庫的直接推送許可權。你可以透過進入專案設定的“成員(Members)”部分,並將新使用者與訪問級別關聯來向專案新增使用者(不同的訪問級別在 群組 中有所討論)。透過授予使用者“開發者(Developer)”或更高訪問級別,該使用者可以直接向倉庫推送提交和分支。
另一種更解耦的協作方式是使用合併請求。此功能使任何可以看到專案的使用者能夠以受控的方式為其貢獻。具有直接訪問許可權的使用者可以簡單地建立一個分支,向其推送提交,並從其分支向 master
或任何其他分支開啟合併請求。對倉庫沒有推送許可權的使用者可以“fork”它以建立自己的副本,向其副本推送提交,並從其 fork 向主專案開啟合併請求。這種模型允許所有者完全控制進入倉庫的內容和時間,同時允許來自不受信任使用者的貢獻。
合併請求和議題是 GitLab 中長期討論的主要單元。每個合併請求都允許對提議的更改進行逐行討論(這支援輕量級的程式碼審查),以及進行一般的整體討論。兩者都可以分配給使用者,或組織到里程碑中。
本節主要關注 GitLab 的 Git 相關功能,但作為一個成熟的專案,它提供了許多其他功能來幫助你的團隊協同工作,例如專案維基和系統維護工具。GitLab 的一個好處是,一旦伺服器設定並執行起來,你很少需要調整配置檔案或透過 SSH 訪問伺服器;大多數管理和一般使用都可以透過瀏覽器介面完成。