iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 3
2
Cloud Native

從零開始建立自動化發佈的流水線系列 第 3

03. 開始程式碼版控 - Git 簡說

Eric: 這樣你應該 集中式版本控制分散式版本控制 兩者之間的差異,其中 Subservion 是很經典的集中式版制系統[^註1]。不過,因為你之前沒有使用過版控系統,個人建議使用分散式散本控制系統中的 Git。

吉米: 為什麼 Eric 你會建議使用 Git 呢?

Eric: 目前 Git 被許多開發人員使用。再者,有許多的網路服務商提供免費或付費的服務,這部份想必對你有也會很多的幫助。

吉米: 這麼說來,使用這些網路服務的同時,就等於又多一個備份的機制。

Eric: 沒錯,我們再複習一下分散式版本控制的架構。


sauvegarder : git flow

(圖片出處: Tutos Android France)

在分散式版本控制系統中,分成本地端與遠端 Repository。

在本地端,為了確實的管控所有的檔案變更與異常,並讓使用者充分的運用到版本控制系統的支援。分成工作區(Working Copy/Working Directory)暫存區(Staging area)以及本地Repository

  • 工作區

    這個部份,是我們進行檔案操作的位置。不管是 切換 (checkout)複制 (clone)重置 (reset)拉 (pull)複原 (discard) 等動作結果,都會直接影響這邊。

  • 暫存區

    當工作複本內容檔案修改後,會將要上傳變更的內容快照一份放在這邊。在 提交 (commit) 時,會將這區域內的資料,上傳到到 Repository。

  • 本地 Repository

    保存了所有變更過的檔案,以及各版本的歷史紀錄。

在遠端,也會存在一個遠端 Repository,以儲存管理所有使用者,所上傳的最終變更的版本資訊。同時,也是它提供其他使用者同步資訊的共同來源。利用 推(push)拉 (pull)複制 (clone)拿取(fetch) 等動作,來達到同步旳結果。


吉米: 聽完你的說明後,對分散式版本控制系統的架構與流程,有比較客觀的認識。當我在本地端,將版控系統建立起來後,就可以立即享受版控帶來的支援與好處。

等到那天,需要在其他台電腦或與其他人協合開發時,也可以利用遠端 Repository 來同步開發的進度。

Eric: 沒錯,那我們先了解 Git 本地端的使用方式。


Git 本地端的使用

init
git init

提交 commit

git commit

切換 checkout

git checkout master

重置 reset

git reset C3

Eric: 剛剛提到的 commit、checkout、reset 都是在基本的版本管理與記錄,只會這些是無法支援多變的開發需求的。

吉米: 確實,假若遇到部份功能客制化的需求,這些指令好像無法派上用途,難道要再建一個新的 Repository 嗎?

Eric: 哈哈,當然不是。所以接下來,要提到 branchmerge 的觀念了。


Git 分版

當我們使用 Git 時,一定會有一條主線 master,但是在實務上,有時會遇到幾種狀況。

  • 功能己經寫了一半,但客戶突然告知要放棄該功能。
  • 針對現有的軟體,業務跟你說,某客戶要求增修某個功能,但這功能只是個案。
  • ……

像這個時候,為了跟原本軟體版本有所差異,只好分成不同版本,以方便管理。

分支 branch

git branch develop

合併 merge

git merge master

Eric: 說完 branch、merge 的觀念後,接著來聊聊 遠端 Repository本地端 Repository 的同步。

吉米: 嗯嗯,記得先前你有提到 pushpullclonefetch 這幾個名詞。

Eric: 說到本地端與遠端的同步,不外乎就是 把資料丟上去的 push,以及把資料抓下來的 clone、fetch、pull。接下來,我們來聊一下 clone、fetch、clone 三者的差異。


Git 與遠端同步

因為本地端在沒有設定前,它並不知道遠端 Repository 的位置。所以要同步資訊到遠端前,必需先將遠端 Repository 建立起來後,將它跟本地端進行綁定。

git remote add origin http://xxxx.xxx.xx.xx/ironman/git_tech.git

push

git push origin master
git push origin master:master
git push origin master:sup

fetch

git fetch

pull

git pull

clone

git clone

Eric: 說了這麼多,但還有很有很多指令都還沒有提到,像 request pushrebase 等等,有機會你再去好好了解它們的用法。

吉米: 這樣就對有我很大的幫助。不過,對於我這樣的新手,git 沒有提供 GUI 工具呢?

Eric: 好問題,在 Git 官網中,有提供 GUI Client 的軟體清單,提供下載。你可以選擇自己喜歡的軟體。接著,我們聊聊提供 Remote Repository 的網路服務商。


[^註1]: DEMO大,對於 Subversion SVN 版本控管寫了一系列的教學文章,有興趣可以參考延伸閱讀第 4 項 。

延伸閱讀

  1. 連猴子都能懂的 Git 入門指南
  2. 30 天精通 Git 版本控管
  3. Learn Git Branching
  4. Subversion SVN 版本控管
  5. Git 教學
  6. Git 達人教你搞懂 GitHub 基礎觀念
  7. 為你自己學 Git

上一篇
02. 開始程式碼版控 - 觀念篇
下一篇
04. Git Remote Repository - GitHub
系列文
從零開始建立自動化發佈的流水線30

尚未有邦友留言

立即登入留言