Git分支初學指南

jopen 10年前發布 | 36K 次閱讀 Git 版本控制系統

git的分支是“日常用品”,軟件的各種功能可在隔離的分支里開發。這是合理的,因為合并的過程有時會不受控制。如果你在默認主線上開發,而一個提交了的功能被推遲使用,你就要在完全不一樣的功能上開發,而在此之前,你要還原你在主線上的修改。功能分支能讓你隔離變化并使合并的過程簡化,不過,一旦你開始使用功能分支,你就會發現命令行不再是無所謂的。想要正確地理解git并成功地使用它,就該首先掌握它的命令。

為什么要git

專利軟件塑造了版本控制系統(VCS)來適應如下需求:

  1. 項目有嚴格的發布時間
  2. 團隊是搭配好的的
  3. 有明確的主任務,沒什么支線劇情
  4. 分支是為不同的發行版,或有風險的功能而準備的
  5. 集中的(源碼)服務器是與世隔絕的

以上是集中式VCS的誕生背景。但集中式VCS (例如 Subversion)對于開源項目的如下特點,就不適合了:

  1. 發布時間不定
  2. 貢獻者可能遍布全球
  3. 歡迎各種創意,不管它是徹底顛覆的,或是曠日持久的
  4. 分支是必須的,因為開發者們著眼于不同功能點,而非同一目標
  5. 代碼全世界可見

git是軟件工程理念的精粹。如果工具不適合你的個案,你就自創工具。git是分布式版本控制系統(DVCS),用于解決開源項目與傳統VCS之間的阻抗失配。

UI像Tortoise SVN這樣的subversion是令人滿意的,我也很少用到他的命令行。基于主線的開發方式只需簡單的版本控制,所以在圖形化界面就能操作。

git有多種workflow styles可供選擇。你也可以繼續按使用基于主線的開發(這篇博文的代碼例子就是這樣管理的),但如果你想為開源項目做貢獻,你就得熟悉一下“功能分支”。

為什么要功能分支

git的分支是“日常用品”,軟件的各種功能可在隔離的分支里開發。這是合理的,因為合并的過程有時會不受控制。如果你在默認主線上開發,而一個提交了的功能被推遲使用,你就要在完全不一樣的功能上開發,而在此之前,你要還原你在主線上的修改。功能分支能讓你隔離變化并使合并的過程簡化,不過,一旦你開始使用功能分支,你就會發現命令行不再是無所謂的。想要正確地理解git并成功地使用它,就該首先掌握它的命令。

一個功能分支的例子

我決定給Bitronix Transaction Manager 添加一個Metrics 支持,所以第一步就是添加一個metrics分支。

首先檢查下目前有什么分支:

D:\wrk\vladmihalcea\btm>git branch

  • master</pre>

    我只有一個主線,所以創建一條新線來容納我的修改:

    D:\wrk\vladmihalcea\btm>git checkout -b metrics
    Switched to a new branch 'metrics'

    以上的命令干了兩件事:

    • 創建了一條本地的metrics線
    • 它將工作目錄切到這條新線

    我們可以看到當前的分支指向改變了:

    D:\wrk\vladmihalcea\btm>git branch2
     master

  • metrics</pre>

    通常在最后版本之前,你會做多次的commit。但為了簡化merge過程,你需要壓縮commit,就像這樣:

    commit f75838a7cf8cfdb9ceeb364a0f0faae24642d39e
    Author: vladmihalcea mih_vlad@yahoo.com
    Date:   Thu Jan 23 11:57:16 2014 +0200

    add metrics support (Codahale)

    add PoolingDataSource connection wait time histogram

    add PoolingDataSource in-use connections histrogram/mih_vlad@yahoo.com</pre>

    所有之前的改變都只存在我的本地庫,因此我要將它公開。這個過程叫創建遠程分支,是這樣做的:

    D:\wrk\vladmihalcea\btm>git push --set-upstream origin metrics
    Username for 'https://vladmihalcea@github.com':
    Counting objects: 56, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (32/32), done.
    Writing objects: 100% (34/34), 7.64 KiB | 0 bytes/s, done.
    Total 34 (delta 15), reused 0 (delta 0)
    To https://github.com/vladmihalcea/btm.git

    • [new branch] metrics -> metrics Branch metrics set up to track remote branch metrics from origin.</pre>

      現在,我的metrics的本地分支都push到了遠程分支。

    D:\wrk\vladmihalcea\btm>git push
    Username for 'https://github.com': vladmihalcea
    Password for 'https://vladmihalcea@github.com':
    Everything up-to-date

    現在去GitHub看下結果:

    Git分支初學指南

    為了提醒產品所有者我做的貢獻,我們需要發個pull request。

    Git分支初學指南

    產品所有者可以審核我的修改,并決定是否和合適merge到主線。在審核期間,他可能會叫你再作修改,才準merge,所以你要:

    1. 在本地metrics線commit新的修改
    2. 把新修改和就修改壓在一起
    3. 強push到遠程(例如 git push -f)

    有個經驗法則,你不應經常將commit的歷史重寫。因為這會影響其他以你的分支為起點的貢獻者。但你的分支也不一定會被其他貢獻者使用。

    想更了解git,你可以看下網上免費的Pro Git ,或者這個不錯的compact guide
    原文鏈接: java code geeks   翻譯: 伯樂在線 - unblock
    譯文鏈接: http://blog.jobbole.com/60241/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!