Table of Contents

隨著軟體開發環境的演進,Git 正逐漸成為主要的版本控制工具。儘管目前仍有不少團隊習慣使用 SVN,但 Git 的靈活性和功能吸引了越來越多的開發者。但其實 SVN 上能做到的事情,Git 幾乎都能實現,同時 Git 還引入了一些新概念和功能,使版本管理更有效率,也更適合現代軟體開發需求。今天我們就來了解 Git 的基礎概念和一些常見操作,並且談談為什麼 SVN 使用者值得考慮轉換到 Git 吧。

SVN 用得好好的,為什麼需要換到 Git?

雖然目前 SVN 因為它簡單且大家熟悉其操作流程的關係,許多團隊的還是會用它做為主要的版本控制工具,但就如我們前面所講的,其實這些 SVN 上面現有的功能在Git上面幾乎都可以實現。而且因為 Git 的設計概念與邏輯更加靈活,讓他擁有很多 SVN 難以實現的優勢,例如:

  • 分散式版本控制:Git 是一個分散式版本控制系統,讓每個開發者的本地端都擁有完整的版本庫,這不只在協作上能更靈活,還大幅降低系統萬一出錯時所要付出的成本,因為即使遠端伺服器出現問題,開發者還是可以從本地端commit 和 rollback。
  • 強大的分支操作:SVN 的 branch 操作往往讓人感到繁瑣,因為操作步驟較多且缺乏靈活性,像是 branch 創建和 merge 的過程相對複雜,而且引發 conflicts的時候的時候要手動介入的時候也比較多。相比下來 Git 的 branch 操作輕量且靈活,直接輸入簡短的指令就能做到SVN當中的複雜操作,讓多人開發的場景更流暢。而且 Git 還引入了方便的 stash 功能,可以暫存未完成的變更,之後隨時能直接繼續編輯,這在 SVN 裡面是比較難直接實現的功能。
  • 更好的合併與重構歷史:Git 提供了 mergerebase 兩種方式來合併分支,而且 Git 的變更記錄是分散式的,開發者可以自由地在本地端 commit,這樣的自由度在強調集中式版本控制的 SVN 中是做不到的。

所以,如果你目前屬於是習慣使用 SVN 的開發者的話,雖然轉換到 Git 可能需要時間適應,但從長遠來看,Git 它能給你帶來的效率和靈活度會讓你付出的轉換成本顯得很值得!如果對於無介面的使用方式難以接受,也可以考慮使用看看像 Sourcetree 這樣的圖形化工具來幫助管理分支和提交,減少學習曲線的難度。

來開始使用 Git 吧!

既然我們現在已經了解使用 Git 的好處了,那在開始使用 Git 前,首先要設定一些基本資訊,例如使用者名稱和電子郵件地址。這些設定會與每一次的提交(commit)一起保存,這雖然只是一個小小的設定,但對接下來的協作開發很重要,因為它能幫助團隊追蹤每次變更的責任歸屬,確保所有修改都有源頭與依據可以查詢,進一步提升變更管理和協作的效率。

設定使用者名稱和電子郵件

git config --global user.name "你的名字"

git config --global user.email "你的電子郵件"

使用 --global 可以讓這些設定應用到系統中的所有 Git 專案,如果你只想針對某個特定專案設定,也可以移除 --global 參數。

常見的 Git 名詞解釋

  • stage:將變更加入到準備提交的區域,也稱為「暫存區」。
  • commit:將暫存區中的變更提交,形成一個版本。
  • push:將已提交的變更推送到遠端伺服器,讓團隊其他人可以看到更新。
  • pull:從遠端伺服器拉最新的變更到本地端。
  • fetch:更新遠端伺服器的狀態,但不會自動合併變更到本地分支,這讓你可以檢查變更後再決定是否合併。

分支(Branch)操作

Git 的分支功能非常強大且靈活,可以讓你在不影響主分支的情況下開發新功能,並在完成後再合併回主分支,確保主分支保持穩定。

如何建立和合併分支

  • 建立分支

git branch 新分支名稱

  • 切換到分支

git checkout 分支名稱

  • 合併分支
    • merge:將其他分支的變更全部合併到目前的分支,適合用來整合不同開發者的工作。
    • rebase:把目前所在的分支的變更接到另一個分支的最新進度後面,保持修改歷程的簡潔。這種方式更適合用於私人開發分支,讓合併後的 commit 記錄看更直覺乾淨。

push 和 pull 變更

當你完成了一些變更並commit後,需要將這些變更 push 到遠端伺服器,這樣團隊的其他成員才能看到你做的東西。

  • 推送變更

git push origin 分支名稱

  • 拉取變更

git pull origin 分支名稱

如果你只想查看遠端的更新狀態,而不立即合併變更,可以使用 git fetch

早學早享受

雖然目前 SVN 還是很多人在使用,但它集中式管理的架構是一個很大的硬傷,這樣很容易導致規模或複雜度高、或是多人協作的開發團隊要因此在版本管理上付出很多額外的時間和管理成本。

相比之下 Git 在分散式架構上的先天優勢就解決了這樣的問題,即使在操作邏輯上與 SVN 有很大的不同,導致有些已經習慣 SVN 的的工程師們有點排斥用它,但我必須說,長遠下來使用 Git 的好處會非常明顯,而且我認為 Git 將會在很短的時間以內徹底取代 SVN,成為業界普遍公認的版本管理方式,到了那時候,能不能靈活且熟練地使用 Git,一定會成為衡量工程師能力的重要指標之一喔!