章節 ▾ 第二版

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”圖示。

The “Admin area” item in the GitLab menu
圖 50. GitLab 選單中的“Admin area”項

使用者

每個使用你的 GitLab 伺服器的人都必須擁有一個使用者帳戶。使用者帳戶非常簡單,主要包含與登入資料相關的個人資訊。每個使用者帳戶都有一個名稱空間(namespace),這是一個屬於該使用者的專案邏輯分組。如果使用者 jane 有一個名為 project 的專案,那麼該專案的 URL 將是 http://server/jane/project

The GitLab user administration screen
圖 51. GitLab 使用者管理介面

你可以透過兩種方式刪除使用者帳戶:“阻止(Blocking)”使用者可防止他們登入 GitLab 例項,但該使用者名稱空間下的所有資料將保留,並且使用該使用者電子郵件地址簽名的提交仍將連結回其個人資料。

另一方面,“銷燬(Destroying)”使用者會將其從資料庫和檔案系統中完全刪除。其名稱空間中的所有專案和資料都將被刪除,他們擁有的任何群組也將被刪除。這顯然是一個更永久和破壞性的操作,你很少需要用到它。

群組

GitLab 群組是專案的集合,以及有關使用者如何訪問這些專案的資料。每個群組都有一個專案名稱空間(與使用者相同),因此如果群組 training 有一個專案 materials,其 URL 將是 http://server/training/materials

The GitLab group administration screen
圖 52. GitLab 群組管理介面

每個群組都關聯著許多使用者,每個使用者對群組的專案和群組本身都擁有不同級別的許可權。這些許可權從“訪客(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 訪問伺服器;大多數管理和一般使用都可以透過瀏覽器介面完成。

scroll-to-top