久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

svn merge和branch

 bananarlily 2014-02-19

使用svn幾年了,,一直對(duì)分支和合并敬而遠(yuǎn)之,一來是因?yàn)榉种У墓芾聿辉撐也傩?,二來即使涉及到分支的管理,,也不敢貿(mào)然使用合并功能,生怕合并出了問題對(duì)團(tuán)隊(duì)造成不良影響,,最主要的原因是,,自己對(duì)分支的目的和合并的方法不甚了解,這才是硬傷,。

 

最近由于適配機(jī)型的需要(本人從事手機(jī)客戶端的開發(fā)),,需要經(jīng)常接觸分支和合并兩項(xiàng)工作,突然發(fā)現(xiàn)這玩意整不明白很難開展工作,,遂這兩天著重研究了一下,,有點(diǎn)收獲,怕以后忘了,,故趁著余溫尚在趕緊寫下來,,好記性不如爛筆頭嘛。下文的實(shí)踐主要是參考了TortoiseSVN的幫助文檔和Subversion的在線文檔,,Subversion的在線文檔:http://svnbook./en/1.5/svn-book.html

 

話說我公司現(xiàn)在的源代碼管理挺亂的,,svn目錄并沒有采取標(biāo)準(zhǔn)的source/branches、source/trunk結(jié)構(gòu),,主線和分支放得到處都是,,release版本也并沒有當(dāng)成tag處理,而是當(dāng)成branch來管理,,經(jīng)常還要在release版本上改來改去,。,。。

 

先說說什么是branch,。按照Subversion的說法,,一個(gè)branch是某個(gè)development line(通常是主線也即trunk)的一個(gè)拷貝,,見下圖:

 

branch存在的意義在于,,在不干擾trunk的情況下,和trunk并行開發(fā),,待開發(fā)結(jié)束后合并回trunk中,,在branch和trunk各自開發(fā)的過程中,他們都可以不斷地提交自己的修改,,從而使得每次修改在repository中都有記錄,。

 

設(shè)想以下場(chǎng)景,如果你的項(xiàng)目需要開發(fā)一個(gè)新功能,,而該功能可能會(huì)修改項(xiàng)目中的絕大多數(shù)文件,,而與此同時(shí),你的另一位同事正在進(jìn)行bug fix,,如果你的新功能不在branch中開發(fā)而直接在trunk中開發(fā),,那么你極有可能影響另一位同事的bug fix,他/她在bug修復(fù)中可能會(huì)遇到各種各樣的問題,,因?yàn)槟愕念l繁提交代碼引入了過多的不穩(wěn)定因素,。你可能會(huì)說,那我在開發(fā)的過程中不提交不就行了,,等到我全部開發(fā)結(jié)束我再提交,,是,你可以這么做,,那還要版本控制干什么呢,?也許等到你最后提交代碼的時(shí)候(也許一周,也許兩周,?),,你會(huì)發(fā)現(xiàn)有一大堆conflict等著你resolve。,。,。

 

那么,正確的做法是什么,?使用branch,,從trunk創(chuàng)建branch,然后在你的branch上開發(fā),,開發(fā)完成后再合并到trunk中,。

 

關(guān)于branch先講到這里,,下面說說什么叫做合并。很好理解,,當(dāng)branch開發(fā)完成后(包括必要的測(cè)試),,將branch中的修改同步到trunk中,這個(gè)過程有可能包括修改文件,、增加文件,、刪除文件等等。

 

說到這里,,貌似本文差不多可以結(jié)束了,,不就是分支和合并么?只要再簡(jiǎn)單地說說如何建立分支和如何合并就可以收尾了,,可能只需兩個(gè)命令,,也可能只需鼠標(biāo)點(diǎn)幾下然后鍵盤敲兩下即可。其實(shí)事情遠(yuǎn)非這么簡(jiǎn)單,,愛動(dòng)腦筋的同學(xué)可能會(huì)問了,,將branch的改動(dòng)merge到trunk的時(shí)候,和上文說的直接在trunk中全部開發(fā)完然后提交有何區(qū)別,?你最后還不是要處理一大堆conflict,?

 

