章節 ▾ 第二版

4.8 伺服器上的 Git - GitLab

GitLab

GitWeb 確實很簡單。如果您正在尋找一個現代化的、功能齊全的 Git 伺服器,市面上還有其他一些開源解決方案可以安裝。由於 GitLab 是其中一個受歡迎的解決方案,我們將以它為例介紹安裝和使用。這比 GitWeb 選項要複雜,需要更多的維護,但它是一個功能齊全的選項。

安裝

GitLab 是一個數據庫驅動的 Web 應用程式,因此它的安裝比某些其他 Git 伺服器要複雜。幸運的是,這個過程有完善的文件和支援。GitLab 強烈建議透過官方 Omnibus GitLab 包在您的伺服器上安裝 GitLab。

其他安裝選項有

  • GitLab Helm chart,用於 Kubernetes。

  • Dockerized GitLab 包,用於 Docker。

  • 從原始碼檔案安裝。

  • 雲提供商,如 AWS、Google Cloud Platform、Azure、OpenShift 和 Digital Ocean。

更多資訊請閱讀 GitLab 社群版 (CE) 的 README

管理

可以透過 Web 訪問 GitLab 的管理介面。只需將瀏覽器指向 GitLab 安裝的主機名或 IP 地址,然後以 root 使用者身份登入。密碼取決於您的安裝型別,但預設情況下,Omnibus GitLab 會自動生成一個密碼,並將其儲存在 /etc/gitlab/initial_root_password 中至少 24 小時。請遵循文件瞭解更多詳細資訊。登入後,點選右上角選單中的“管理區域”圖示。

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

使用者

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

The GitLab user administration screen
圖 51. GitLab 使用者管理螢幕

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

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

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

The GitLab group administration screen
圖 52. GitLab 組管理螢幕

每個組都與多個使用者相關聯,每個使用者對組的專案和組本身都具有一定級別的許可權。這些許可權從“訪客”(僅限問題和聊天)到“所有者”(對組、其成員及其專案擁有完全控制權)不等。許可權型別太多,無法在此一一列出,但 GitLab 在管理螢幕上提供了一個有用的連結。

專案

GitLab 專案大致對應於單個 Git 儲存庫。每個專案都屬於一個名稱空間,該名稱空間可以是使用者或組。如果專案屬於使用者,則專案所有者直接控制誰可以訪問該專案;如果專案屬於組,則組的使用者級別許可權將生效。

每個專案都有一個可見性級別,該級別控制誰可以讀取該專案的頁面和儲存庫。如果專案是私有的,專案所有者必須明確授予特定使用者的訪問許可權。內部專案對任何已登入使用者可見,而公共專案對任何人可見。請注意,這同時控制了 git fetch 訪問以及對該專案 Web UI 的訪問。

鉤子

GitLab 支援專案級別或系統級別的鉤子。對於這兩者,當發生相關事件時,GitLab 伺服器將使用一些描述性的 JSON 發起一個 HTTP POST 請求。這是將您的 Git 儲存庫和 GitLab 例項連線到您的開發自動化其他部分(如 CI 伺服器、聊天室或部署工具)的好方法。

基本用法

使用 GitLab 要做的第一件事是建立一個新專案。您可以透過點選工具欄上的“+”圖示來完成。系統會要求您輸入專案的名稱、應屬於哪個名稱空間以及其可見性級別。您在此處指定的大部分內容不是永久性的,可以在之後透過設定介面進行更改。點選“建立專案”,就完成了。

專案建立後,您可能需要將其與本地 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 儲存庫的許可權。您可以透過轉到專案設定的“成員”部分,將新使用者關聯一個訪問級別(不同訪問級別的討論請參閱)。透過賦予使用者“開發者”或更高級別的訪問許可權,該使用者可以直接將提交和分支推送到儲存庫。

另一種更解耦的協作方式是使用合併請求。此功能允許任何可以看到某個專案的使用者以一種受控的方式對其做出貢獻。具有直接訪問許可權的使用者可以簡單地建立一個分支,將提交推送到該分支,然後從他們的分支開啟一個合併請求以合併到 master 或任何其他分支。沒有儲存庫推送許可權的使用者可以“fork”該儲存庫以建立自己的副本,將提交推送到他們的副本,然後從他們的 fork 開啟一個合併請求以合併回主專案。這種模式允許所有者完全控制將什麼內容何時放入儲存庫,同時允許不受信任的使用者做出貢獻。

合併請求和問題是 GitLab 中長期討論的主要單元。每個合併請求都允許對擬議更改進行逐行討論(支援一種輕量級的程式碼審查),以及一個通用的總體討論執行緒。兩者都可以分配給使用者,或組織到里程碑中。

本節主要關注 GitLab 的 Git 相關功能,但作為一個成熟的專案,它提供了許多其他功能來幫助您的團隊協同工作,例如專案維基和系統維護工具。GitLab 的一個好處是,一旦伺服器設定並執行起來,您很少需要修改配置檔案或透過 SSH 訪問伺服器;大多數管理和通用使用都可以透過瀏覽器介面完成。