一般企業(yè)SVN配置:TortoiseSVN和VisualSVN Server黃金組合,最主要是免費(fèi)的
TortoiseSVN 客戶端 : 測(cè)試人員及開(kāi)發(fā)人員使用
VisualSVN Server客戶端 :后臺(tái)人員使用
一揭保、簽入源代碼到SVN服務(wù)器
假如我們使用Visual Studio在文件夾StartKit中創(chuàng)建了一個(gè)項(xiàng)目,我們要把這個(gè)項(xiàng)目的源代碼簽入到SVN Server上的代碼庫(kù)中里魄宏,首先右鍵點(diǎn)擊StartKit文件夾秸侣,這時(shí)候的右鍵菜單如下圖所示:
圖2-2-1
點(diǎn)擊Import,彈出下面的窗體宠互,其中http://zt.net.henu.edu.cn 是服務(wù)器名味榛,svn是代碼倉(cāng)庫(kù)的根目錄,StartKit是我們?cè)谏蟼€(gè)教程中添加的一個(gè)代碼庫(kù):
說(shuō)明:左下角的CheckBox予跌,在第一次簽入源代碼時(shí)沒(méi)有用搏色,但是,在以后你提交代碼的時(shí)候是非常有用的券册。
圖2-2-2
點(diǎn)擊OK按鈕频轿,會(huì)彈出下面的窗體,要求輸入憑據(jù):
圖2-2-3
在上面的窗體中輸入用戶名和密碼烁焙,點(diǎn)擊OK按鈕:
圖2-2-4
如上圖所示航邢,好了,源代碼已經(jīng)成功簽入SVN服務(wù)器了骄蝇。這時(shí)候團(tuán)隊(duì)成員就可以遷出SVN服務(wù)器上的源代碼到自己的機(jī)器了翠忠。
二、簽出源代碼到本機(jī)
在本機(jī)創(chuàng)建文件夾StartKit乞榨,右鍵點(diǎn)擊Checkout秽之,彈出如下圖的窗體:
圖2-2-5
在上圖中URL of Repository:下的文本框中輸入svn server中的代碼庫(kù)的地址,其他默認(rèn)吃既,點(diǎn)擊OK按鈕,就開(kāi)始簽出源代碼了考榨。
說(shuō)明:上圖中的Checkout Depth,有4個(gè)選項(xiàng)鹦倚,分別是遷出全部河质、只簽出下一級(jí)子目錄和文件、只簽出文件震叙、只簽出空項(xiàng)目掀鹅,默認(rèn)的是第一項(xiàng)。上面的例子中媒楼,我們也可以使用web的方式訪問(wèn)代碼庫(kù)乐尊,在瀏覽器中輸入http://zt.net.henu.edu.cn/svn/StartKit/
這時(shí)候也會(huì)彈出對(duì)話框,要求輸入用戶名和密碼划址,通過(guò)驗(yàn)證后即可瀏覽代碼庫(kù)中的內(nèi)容扔嵌。
搞定限府!源代碼已經(jīng)成功簽出到剛才新建的StartKit目錄中。
打開(kāi)StartKit目錄痢缎,可以看到如下圖的文件夾結(jié)構(gòu):
圖2-2-5
一旦你對(duì)文件或文件夾做了任何修改胁勺,那么文件或文件夾的顯示圖片機(jī)會(huì)發(fā)生變化。下圖中我修改了其中的二個(gè)文件:
圖2-2-7
大家看一下不同狀態(tài)所對(duì)應(yīng)的圖片:
圖2-2-8
我們已經(jīng)知道怎么將源代碼簽入到SVN服務(wù)器独旷,怎么從服務(wù)器簽出代碼到本機(jī)署穗,也簡(jiǎn)單了解了不同狀態(tài)所對(duì)應(yīng)的圖案啦。
三嵌洼、提交修改過(guò)的文件到SVN服務(wù)器
上面的圖2-2-7中蛇捌,我修改了位于Model文件中的二個(gè)文件ImageInfo.cs和NewsInfo.cs,下面演示如何提交到SVN服務(wù)器咱台。
注意:提交源代碼到服務(wù)器時(shí)络拌,一定確保本機(jī)的代碼是最新版本,否則可能提交失敗回溺,或者造成版本沖突春贸。
在Model文件夾上點(diǎn)擊右鍵或在Model文件下的空白處點(diǎn)擊右鍵,點(diǎn)擊SVN Commit…彈出下面的窗體:
圖2-2-9
點(diǎn)擊OK按鈕后遗遵,彈出如下圖的窗體:
圖2-2-10
四萍恕、添加新文件到SVN服務(wù)器
我們?cè)贛odel文件下添加一個(gè)新的類文件UserInfo.cs,在Model文件下的空白處點(diǎn)擊右鍵车要,點(diǎn)擊SVN Commit…允粤,和上面講的提交修改過(guò)的文件到SVN服務(wù)器一樣,就可以了翼岁。
另外也可以在文件UserInfo.cs上點(diǎn)擊右鍵类垫,點(diǎn)擊TortoiseSVN=>>Add,彈出如下圖的窗體:
圖2-2-11
選中UserInfo.cs文件琅坡,點(diǎn)擊OK按鈕悉患,這樣并沒(méi)有將這個(gè)文件提交到SVN服務(wù)器,只是將這個(gè)文件標(biāo)記為源代碼庫(kù)庫(kù)中的文件榆俺,并將其狀態(tài)置為修改狀態(tài)售躁。之后,我們要再SVN Commit這個(gè)文件一次茴晋,才可以將其真正提交到SVN服務(wù)器上的代碼庫(kù)中陪捷。
上面講是添加文件,實(shí)際上诺擅,添加文件夾的步驟也是一樣的市袖,這里就不說(shuō)了。
五掀虎、更新本機(jī)代碼與SVN服務(wù)器上最新的版本一致
這個(gè)也很簡(jiǎn)單凌盯,只要在需要更新的文件夾上點(diǎn)擊右鍵或在該文件下的空白處點(diǎn)擊右鍵,點(diǎn)擊SVN Update烹玉,就可以了驰怎。
注意:更新操作可能會(huì)因?yàn)榘姹緵_突而失敗,這是可以使用合并【Merge】或其他方法解決二打;也可能因?yàn)殒i定【Get Lock】而失敗县忌,這是需要先解鎖【Release Lock】。
六继效、重命名文件或文件夾症杏,并將修改提交到SVN服務(wù)器
只要在需要重命名的文件或文件夾上點(diǎn)擊右鍵,點(diǎn)擊TortiseSVN=>>Rename…瑞信,在彈出的窗體中輸入新名稱厉颤,點(diǎn)擊OK按鈕,就可以了凡简。此方法也不是直接重命名逼友,而是將該文件或文件夾的名稱標(biāo)記為重命名后名稱,也需要我們使用SVN Commit提交到SVN服務(wù)器后才真正重命名秤涩。
七帜乞、刪除文件或文件夾,并將修改提交到SVN服務(wù)器
最簡(jiǎn)單就是筐眷,你直接刪除文件或文件夾黎烈,然后使用SVN Commit提交更新到SVN服務(wù)器。另外一種方法是在你要?jiǎng)h除的文件或文件夾上點(diǎn)擊右鍵=>>TortoiseSVN=>>Delete刪除,此方法也不是直接刪除匀谣,而是將該文件或文件夾的狀態(tài)置為刪除照棋,也需要我們使用SVN Commit提交到SVN服務(wù)器后才真正刪除。
說(shuō)明:實(shí)際上武翎,從你把源代碼遷簽入SVN服務(wù)器開(kāi)始必怜,每一個(gè)版本的數(shù)據(jù)和文件,就算是你已經(jīng)刪除了的后频,也都可以隨時(shí)遷出梳庆。
以上只是TortoiseSVN最簡(jiǎn)單的幾個(gè)功能,其實(shí)他的功能遠(yuǎn)不止這些卑惜,其他的功能大家可以在使用的過(guò)程中慢慢體會(huì)膏执,有些功能我會(huì)在下面的教程中使用到,到時(shí)候會(huì)和大家講清楚用法露久。
注意:向SVN服務(wù)器提交源代碼的時(shí)候更米,一定不要提交bin、obj等文件夾毫痕,否則會(huì)很麻煩征峦。但是web項(xiàng)目的bin目錄除外迟几,但是web項(xiàng)目的bin目錄中的引用其他項(xiàng)目而生成的dll不需要提交。
一個(gè)好習(xí)慣:如果項(xiàng)目中引用了其他的第三方的程序集栏笆,比如EnterpriseLibrary类腮、FCKEditor等,這時(shí)候不要簡(jiǎn)單從他們的安裝位置引用蛉加,而是在你的解決方案下蚜枢,添加一個(gè)Library的目錄,把需要的程序集復(fù)制到這里针饥,然后從Library目錄引用厂抽,這樣有什么好處,自己想一想吧丁眼!
Tortoise SVN 客戶端 基本用法
- export 和check out
export 下載源代碼
用法:
1筷凤、新建一個(gè)空的文件夾,右鍵點(diǎn)擊它苞七,可以看到TortoiseSVN菜單以及上面的SVN Checkout嵌施。
2、不用管這個(gè)Checkout莽鸭,我們選擇TortoiseSVN菜單下的Export...吗伤,接著它會(huì)讓你輸入url。
3硫眨、比如輸入【迷宮探寶】的SVN地址是:http://game-rts-framework.googlecode.com/svn/trunk/
4足淆、其他選項(xiàng)不需要更改,Omit externals不要勾選礁阁,HEAD Revision選中表示最新的代碼版本巧号,接著點(diǎn)擊OK即可將代碼導(dǎo)出到這個(gè)目錄中:)
check out 意思簽出,雖然和Export的效果一樣是把代碼從服務(wù)器下載到本地姥闭,但是Checkout有驗(yàn)證的功能丹鸿,Checkout到某處的代碼,將會(huì)被TortoiseSVN監(jiān)視棚品,里面的文件可以享受各種SVN的服務(wù)靠欢。
2 .每次提交代碼需要注意哪些問(wèn)題
如果你更新了目錄中的文件,提交代碼需要用到commit功能铜跑,commit的功能不僅僅是上傳门怪,他會(huì)和服務(wù)器上面的文件進(jìn)行對(duì)比,假如你更新了某個(gè)文件而服務(wù)器上面也有人更新了這個(gè)文件锅纺,并且是在你checkout之后做的更新掷空,那么它會(huì)嘗試將你的更新和他人的更新進(jìn)行融合(merge),假如自動(dòng)merge不成功,那么報(bào)告conflict坦弟,你必須自己來(lái)手動(dòng)merge护锤,也就是把你的更新和別人的更新無(wú)沖突的寫(xiě)在一起。
commit的時(shí)候酿傍,最好填寫(xiě)Log信息烙懦,這樣保證別人可以看到你的更新究竟做了寫(xiě)什么。這就相當(dāng)于上傳文件并且說(shuō)明自己做了那些修改拧粪,多人合作的時(shí)候log非常重要修陡。
TortoiseSVN的commit只會(huì)上傳原先checkout然后又被修改了的文件沧侥,假如你新加入了某些文件可霎,需要右鍵點(diǎn)擊文件選擇Add,然后文件上面會(huì)出現(xiàn)一個(gè)加號(hào)宴杀,在下次commit的時(shí)候它就會(huì)被upload并且被標(biāo)記為綠色對(duì)勾癣朗。沒(méi)有綠色對(duì)勾的文件不會(huì)被commit。
假如你需要給帶有綠色對(duì)勾文件改名或者移動(dòng)它的位置旺罢,請(qǐng)不要使用windows的功能旷余,右鍵點(diǎn)擊它們翠拣,TortoiseSVN都有相應(yīng)的操作扳肛。想象這些文件已經(jīng)不在是你本地的東西,你的一舉一動(dòng)都必須讓Tortoise知道池磁。
假如修改了某個(gè)文件但是你后悔了跪解,可以右鍵點(diǎn)擊它選擇Revert炉旷,它將變回上次checkout時(shí)候的情況〔婕ィ或者Revert整個(gè)工程到任意一個(gè)從前的版本.
下面描述在使用Commit時(shí)的幾個(gè)注意點(diǎn):
-------------如有多個(gè)文件需要同時(shí)提交窘行,同時(shí)文件在不同的目錄下,必須找到這些文件的最短目錄上點(diǎn)擊Commit图仓,TortoiseSVN會(huì)搜索被點(diǎn)擊目錄以及該目錄下所有的文件罐盔,并將修改變動(dòng)的文件羅列在列表中。
-------------仔細(xì)查看列表中的文件救崔,確定哪些文件時(shí)需要更新的惶看,如果不需要更新某個(gè)已經(jīng)變化了的文件,只需要在該文件上點(diǎn)擊右鍵六孵,選擇還原操作碳竟;選擇需要新增的文件,不要將臨時(shí)文件添加到版本庫(kù)中狸臣。
-------------如遇到文件沖突(沖突:要提交的文件已被其他人改動(dòng)并提交到版本庫(kù)中)要啟用解決沖突功能莹桅。 - 如何保持本地版本和服務(wù)器版本同步
使用update來(lái)同步本地和服務(wù)器上的代碼。同樣是右鍵選擇SVN update,所有的更改就會(huì)從服務(wù)器端傳到你的硬盤(pán)诈泼。注意懂拾,假如別人刪除了某個(gè)文件,那么更新之后你在本地的也會(huì)被刪除铐达。
如果本地的代碼已經(jīng)被修改岖赋,和commit一樣會(huì)先進(jìn)行merge,不成功的話就會(huì)報(bào)告conflict
4 如何在同一個(gè)在一個(gè)工程的各個(gè)分支或者主干之間切換
使用tortoise SVN-->switch
在URL中輸入branch或trunk的url地址
5.如何比較兩個(gè)版本之間的差別
本地更改
如果你想看到你的本地副本有哪些更加瓮孙,只用在資源管理器中右鍵菜單下選TortoiseSVN→ 比較差異唐断。
與另外一個(gè)分支/標(biāo)簽之間的差異
如果你想查看主干程序(假如你在分支上開(kāi)發(fā))有哪些修改或者是某一分支(假如你在主干上開(kāi)發(fā))有哪些修改,你可以使用右鍵菜單杭抠。在你點(diǎn)擊文件的同時(shí)按住Shift鍵脸甘,然后選擇TortoiseSVN→ URL比較。在彈出的對(duì)話框中偏灿,將特別顯示將與你本地版本做比較的版本的URL地址丹诀。
你還可以使用版本庫(kù)瀏覽器,選擇兩個(gè)目錄樹(shù)比較翁垂,也許是兩個(gè)標(biāo)記铆遭,或者是分支/標(biāo)記和最新版本。郵件菜單允許你使用比較版本來(lái)比較它們沿猜。閱讀第 5.9.2 節(jié) “比較文件夾”以便獲得更多信息枚荣。
與歷史版本的比較差異
如果你想查看某一特定版本與本地拷貝之間的差異,使用顯示日志對(duì)話框啼肩,選擇要比較的版本橄妆,然后選擇在右鍵菜單中選與本地拷貝比較差異
兩個(gè)歷史版本的比較
如果你要查看任意已提交的兩個(gè)歷史版本之間的差異,在版本日志對(duì)話框中選擇你要比較的兩個(gè)版本(一般使用 Ctrl-更改)疟游,然后在右鍵菜單中選比較版本差異
如果你在文件夾的版本日志中這樣做呼畸,就會(huì)出現(xiàn)一個(gè)比較版本對(duì)話框,顯示此文件夾的文件修改列表颁虐。閱讀第 5.9.2 節(jié) “比較文件夾”以便獲得更多信息蛮原。
提交所有修改
如果你要在一個(gè)視窗中查看某一版本的所有更改,你可以使用統(tǒng)一顯示所有比較 (GNU 片段整理)另绩。它將顯示所有修改中的部分內(nèi)容儒陨。它很難顯示一個(gè)全面清晰的比較,但是會(huì)將所有更改都集中顯示出來(lái)笋籽。在版本日志對(duì)話框中選擇某一版本蹦漠,然后在右鍵菜單中選擇統(tǒng)一顯示所有比較。
文件差異
如果你要查看兩個(gè)不同文件之間的差異车海,你可以直接在資源管理器中選擇這兩個(gè)文件(一般使用 Ctrl-modifier)笛园,然后右鍵菜單中選TortoiseSVN→ 比較差異。
WC文件/文件夾與URL之間的比較差異
如果你要查看你本地拷貝中的任一文件與版本庫(kù)中任一文件之間差異,
譴責(zé)信息之間的比較差異
如果你要查看的不僅是比較差異而且包括修改該版本的作者研铆,版本號(hào)和日期埋同,你可以在版本日志對(duì)話框中綜合比較差異和譴責(zé)信息。這里有更多詳細(xì)介紹第 5.20.2 節(jié) “追溯不同點(diǎn)”棵红。
比較文件夾差異
TortoiseSVN 自帶的內(nèi)置工具不支持查看多級(jí)目錄之間的差異凶赁,但你可以使用支持該功能的外置工具來(lái)替代。在這里 第 5.9.4 節(jié) “其他的比較/合并工具”我們可以介紹一些我們使用過(guò)的工具逆甜。
6.提交代碼時(shí)怎樣知道自己改了哪些文件虱肄,別人改了哪些文件 - 如何知道某個(gè)文件的某一行是誰(shuí)在哪個(gè)版本修改的
- 如何為一個(gè)SVN主工程建立分支或tag
創(chuàng)建分支使用步驟:
1、選擇你要產(chǎn)生分支的文件交煞,點(diǎn)擊鼠標(biāo)右鍵咏窿,選擇[分支/標(biāo)記...]
2、在[至URL(T)]輸入框中將文件重命名為你的分支文件名错敢,輸入便于區(qū)分的日志信息翰灾,點(diǎn)擊確認(rèn)缕粹。
3稚茅、在SVN倉(cāng)庫(kù)中會(huì)復(fù)制一個(gè)你所指定的文件,文件名稱就是你所命名的平斩,但是在你的本地目錄上看不到新建的分支文件名亚享,要使你的文件更新作用到你的分支上,你必須選擇文件绘面,點(diǎn)擊鼠標(biāo)右鍵欺税,選擇[切換...],選擇你重命名的文件,點(diǎn)擊確定即可揭璃。這樣你的本地文件就和分支文件關(guān)聯(lián)上了晚凿,不要奇怪,這時(shí)本地目錄上看到的文件名仍然為舊的文件名瘦馍。
經(jīng)驗(yàn)小結(jié):
1歼秽、如果操作的文件之前還未提交,而你又想把文件提交到新的分支上情组,記得一定要選擇切換
2燥筷、SVN分支的管理實(shí)際上就是把不同的分支用不同的文件保存,因此你在取得新版本的時(shí)候會(huì)發(fā)現(xiàn)院崇,不同分支的最新文件也會(huì)被獲取下來(lái)肆氓。
創(chuàng)建tag操作,相當(dāng)于把當(dāng)前的代碼版本復(fù)制一份到其他地方底瓣,然后以這個(gè)地方為出發(fā)點(diǎn)進(jìn)行新的開(kāi)發(fā)谢揪,與原來(lái)位置的版本互不干擾。
對(duì)于branches、tags拨扶、trunk這三個(gè)目錄寺滚,并不是subversion必需的,而是被總結(jié)的一種良好的團(tuán)隊(duì)開(kāi)發(fā)習(xí)慣屈雄,其使用方法為:
1村视、開(kāi)發(fā)者提交所有的新特性到主干。 每日的修改提交到/trunk:新特性酒奶,bug修正和其他蚁孔。
2、這個(gè)主干被拷貝到“發(fā)布”分支惋嚎。 當(dāng)小組認(rèn)為軟件已經(jīng)做好發(fā)布的準(zhǔn)備(如杠氢,版本1.0)然后/trunk會(huì)被拷貝到/branches/1.0。
3另伍、項(xiàng)目組繼續(xù)并行工作鼻百,一個(gè)小組開(kāi)始對(duì)分支進(jìn)行嚴(yán)酷的測(cè)試,同時(shí)另一個(gè)小組在/trunk繼續(xù)新的工作(如摆尝,準(zhǔn)備2.0)温艇,如果一個(gè)bug在任何一個(gè)位置被發(fā)現(xiàn),錯(cuò)誤修正需要來(lái)回運(yùn)送堕汞。然而這個(gè)過(guò)程有時(shí)候也會(huì)結(jié)束勺爱,例如分支已經(jīng)為發(fā)布前的最終測(cè)試“停滯”了。
4讯检、分支已經(jīng)作了標(biāo)簽并且發(fā)布琐鲁,當(dāng)測(cè)試結(jié)束,/branches/1.0作為引用快照已經(jīng)拷貝到/tags/1.0.0人灼,這個(gè)標(biāo)簽被打包發(fā)布給客戶围段。
5、分支多次維護(hù)投放。當(dāng)繼續(xù)在/trunk上為版本2.0工作奈泪,bug修正繼續(xù)從/trunk運(yùn)送到/branches/1.0,如果積累了足夠的bug修正跪呈,管理部門(mén)決定發(fā)布1.0.1版本:拷貝/branches/1.0到/tags/1.0.1段磨,標(biāo)簽被打包發(fā)布。
一般建立最初的repository時(shí)耗绿,就建好這三個(gè)目錄苹支,把所有代碼放入/trunk中,如:要將project1目錄下的代碼導(dǎo)入repository误阻,project1的結(jié)構(gòu)就是:project1/branches债蜜,project1/tags晴埂,project1/trunk,project1/trunk/food.c寻定,project1/trunk/egg.pc……儒洛,然后將project1目錄導(dǎo)入repository,建立最初的資料庫(kù)狼速。然后export回project1琅锻,作為本地工作目錄。