日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

SVN trunk(主线) branch(分支) tag(标记) 用法详解和详细操作步骤

發(fā)布時(shí)間:2023/12/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SVN trunk(主线) branch(分支) tag(标记) 用法详解和详细操作步骤 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一:使用場(chǎng)景:

假如你的項(xiàng)目(這里指的是手機(jī)客戶端項(xiàng)目)的某個(gè)版本(例如1.0版本)已經(jīng)完成開(kāi)發(fā)、測(cè)試并已經(jīng)上線了,接下來(lái)接到新的需求,新需求的開(kāi)發(fā)需要修改多個(gè)文件中的代碼,當(dāng)需求已經(jīng)開(kāi)始開(kāi)發(fā)一段時(shí)間的時(shí)候,突然接到用戶或測(cè)試人員的反饋,項(xiàng)目中有個(gè)重大bug需要緊急修復(fù),并且要求bug修復(fù)后要立即上線;此時(shí)應(yīng)該怎么修復(fù)bug呢?是在當(dāng)前已經(jīng)開(kāi)發(fā)新需求的基礎(chǔ)上進(jìn)行修復(fù)嗎?答案是否定的,原因是:如果是在已經(jīng)開(kāi)發(fā)新需求的基礎(chǔ)上進(jìn)行修復(fù)bug,那么新需求還沒(méi)開(kāi)發(fā)好,更沒(méi)有測(cè)試,怎么立刻(或最可能快的)上線?!再次如果新功能的開(kāi)發(fā)和bug修復(fù)的代碼都涉及到同一段代碼沖突了怎么辦 。很顯然不能在當(dāng)前開(kāi)發(fā)的代碼基礎(chǔ)上進(jìn)行bug修復(fù)工作完美的解決方案是:在當(dāng)時(shí)完成的那個(gè)版本中進(jìn)行bug fix,這樣帶來(lái)的好處是:

??? bug修復(fù)好之后可立即上線,不會(huì)因?yàn)樾滦枨筮€沒(méi)有完成或測(cè)試而延遲上線時(shí)間
??? bug修復(fù)是在原來(lái)上線的那個(gè)版本進(jìn)行修復(fù)的,引起新bug的風(fēng)險(xiǎn)小,如果是在新需求的基礎(chǔ)上修復(fù)bug, 那么新功能可能會(huì)帶來(lái)新的bug
?

??? trunk
??? tags
??? branches

trunk(主干|主線) branchs(分支) tags(標(biāo)記)

??? truck(主干|主線|主分支):是用來(lái)做主方向開(kāi)發(fā)的,新功能的開(kāi)發(fā)應(yīng)放在主線中,當(dāng)模塊開(kāi)發(fā)完成后,需要修改,就用branch。
??? branch(分支):分支開(kāi)發(fā)和主線開(kāi)發(fā)是可以同時(shí)進(jìn)行的,也就是并行開(kāi)發(fā),分支通常用于修復(fù)bug時(shí)使用
??? tag(標(biāo)記):用于標(biāo)記某個(gè)可用的版本,可以標(biāo)記已經(jīng)上線發(fā)布的版本,也可以標(biāo)記正在測(cè)試的版本,通常是只讀的

?
三:SVN具體操作步驟:(TortoiseSVN版本: 1.8.8)
一:創(chuàng)建倉(cāng)庫(kù)

1. 創(chuàng)建目錄結(jié)構(gòu)D:\TortoiseSVN\Repository\Repo-iOS

2. 在該目錄結(jié)構(gòu)上右鍵

---> TortoiseSVN

---> Create repository here(創(chuàng)建倉(cāng)庫(kù)這里)
---> Create folder structure(創(chuàng)建文件結(jié)構(gòu)) ---> Start Repobrowser(開(kāi)始倉(cāng)庫(kù)瀏覽) ---> Ok

二:將項(xiàng)目上傳到SVN上

?????? ---> 桌面右鍵

?????? ---> TortoiseSVN

?????? ---> repo-browser--> URL:? file:///D:/TortoiseSVN/Repository/Repo-iOS ---> Ok

?????? --> 選中trunk文件夾右鍵

?????? ---> Add folder...

?????? ---> 選中要上傳到SVN的項(xiàng)目的最外層目錄,輸入日志

?????? ---> Ok

三:Check Out?

1. 在電腦任意位置創(chuàng)建一個(gè)存放項(xiàng)目代碼的目錄,例如:D:\TortoiseSVN\Repository\Source
2. 將代碼檢出到該位置

四:開(kāi)發(fā)周期

?????? 1. 在目錄D:\TortoiseSVN\Repository\Source\trunk\MyAppProject上進(jìn)行開(kāi)發(fā),注意是在trunk主線上

因?yàn)轫?xiàng)目剛建立,這是在開(kāi)發(fā)新功能,所以要在主線上開(kāi)發(fā)


?????? 2. 開(kāi)發(fā)一段時(shí)間后,經(jīng)測(cè)試,上線到App Store,Android上傳到其它應(yīng)用商城,摘取上線時(shí)的HomeViewController文件中一段代碼如下(注意:這里雖然是使用的Objective-C作為示例來(lái)演示SVN的,這并不影響你學(xué)習(xí)SVN,用什么語(yǔ)言來(lái)演示效果原理都是一樣的)
?