這個(gè)問題問得非常好,其實(shí)這正是本文的重點(diǎn):branch和trunk在并行開發(fā)的過程中如何感知對(duì)方,,branch如何才能在開發(fā)過程中不會(huì)和trunk越走越遠(yuǎn),,導(dǎo)致最后無法合并?試想一下,,如果在你開發(fā)branch的過程中,,trunk中的某個(gè)類文件已經(jīng)被刪除了(這可能是另外一個(gè)家伙在另一個(gè)branch上開發(fā)了兩周后才合并到trunk的),而你竟然在這個(gè)類文件上做了大量修改,,試問你到最后合并回trunk的時(shí)候該有多蛋疼,?解決這一問題的唯一手段是,branch要不停地和trunk保持同步,,你要及時(shí)地知道trunk都做了什么修改,,這些修改是否會(huì)影響你正在開發(fā)的新功能,如果需要,,你必須及時(shí)調(diào)整branch的代碼,,使之能與trunk“兼容”。

 

那么如何讓branch和trunk保持同步,?合并,,從trunk合并到branch,你沒聽錯(cuò),,是從trunk合并到branch,。關(guān)于TortoiseSVN的合并,有幾點(diǎn)需要注意:

  • TortoiseSVN的合并發(fā)生在本地,,也即你的working copy中,你無需過多擔(dān)心會(huì)對(duì)repository中的代碼造成影響
  • 不管是從trunk合并到branch還是最終從branch合并回trunk,,在每次合并前最好先update,然后將本地的修改先全部commit,,保護(hù)好現(xiàn)場(chǎng),,萬一合并不理想隨時(shí)都可以revert
  • 合并完成后看是否能正確編譯,然后測(cè)試驗(yàn)證,,最后將合并后的改動(dòng)提交到repository

 

 

下面我將step by step地演示如何一次完整的branching和merging,,包括創(chuàng)建分支,、分支開發(fā),、分支和主線同步,分支合并到主線的全過程,,甚至包括如何在本地創(chuàng)建一個(gè)測(cè)試用的repository,。

 

首先需要安裝TortoiseSVN,我安裝的版本是:TortoiseSVN 1.6.15, Build 21041 - 32 Bit , 2011/03/23 18:00:27

 

1,、本地Repository的創(chuàng)建

repository的創(chuàng)建很簡(jiǎn)單,,假設(shè)我要在D:\TortoiseSVN\TestRepository目錄中創(chuàng)建repository,只需右鍵TestRepository目錄,,依次選擇"TortoiseSVN" -> "Create repository here"便完成了repository的創(chuàng)建,。

 

2、Check out

假設(shè)要check out到D:\TortoiseSVN\TestSVN,,同樣很簡(jiǎn)單,,在D:\TortoiseSVN目錄下創(chuàng)建TestSVN目錄,然后在該目錄上右鍵,,選擇"SVN Check out...",,在彈出的窗口中的"URL of repository"中填入"file:///D:/TortoiseSVN/TestRepository",其他默認(rèn)即可,,最后點(diǎn)擊ok,。

 

3、trunk創(chuàng)建新項(xiàng)目MyProject

相當(dāng)簡(jiǎn)單就不贅述了,,只列出本次操作所作出的修改:

 

4,、創(chuàng)建branch

在/trunk/MyProject目錄上右鍵,依次選擇"TortoiseSVN" -> "Branch/tag...",,在彈出窗口的"To URL"中填入分支的地址,,在這里目標(biāo)revision選擇HEAD revision,如下圖所示,,添加log后點(diǎn)擊ok分支便建立了,。這個(gè)操作速度非??欤陆ǖ腷ranch在repository中其實(shí)只是一個(gè)指向trunk某個(gè)revision的軟連接而已,,并沒有真的復(fù)制文件,。

 

5、Check out分支

右鍵TestSVN目錄選擇"TortoiseSVN Update"即可將剛剛建立的分支下載回本地,。進(jìn)入/branches/MyProject目錄下你會(huì)發(fā)現(xiàn)其文件結(jié)構(gòu)和/trunk/MyProject一模一樣,。

 

