## GitLab
雖然 GitWeb 相當簡單。 但如果你正在尋找一個更現代,功能更全的 Git 服務器,這里有幾個開源的解決方案可供你選擇安裝。 因為 GitLab 是其中最出名的一個,我們將它作為示例并討論它的安裝和使用。 這比 GitWeb 要復雜的多并且需要更多的維護,但它的確是一個功能更全的選擇。
## 安裝
GitLab 是一個數據庫支持的 web 應用,所以相比于其他 git 服務器,它的安裝過程涉及到更多的東西。 幸運的是,這個過程有非常詳細的文檔說明和支持。
這里有一些可參考的方法幫你安裝 GitLab 。 為了更快速的啟動和運行,你可以下載虛擬機鏡像或者在 `https://bitnami.com/stack/gitlab `上獲取一鍵安裝包,同時調整配置使之符合你特定的環境。 Bitnami 的一個優點在于它的登錄界面(通過 alt-&rarr 鍵進入;);它會告訴你安裝好的 GitLab 的 IP 地址以及默認的用戶名和密碼。

無論如何,跟著 GitLab 社區版的 readme 文件一步步來,你可以在這里找到它 `https://gitlab.com/gitlab-org/gitlab-ce/tree/master` 。 在這里你將會在主菜單中找到安裝 GitLab 的幫助,一個可以在 Digital Ocean 上運行的虛擬機,以及 RPM 和 DEB 包(都是測試版)。 這里還有 “非官方” 的引導讓 GitLab 運行在非標準的操作系統和數據庫上,一個全手動的安裝腳本,以及許多其他的話題。
## 管理
GitLab 的管理界面是通過網絡進入的。 將你的瀏覽器轉到已經安裝 GitLab 的 主機名或 IP 地址,然后以管理員身份登錄即可。 默認的用戶名是 admin@local.host,默認的密碼是 5iveL!fe(你會得到類似 請登錄后盡快更換密碼 的提示)。 登錄后,點擊主欄上方靠右位置的 “Admin area” 圖標進行管理。

## 使用者
GitLab 上的用戶指的是對應協作者的帳號。 用戶帳號沒有很多復雜的地方,主要是包含登錄數據的用戶信息集合。 每一個用戶賬號都有一個 命名空間 ,即該用戶項目的邏輯集合。 如果一個叫 jane 的用戶擁有一個名稱是 project 的項目,那么這個項目的 url 會是 http://server/jane/project 。

移除一個用戶有兩種方法。 “屏蔽(Blocking)” 一個用戶阻止他登錄 GitLab 實例,但是該用戶命名空間下的所有數據仍然會被保存,并且仍可以通過該用戶提交對應的登錄郵箱鏈接回他的個人信息頁。
而另一方面,“銷毀(Destroying)” 一個用戶,會徹底的將他從數據庫和文件系統中移除。 他命名空間下的所有項目和數據都會被刪除,擁有的任何組也會被移除。 這顯然是一個更永久且更具破壞力的行為,所以很少用到這種方法。
## 組
一個 GitLab 的組是一些項目的集合,連同關于多少用戶可以訪問這些項目的數據。 每一個組都有一個項目命名空間(與用戶一樣),所以如果一個叫 training 的組擁有一個名稱是 materials 的項目,那么這個項目的 url 會是 `http://server/training/materials` 。

