Git
章節 ▾ 第二版

4.8 伺服器上的 Git - GitLab

GitLab

GitWeb 相當簡單。如果您正在尋找現代化、功能齊全的 Git 伺服器,您可以安裝幾個開源解決方案。由於 GitLab 是其中一個受歡迎的解決方案,我們將以它為例來介紹安裝和使用。這比 GitWeb 選項更困難,需要更多維護,但它是一個功能齊全的選項。

安裝

GitLab 是一個以資料庫為基礎的 Web 應用程式,因此其安裝比其他一些 Git 伺服器更複雜。幸運的是,這個過程有完善的文件記錄和支援。GitLab 強烈建議透過官方的 Omnibus GitLab 套件在您的伺服器上安裝 GitLab。

其他安裝選項為:

  • 用於 Kubernetes 的 GitLab Helm 圖表。

  • 用於 Docker 的 Docker 化 GitLab 套件。

  • 從原始碼檔案安裝。

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

如需更多資訊,請閱讀GitLab 社群版 (CE) readme

管理

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 的存取以及該專案的網頁 UI 存取。

Hook

GitLab 支援專案或系統層級的 Hook。對於這兩者,當相關事件發生時,GitLab 伺服器將執行 HTTP POST 並包含一些描述性的 JSON。這是將您的 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

網頁 UI 提供了對儲存庫本身幾個有用檢視的存取。每個專案的首頁顯示最近的活動,而頂部的連結將會引導您到專案檔案和提交紀錄的檢視。

協同作業

在 GitLab 專案上協同作業最簡單的方法是給予每個使用者直接推送至 Git 儲存庫的權限。您可以透過進入該專案設定的「成員」部分,將使用者新增到專案,並將新使用者與存取級別相關聯(不同的存取級別在 群組 中稍有討論)。通過給予使用者「開發者」或以上的存取級別,該使用者可以直接將提交和分支推送到儲存庫。

另一種更為分離的協作方式是使用合併請求。此功能使任何可以查看專案的使用者都能夠以受控的方式對專案做出貢獻。具有直接存取權的使用者可以簡單地建立一個分支,將提交推送到該分支,然後從他們的分支開出一個合併請求回到 master 或任何其他分支。沒有儲存庫推送權限的使用者可以「分叉」它以建立自己的副本,將提交推送到他們的副本,然後從他們的分叉開出一個合併請求回到主專案。此模型允許擁有者完全控制什麼時候進入儲存庫,同時允許來自不受信任的使用者的貢獻。

合併請求和議題是 GitLab 中長期討論的主要單位。每個合併請求允許逐行討論提議的變更(支援一種輕量型的程式碼審查),以及一個整體性的討論串。兩者都可以指派給使用者,或組織到里程碑中。

本節主要關注 GitLab 與 Git 相關的功能,但作為一個成熟的專案,它提供了許多其他功能來幫助您的團隊協同作業,例如專案 Wiki 和系統維護工具。GitLab 的一個好處是,一旦伺服器設定並運行後,您很少需要調整設定檔或透過 SSH 存取伺服器;大部分管理和一般使用都可以透過瀏覽器介面完成。

scroll-to-top