> For the complete documentation index, see [llms.txt](https://tobyisme.gitbook.io/gitlab/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tobyisme.gitbook.io/gitlab/chu-bu-le-jie.md).

# 初步了解

* **關於Gitlab**

Gitlab是一個利用Ruby on Rails開發的開源應用程式，實現一個自代管的Git專案倉庫，可通過Web介面進行存取公開的或者私人專案。

它擁有與GitHub類似的功能，能夠瀏覽原始碼，管理缺陷和注釋。可以管理團隊對倉庫的存取，它非常易於瀏覽提交過的版本並提供一個檔案歷史庫。團隊成員可以利用內建的簡單聊天程式（Wall）進行交流。它還提供一個代碼片段收集功能可以輕鬆實現代碼復用，便於日後有需要的時候進行尋找。

GitLab要求伺服器端採用Gitolite搭建（為了方便安裝，現已經用gitlab-shell代替Gitolite）。

* **關於Git**

Git是一個分佈式版本控制系統。分佈式的意思是，每個人電腦上都是一份完整的代碼庫，包含了所有的代碼提交歷史。\
由於Git分佈式的特點，在沒有網絡的情況下，依然可以自由地將代碼提交的本地的代碼庫中，等網絡恢復後再推送到服務器，開發更加靈活和自由。

**重要概念：**&#x672C;地一個代碼庫，對本地文件的所有操作，最後都是提交到這個代碼庫中。同時可以設置多個遠程（remote，默認的remote通常用origin表示），當你要將代碼更新到服務器上時（稱作push），就通過設置的remote，更新到指定的服務器。

* 關於多個remote：例如需要同時將代碼同步到多個代碼管理倉庫，例如Github 和自己公司中內網的Gitlab。那麼可以將默認remote 設置為公司自己的源碼管理服務器，同時設置另外一個remote為Github。這樣即可以將代碼提交到自己公司的Gitlab，同時也可以提交到Github。
* **一些術語**
* Fetch（獲取），從遠程代碼庫更新數據到本地代碼庫。`注意`：Fetch只是將代碼更新到本地代碼庫，你需要檢出（check out）或與當前工作分支合併（merge）才能在你的工作目錄中看到代碼的改變。
* Pull（拉取），從遠程代碼庫更新數據到本地代碼庫，並與當前工作分支合併，等同於Fetch + Merge。
* Push（推送），將本地代碼庫中已提交（commit）的數據推送到指定的remote，沒有commit 的數據，不會push
* HEAD，指向你正在工作中的本地分支的指針
* Master分支：主分支，所有提供給用戶使用的正式版本，都在這個主分支上發布。\
  [關於分支管理的擴展閱讀](http://www.ruanyifeng.com/blog/2012/07/git.html)
* Tags（標籤）：用來記錄重要的版本歷史，例如里程碑版本
* Origin：默認的remote的名稱
* Git clone（克隆版本庫）：從服務端將項目的版本庫克隆下來
* Git init（在本地初始化版本庫）：在本地創建版本庫的時候使用
* **工作流程**
* 對代碼進行修改
* 完成了某項功能，提交（commit，只是提交到本地代碼庫），1-2可以反復進行，直到覺得可以推送到服務器上時，執行3
* 拉取（pull，或者用獲取fetch 然後再手動合併merge）
* 如果存在衝突，解決衝突
* 推送（push），將數據提交到服務器上的代碼庫
* **Gitlab 可以做什麼**

Gitlab 是Git 服務端的集成管理平台，提供了：

1. 代碼託管服務
2. 訪問權限控制
3. 問題跟踪，bug的記錄、跟踪和討論
4. Wiki，項目中一些相關的說明和文檔
5. 代碼審查，可以查看、評論代碼