每一個組都有許多用戶與之關聯,每一個用戶對組中的項目以及組本身的權限都有級別區分。 權限的范圍從 “訪客”(僅能提問題和討論) 到 “擁有者”(完全控制組、成員和項目)。 權限的種類太多以至于難以在這里一一列舉,不過在 GitLab 的管理界面上有幫助鏈接。
## 項目
一個 GitLab 的項目相當于 git 的版本庫。 每一個項目都屬于一個用戶或者一個組的單個命名空間。 如果這個項目屬于一個用戶,那么這個擁有者對所有可以獲取這個項目的人擁有直接管理權;如果這個項目屬于一個組,那么該組中用戶級別的權限也會起作用。
每一個項目都有一個可視級別,控制著誰可以看到這個項目頁面和倉庫。 如果一個項目是 私有 的,這個項目的擁有者必須明確授權從而使特定的用戶可以訪問。 一個 內部 的項目可以被所有登錄的人看到,而一個 公開 的項目則是對所有人可見的。 注意,這種控制既包括 git “fetch” 的使用也包括對項目 web 用戶界面的訪問。
## 鉤子
GitLab 在項目和系統級別上都支持鉤子程序。 對任意級別,當有相關事件發生時,GitLab 的服務器會執行一個包含描述性 JSON 數據的 HTTP 請求。 這是自動化連接你的 git 版本庫和 GitLab 實例到其他的開發工具,比如 CI 服務器,聊天室,或者部署工具的一個極好方法。
## 基本用途
你想要在 GitLab 做的第一件事就是建立一個新項目。 這通過點擊工具欄上的 “+” 圖標完成。 你會被要求填寫項目名稱,也就是這個項目所屬的命名空間,以及它的可視層級。 絕大多數的設定并不是永久的,可以通過設置界面重新調整。 點擊 “Create Project”,你就完成了。
項目存在后,你可能會想將它與本地的 Git 版本庫連接。 每一個項目都可以通過 HTTPS 或者 SSH 連接,任意兩者都可以被用來配置遠程 Git。 在項目主頁的頂欄可以看到這個項目的 URLs。 對于一個存在的本地版本庫,這個命令將會向主機位置添加一個叫 gitlab 的遠程倉庫:
~~~
$ git remote add gitlab https://server/namespace/project.git
~~~
如果你的本地沒有版本庫的副本,你可以這樣做:
~~~
$ git clone https://server/namespace/project.git
~~~
web 用戶界面提供了幾個有用的獲取版本庫信息~的網頁。 每一個項目的主頁都顯示了最近的活動,并且通過頂部的鏈接可以使你瀏覽項目文件以及提交日志。
## 一起工作
在一個 GitLab 項目上一起工作的最簡單方法就是賦予協作者對 git 版本庫的直接 push 權限。 你可以通過項目設定的 “Members(成員)” 部分向一個項目添加寫作者,并且將這個新的協作者與一個訪問級別關聯(不同的訪問級別在 組 中已簡單討論)。 通過賦予一個協作者 “Developer(開發者)” 或者更高的訪問級別,這個用戶就可以毫無約束地直接向版本庫或者向分支進行提交。
另外一個讓合作更解耦的方法就是使用合并請求。 它的優點在于讓任何能夠看到這個項目的協作者在被管控的情況下對這個項目作出貢獻。 可以直接訪問的協作者能夠簡單的創建一個分支,向這個分支進行提交,也可以開啟一個向 master 或者其他任何一個分支的合并請求。 對版本庫沒有推送權限的協作者則可以 “fork” 這個版本庫(即創建屬于自己的這個庫的副本),向 那個 副本進行提交,然后從那個副本開啟一個到主項目的合并請求。 這個模型使得項目擁有者完全控制著向版本庫的提交,以及什么時候允許加入陌生協作者的貢獻。
在 GitLab 中合并請求和問題是一個長久討論的主要部分。 每一個合并請求都允許在提出改變的行進行討論(它支持一個輕量級的代碼審查),也允許對一個總體性話題進行討論。 兩者都可以被分配給用戶,或者組織到 milestones(里程碑) 界面。
這個部分主要聚焦于在 GitLab 中與 Git 相關的特性,但是 GitLab 作為一個成熟的系統,它提供了許多其他產品來幫助你協同工作,例如項目 wiki 與系統維護工具。 GitLab 的一個優點在于,服務器設置和運行以后,你將很少需要調整配置文件或通過 SSH 連接服務器;絕大多數的管理和日常使用都可以在瀏覽器界面中完成。
- 第一章 起步
- 1.1 關于版本控制
- 1.2 Git 簡史
- 1.3 Git 基礎
- 1.4 命令行
- 1.5 安裝 Git
- 1.6 初次運行 Git 前的配置
- 1.7 獲取幫助
- 1.8 總結
- 第二章 Git基礎
- 2.1 獲取 Git 倉庫
- 2.2 記錄每次更新到倉庫
- 2.3 查看提交歷史
- 2.4 撤消操作
- 2.5 遠程倉庫的使用
- 2.6 打標簽
- 2.7 Git 別名
- 2.8 總結
- 第三章 Git分支
- 3.1 分支簡介
- 3.2 分支的新建與合并
- 3.3 分支管理
- 3.4 分支開發工作流
- 3.5 遠程分支
- 3.6 變基
- 3.7 總結
- 第四章 服務器上Git
- 4.1 協議
- 4.2 在服務器上搭建 Git
- 4.3 生成 SSH 公鑰
- 4.4 配置服務器
- 4.5 Git 守護進程 TODO
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 第三方托管的選擇
- 4.10 總結
- 第五章 分布式Git
- 5.1 分布式工作流程
- 第六章 GitHub
- 第七章 Git工具
- 第八章 自定義Git
- 第九章 Git于其他系統
- 第十章 Git內部原理
- 附錄A 其他環境中的Git
- A1.1 圖形界面 TODO
- A1.2 Visual Studio 中的 Git TODO
- A1.3 Eclipse 中的 Git
- 附錄B 將Git嵌入你的應用
- 附錄C Git命令
- 附錄D 常用命令
- D.1 配置和設置
- D.2 幫助
- D.3 創建和獲取倉庫
- D.4 文件狀態
- D.5 查看日志