---
# System prepended metadata

title: Lightning Talk 題目構想 -- 《團隊開發 “長大” 過程中需要的 Git 分支管理指令》
tags: [Lightning Talk]

---

# Lightning Talk 題目構想 -- 《團隊開發 “長大” 過程中需要的 Git 分支管理指令》

###### tags: ``Lightning Talk``

---

## 點題

1. 雖然要在版本控制提出全新、獨到的見解，不是那麼容易。但是好好的操作、好好的管控，也不是這麼複雜的事情
2. 但是為什麼，還是會看到某些專案中，版本控制無法被好好的使用，發揮效益。例如最簡單的退版，還是會看到退回上一個 “本來可以動” 的版本後，發生 “怎麼壞掉了” 的問題。最後只好人工搶救、手工撿屍
3. 因此有沒有可能，為沒有經驗的團隊，或是正在奇特經驗中的團隊，整理一份小步前進，每一歩都很簡單，但是可以做到真正意義上版控的指南。
4. 這份指南的目標很簡單，第一是藉由正確使用版本控制，不論是系統功能或是開發行為，兩邊都可以切出 “邊界”，讓團隊不需要再透過冗長瑣碎的溝通，才能同步專案狀態。第二則是可以安全的退版，把 “本來可以動” 的狀況降到最低。
5. 做到可以安全的退版後，也就回到版本控制的正常世界了。接下來只要去看正常的版本控制教學、技術分享即可。

## “長大” 的過程

1. 自己電腦裡的 local repo
2. 團隊開發的 “Bare” repo
3. 開始使用代管平台
4. 有了 Issue tracker 之後
5. 科學化的 Code review
6. Pair / mob programming
7. 當我們開始 CI/CD


## 分享對象

已經有版控概念，剛學會用 Git 開分支的開發人員。


## 附錄 -- 如果你還沒用過 Git

### 分散式版本庫

Git 的版本庫 (repo, repository) 是分散式設計，意思是技術上沒有主版本庫，也不需要 server，只要丟到網路硬碟，就可以當作共用版本庫。其他地方也可以再建一個平行的 “主” 版本庫、個人版本庫。

但是大多數的情況下，也會搭配 “代管平台” 使用，代管平台的功能包括使用者管理、issue tracker、merge request 審查等等。GitHub、GitLab、Gitee，都是代管平台，並不是 Git server 或是主版本庫。

順帶一提，代管平台在分支管理，可以提供更多功能，像是權限設定、特定分支保護、事件通知等等。


### 分支管理 (branch)

和 svn 不同，Git 開分支的成本很低。因為 Git 的版本主體是 “commit”，其他像是分支、tag，都只是放在 commit 上的標籤。而 commit 之間的版本變更紀錄，Git 用的是快照而不是差異檔案，因此儲存的成本也很低。

分支管理策略的部分，管理流程有 Git flow、GitHub flow，和 feature toggles 等。不過 feature toggles 適合已經建立自動化測試、持續整合的團隊 (CI/CD)，一般使用 Git flow 即可。

參考資料： https://medium.com/@lf2lf2111/%E4%B8%89%E7%A8%AE%E7%89%88%E6%8E%A7%E6%B5%81%E7%A8%8B-29c82f5d4469


### "Client" tools

**CLI tool and core function**
- Git-SCM：https://git-scm.com/

**GUI App**
-  SourceTree：https://www.sourcetreeapp.com/
- TortoiseGit：https://tortoisegit.org/

### 共享版本庫、協同開發

**不使用代管平台**

如同上面說的，可以在網路硬碟建立一個 local repository，當作本地端 "server"。方法為建立 "bare" repo -- Git "bare" repo 指的是本地端專門用來共享的 repo，也就是本地的 "remote"、"server"，一種可以從 local 目錄 clone 專案的特殊 repo。

完整說明：https://hackmd.io/@hbdoy/BJz0V5tv8

**使用第三方代管平台**

 - GitLab：適合沒有預算、開發私有專案的組織
 - BitBucker：適合有預算的組織，好處是無痛和 Atlassian 的協同工具、生態系整合
 - GitHub：適合開發 "社群版"、開源專案的團隊

**自建私有 Git 代管平台**

 - 簡單快速：Gitee
 - 功能完整、沒預算：GitLab 
 - 有預算：bitbucket + Jira

**私有、第三方代管平台的整合**

如同前述，Git  本身是分散式版本庫，並沒有中央  server、每個 repo 也可以都是 server，因此代管平台的版本庫整合、更新、備份 ...，並沒有技術上的問題，端看團隊的版控策略。


### 其他團隊協作工具

 - Slack：協作、通訊軟體，可以串接 git push、merge、pull request、issue ticket 通知訊息
 - Drone CI：持續整合、自動化測試工具


### 工具書推薦

 - 為你自己學 Git
 - Git 團隊使用手冊


### Q & A

**Git 可以解決 conflict 的問題嗎？**

> 不行。Conflict 與否，取決於 issue ticker 和程式架構的邊界是否切的夠乾淨。
