[轉(zhuǎn)載地址:http://blog.csdn.net/zhouyong0/article/details/7968667贱呐,原文地址不清楚]
下面我將step by step地演示如何一次完整的branching和merging实蔽,包括創(chuàng)建分支员淫、分支開發(fā)、分支和主線同步絮爷,分支合并到主線的全過程坛梁,甚至包括如何在本地創(chuàng)建一個(gè)測試用的repository。
1疤祭、本地Repository的創(chuàng)建
repository的創(chuàng)建很簡單涨共,假設(shè)我要在D:\TortoiseSVN\TestRepository目錄中創(chuàng)建repository拴念,只需右鍵TestRepository目錄类垦,依次選擇"TortoiseSVN"
-> "Create repository here"便完成了repository的創(chuàng)建。
2以故、Check out
假設(shè)要check
out到D:\TortoiseSVN\TestSVN蜗细,同樣很簡單,在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)簡單就不贅述了白粉,只列出本次操作所作出的修改:
4、創(chuàng)建branch
在/trunk/MyProject目錄上右鍵鼠渺,依次選擇"TortoiseSVN" -> "Branch/tag..."鸭巴,在彈出窗口的"To
URL"中填入分支的地址,在這里目標(biāo)revision選擇HEAD
revision拦盹,如下圖所示鹃祖,添加log后點(diǎn)擊ok分支便建立了。這個(gè)操作速度非称沼撸快恬口,新建的branch在repository中其實(shí)只是一個(gè)指向trunk某個(gè)revision的軟連接而已校读,并沒有真的復(fù)制文件。
5祖能、Check out分支
右鍵TestSVN目錄選擇"TortoiseSVN Update"即可將剛剛建立的分支下載回本地歉秫。進(jìn)入/branches/MyProject目錄下你會發(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í)候和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所對應(yīng)的變化合并到branch中喷兼,可以是某一連串的revision,比如4-7后雷,15-HEAD季惯,也可以是某個(gè)單獨(dú)的revision號。由于在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é)束后將所有的改動合并回主線善绎。
點(diǎn)擊next后出現(xiàn)如下窗口:
在這里,"From
URL"選擇/branches/MyProject诫尽,無需選擇revision號禀酱,Reintegrate會將branch上所有修改合并到trunk。后面的步驟和上文第9步中的一樣牧嫉,不再啰嗦了剂跟。如無意外,branch將成功合并到trunk酣藻,你需要做的只是將合并后的trunk趕緊commit曹洽!
12、提交合并后的trunk
合并后的項(xiàng)目上右鍵臊恋,Temp -> Commit衣洁。
13、刪除branch
如果你認(rèn)為你新加的功能已經(jīng)開發(fā)完成了抖仅,你可以刪除你的分支坊夫!
14、查看log信息
到這里撤卢,我已經(jīng)給你演示完了整個(gè)過程环凿,不過最后我們還是看看所有的log信息吧,通過log能發(fā)現(xiàn)我們干的所有事情:
r1-r7正是我上文在干的事情放吩,從Message中你能發(fā)現(xiàn)我對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的所有變化捣卤。