6、branch提交一個(gè)新文件

 

7,、trunk緊接著提交一個(gè)修改

 

8,、branch再次提交一個(gè)修改

 

9、將trunk中的修改同步到branch

6-8演示的是branch和trunk在獨(dú)立,、并行地開發(fā),。為了防止在“錯(cuò)誤”的道路上越走越遠(yuǎn),現(xiàn)在branch意識(shí)到是時(shí)候和trunk來一次同步了(將trunk合并到branch),。

首先,,在本地trunk中先update一下,有沖突的解決沖突,,保證trunk和repository已經(jīng)完全同步,,然后在/branches/MyProject上右鍵,依次選擇"TortoiseSVN" -> “Merge...”,,在彈出的窗口中選擇第一項(xiàng)"Merge a range of revision",,這個(gè)類型的Merge已經(jīng)介紹得很清楚,適用于將某個(gè)分支或主線上提交的多個(gè)revision間的變化合并到另外一個(gè)分支上,。

 

點(diǎn)擊next后,,出現(xiàn)如下窗口:

 

由于是要從trunk合并到branch,理所當(dāng)然這里的"URL to merge from"應(yīng)該填trunk的路徑,,"Revision range to merge"很好理解,,就是你要將trunk的哪些revision所對(duì)應(yīng)的變化合并到branch中,可以是某一連串的revision,,比如4-7,,15-HEAD,也可以是某個(gè)單獨(dú)的revision號(hào),。由于在r4中,,trunk修改了Person.java中的talk()方法,所以這里的revision只需填4即可,。點(diǎn)擊next后出現(xiàn)下圖:

 

在這里只需保留默認(rèn)設(shè)置即可,。在點(diǎn)擊Merge按鈕前你可以先Test merge一把,看成功與否,,以及merge的詳細(xì)信息,。點(diǎn)擊Merge按鈕后trunk所做的修改將同步到branch中,。

 

10、提交合并后的branch

 

至此,,branch已經(jīng)完全和trunk同步,,branch和trunk的代碼相處很融洽,沒有任何沖突,,如果branch已經(jīng)開發(fā)結(jié)束,,那是時(shí)候?qū)ranch合并回trunk了,當(dāng)然,,如果branch還要繼續(xù)開發(fā),,那你將不斷地重復(fù)6-10這幾個(gè)步驟。

 

11,、將branch合并回trunk

在/trunk/MyProject上右鍵(注意是在主線的目錄上右鍵),,依次選擇"TortoiseSVN" -> "Merge...",在彈出的窗口中,,Merge type選擇第二項(xiàng)"Reintegrate a branch",,這種類型的合并適合在分支開發(fā)結(jié)束后將所有的改動(dòng)合并回主線,。

 

點(diǎn)擊next后出現(xiàn)如下窗口:

 

在這里,,"From URL"選擇/branches/MyProject,無需選擇revision號(hào),,Reintegrate會(huì)將branch上所有修改合并到trunk,。后面的步驟和上文第9步中的一樣,不再啰嗦了,。如無意外,,branch將成功合并到trunk,你需要做的只是將合并后的trunk趕緊commit,!

 

12,、提交合并后的trunk

so easy...

 

13、刪除branch

如果你認(rèn)為你新加的功能已經(jīng)開發(fā)完成了,,你可以刪除你的分支

 

 

到這里,,我已經(jīng)給你演示完了整個(gè)過程,我一身的汗也下來了,,我想罷工了,,不過最后我們還是看看所有的log信息吧,通過log能發(fā)現(xiàn)我們干的所有事情:

 

r1-r7正是我上文在干的事情,,從Message中你能發(fā)現(xiàn)我對(duì)trunk和branch都干了什么,,另外,在Log Messages窗口的左下角勾選了"Include merged revisions"你還能看到額外的Merge information:

 

圖中灰色的是和merge相關(guān)的log,,共發(fā)生了兩次merge,,第一次是在r6,,在r6中,branch合并了trunk在r4時(shí)提交的變化,;第二次是在r7,,在r7中,trunk合并了branch從r2到r6的所有變化,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多