- (void) viewDidLoad {[super viewDidLoad];// -----------------------------------------int y = 0;int result = 10 / y; NSLog(@"iOS APP 第一階段開(kāi)發(fā)完成了! 結(jié)果是:%ld", result);// End }

?? 3. 在D:\TortoiseSVN\Repository\Source\tags 目錄下新建一個(gè)目錄:1.0,并將該目錄提交到SVN上,然后右鍵???????? D:\TortoiseSVN\Repository\Source\trunk\MyAppProject該目錄---> TortoiseSVN---->Branch/tag... -----> To Path :/tags/1.0/MyAppProject 并選中 Head revision in repository ---> Ok此時(shí)Source/tags/1.0 目錄中沒(méi)有任何內(nèi)容,需要更新一下該目錄做update操作。更新之后看到一個(gè)完整的項(xiàng)目源碼保存到該目錄中(該目錄下的源碼可看做是trunk目錄下版本為1.0的一個(gè)副本),查看一下/tags/1.0/HomeViewController中的viewDidLoad和trunk/MyAppProject/HomeViewController中的viewDidLoad代碼完全一樣。

?
?????? 5. 用戶或測(cè)試人員反饋應(yīng)用有重大bug,需要立即修復(fù)該bug并盡快上線, 此時(shí)程序員需要為 tags/1.0 下的MyAppProject 打一個(gè)分支branch,
????????? 操作過(guò)程如下:選中Source/tags/1.0/MyAppProject 右鍵 TortoiseSVN---->Branch/tag... -----> To Path :/branches/MyAppProject? ---> Ok
?此時(shí)看D:\TortoiseSVN\Repository\Source\branches目錄下仍然沒(méi)有任何內(nèi)容,也需要update一下,更新之后發(fā)現(xiàn)該目錄下
?也出現(xiàn)一個(gè)完整的項(xiàng)目代碼(該代碼可看做是tags/1.0/MyAppProject的一個(gè)副本),注意打分支和打標(biāo)記都是使用Branch/tag...菜單,不同的是To Path 的目錄不一樣,圖解看打分支的圖,只是to path 值不一樣,此時(shí)branches/MyAppProject/HomeViewController中的viewDidLoad和tags/1.0/MyAppProject/HomeViewController中的viewDidLoad代碼完全一致。


?????? 6. 切換工作空間,使用Xcode|Eclipse集成工具打開(kāi)/branches/MyAppProject下的項(xiàng)目,然后在此基礎(chǔ)上調(diào)試并修復(fù)bug,注意打開(kāi)的必須是分支中的項(xiàng)目


?????? 7. bug 修復(fù)好后,先提交修改的文件,并進(jìn)行客戶端App上線,上線完成后再將branches/MyAppProject/打個(gè)tag到1.0.1目錄下(tags/1.0.1)(操作步驟同步驟3),tag操作完成后,可以看到tags/1.0.1/HomeViewController.viewDidLoad 和? branches/ MyAppProject/HomeViewController.viewDidLoad是完全一致的,將branches/MyAppProject打一個(gè)新的tag是以便于下次在此基礎(chǔ)上再次修復(fù)bug,至此bug修復(fù)已經(jīng)完成;修復(fù)bug后的代碼如下:
?

- (void) viewDidLoad {[super viewDidLoad];// -----------------------------------------int y = 10;int result = 10 / y;NSLog(@"iOS APP 第一階段開(kāi)發(fā)完成了! 結(jié)果是:%ld", result);// EndNSLog(@"1.0 版本閃退bug 已修復(fù), 程序出現(xiàn)除0異常"); }

?8. 接下來(lái)將branch和trunk進(jìn)行合并,操作步驟如下:

???????? ----> 右鍵 branches/MyAppProject ------>TortoiseSVN

???????? ----> Merge...

???????? ---> Merge a range of revisions

???????? ----> Next --->URL to merge from : file:///D:/TortoiseSVN/Repository/Repo-iOS/trunk/MyAppProject

???????? ----> Next

???????? ----> Merge

9. 將trunk和branches進(jìn)行合并 步驟如下,

? 右鍵/turnk/MyAppProject ----> Merge... -----> Merge a range of revisions?? -----> Next

----->? URL to merge from : file:///D:/TortoiseSVN/Repository/Repo-iOS/branches/MyAppProject

? 步驟同上,只是? URL to merge from?? 的路徑不一樣。合并完成后,查看一下/trunk/MyAppProject/HomeViewController/viewDidLoad方法如下:
?

- (void) viewDidLoad {[super viewDidLoad];// -----------------------------------------int y = <strong>10</strong>; // <strong>可以看到branches分支中的代碼已經(jīng)合并到主線上了</strong>int result = 10 / y;NSLog(@"iOS APP 第一階段開(kāi)發(fā)完成了! 結(jié)果是:%ld", result);// EndNSLog(@"<strong>1.0 版本閃退bug 已修復(fù), 程序出現(xiàn)除0異常</strong>");NSLog(@"其他同事在主線trunk中進(jìn)行新需求開(kāi)發(fā)...");NSLog(@"其他同事在主線trunk中進(jìn)行新需求開(kāi)發(fā)..."); }

?10. 此時(shí)合并徹底結(jié)束,branches目錄下的源碼如果不想要也可以刪掉,接著修改bug的這位程序員需要切換工作空間到主線上來(lái),使用Xcode重新打開(kāi)trunk/MyAppProject項(xiàng)目,接著開(kāi)發(fā)尚未完成的新功能。SVN目錄如下:

說(shuō)明:

1. 分支開(kāi)發(fā)和主干開(kāi)發(fā)是兩個(gè)完全獨(dú)立的過(guò)程,兩者可以同時(shí)進(jìn)行開(kāi)發(fā)
2. 因分支和主干開(kāi)發(fā)是并行的,所以?xún)烧呖梢匀我獾亩啻翁峤划?dāng)前工程所修改的文件

總結(jié)

以上是生活随笔為你收集整理的SVN trunk(主线) branch(分支) tag(标记) 用法详解和详细操作步骤的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。