1.svn環(huán)境搭建
在應(yīng)用myEclips 8.5做項(xiàng)目時(shí),svn會(huì)成為團(tuán)隊(duì)項(xiàng)目的一個(gè)非常好的工具,苦苦在網(wǎng)上尋求了一下午,終于整合好了這個(gè)環(huán)境,在這里簡單介紹下,希望能為剛開始用svn的朋友一點(diǎn)點(diǎn)幫助。
svn環(huán)境需要(1)服務(wù)器端(2)客戶端(3)應(yīng)用在myeclipse中的svn插件
第一步,安裝svn服務(wù)器端。我用的是VisualSVN-Server-2.1.3這個(gè)版本的。
安裝完后,打開VisualSVN-Server,創(chuàng)建一個(gè)根目錄test,則這個(gè)目錄在服務(wù)器的地址 為:https://192.168.1.66:8443/svn/test; ip地址為你本機(jī)的地址,8443是你安裝服務(wù)器時(shí)設(shè)定的端口。下來你可以設(shè)置用戶及權(quán)限。
第二步,安裝客戶端, 我使用的是TortoiseSVN-1.6.10.19898-win32-svn-1.6.12這個(gè)版本的客戶端工具。隨意提供一個(gè)地 址:http://hlbr.onlinedown.net/soft.php?id=89603。 安裝完畢后重啟電腦,你會(huì)發(fā)現(xiàn)右鍵中多出來一些功能了,表明客戶端安裝成功。(附件中VisualSVN_Server安裝_配置_使用圖文教程.rar 是一個(gè)安裝教程)
第三步,myeclips8.5下安裝svn插件。在官網(wǎng)http://subclipse.tigris.org/下載了最新插件 site-1.6.15.zip包,
解壓后使用其features和plugins兩個(gè)文件夾,參考網(wǎng)上做法,去掉其中一些包,myEclipse啟動(dòng)才不報(bào)錯(cuò)。
(1)MyEclipse 8.5根目錄D:\Program Files\Genuitec\MyEclipse 8.5下新建名為SVN的文件夾,將這兩個(gè)文件夾放進(jìn)去。(后邊提供的SVN插件包就是我們要用到的SVN文件夾)
(2)在D:\Program Files\Genuitec\MyEclipse 8.5\dropins 目錄下建立一個(gè)SVN.link文件,其中內(nèi)容為:
path=D:\\Program Files\\Genuitec\\MyEclipse 8.5\\SVN 。也就是這個(gè)link指向剛才你建的文件夾。(后邊提供的SVN-link.rar是這個(gè)link文件)
(3)重新啟動(dòng)MyEclipse。
第四步,介紹下如何使用svn來應(yīng)用你的項(xiàng)目。
(1)在myeclipse下新建一個(gè)項(xiàng)目svntest,右鍵team-Share Project,,然后選擇SVN,點(diǎn)next,--創(chuàng)建新的資源庫位置, 點(diǎn)next后輸入url:
https://192.168.1.66:8443/svn/test,輸入用戶名和密碼后就在服務(wù)器端test目錄下預(yù)發(fā)布你的項(xiàng)目。
(2)你會(huì)看到你項(xiàng)目中有?的標(biāo)志,這時(shí)項(xiàng)目上右鍵team-提交,會(huì)發(fā)現(xiàn)你的項(xiàng)目問號消失,提交成功。到此你的項(xiàng)目發(fā)布成功了。
(3)測試一下你發(fā)布的項(xiàng)目能否在局域網(wǎng)共享使用。客戶端只需安裝TortoiseSVN工具就可以下載你發(fā)布的項(xiàng)目了。團(tuán)隊(duì)其他機(jī)子上新建一個(gè)文件夾名為svntest(名字任意),右鍵checkout,輸入服務(wù)器地址
https://192.168.1.66:8443/svn/test,輸入用戶名和密碼。ok ,會(huì)提示下載成功。
至此,svn在myeclipse8.5的環(huán)境搭建成功了。
你可以在myeclipse中提交,更新,刪除,添加你對項(xiàng)目的修改,并更新到服務(wù)器中。團(tuán)隊(duì)其他組員只需本機(jī)安裝客戶端,便可以從服務(wù)器端下載最新版本 的項(xiàng)目,使用時(shí),應(yīng)先進(jìn)行update操作,保證你的是最新的版本。當(dāng)修改一個(gè)頁面后,也應(yīng)先update,再commit,防止沖突。
2.建立版本庫,設(shè)置用戶和權(quán)限
3.1 運(yùn)行Subversion服務(wù)器需要首先要建立一個(gè)版本庫,可以看作服務(wù)器上存放數(shù)據(jù)的數(shù)據(jù)庫,在安裝了Subversion服務(wù)器之后,可以直接在控制 臺(tái)下運(yùn)行:svnadmin create E:\chwencong\svnhome會(huì)自動(dòng)在E:\chwencong\svnhome目錄下生成很多文件。
3.2 修改配置文件,配置文件都存放在版本庫的conf目錄下,如E:\chwencong\svnhome\conf,里面有三個(gè)文件并對其做如下修改:
3.2.1 修改svnserve.conf文件,去掉一下各行前面的“#”。
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
realm = svnhome(注意)
以上 realm 為 svn 庫的名稱,同一個(gè) realm名稱會(huì)共享使用此SVN的用戶名和密碼
3.2.2 修改passwd文件,建立用戶名與密碼,在[users]下面添加形如:username = password格式的行,一行代表一個(gè)用戶。
admin = admin
chwencong = 123
3.2.3 修改authz文件,分配角色、權(quán)限
[groups]
manage = admin
user = chwencong
[/]
@manage = rw
@user = r
以上的 manage=admin 和 user=chwencong 如果有多個(gè)用戶屬于此用戶組,則需用 逗號分隔用戶名, 如:
manage=admin,root
user=aa,cc,rr
而 @manage 表示 manage 用戶組所擁有的權(quán)限,rw 代表可讀可寫,而 r 表示只可讀
4、 啟動(dòng)服務(wù)
在控制臺(tái)下運(yùn)行:svnserve -d -r E:\chwencong\svnhome(沒有分號)
注意:不要關(guān)閉命令行窗口,關(guān)閉窗口也會(huì)把svnserve停止
5、 導(dǎo)入、導(dǎo)出
5.1導(dǎo)入:進(jìn)入到待導(dǎo)入的目錄,如cd E:\chwencong\workspace\TestProject (TestProject為項(xiàng)目名),然后運(yùn)行svn import svn://localhost/TestProject -m "initial import" --username admin --password admin
正常情況就會(huì)在控制臺(tái)出現(xiàn)如下信息:
增加 .classpath
……
提交后的版本為 1。
5.2 導(dǎo)出:進(jìn)入到存放導(dǎo)出項(xiàng)目的目錄,如導(dǎo)出D:\code下:cd D:\code 然后運(yùn)行svn checkout svn://localhost/TestProject --username chwencong --password chwencong
正常情況就會(huì)在控制臺(tái)出現(xiàn)如下信息:
A svnhome\.classpath
3.使用圖解
------------------------------------------------------- 我是分割線 --------------------------------------------------------------------------------------
首先就是安裝程序啦,這就不用講解了吧!
------------------------------------------------------- 我是分割線 --------------------------------------------------------------------------------------
按照默認(rèn)設(shè)置安裝完成后,重啟電腦,點(diǎn)擊右鍵會(huì)有如下兩個(gè)選項(xiàng)!選擇當(dāng)前選項(xiàng)即打開SVN目錄!
------------------------------------------------------- 我是分割線 --------------------------------------------------------------------------------------
輸入貴公司SVN地址!
------------------------------------------------------- 我是分割線 --------------------------------------------------------------------------------------
然后就可以看見工作目錄了。貴公司的所有工程文件都可以共享了。
------------------------------------------------------- 我是分割線 --------------------------------------------------------------------------------------
如果你想下載某個(gè)文件夾或者文件的話,可以在文件上點(diǎn)擊右鍵,選擇CheckOut!
------------------------------------------------------- 我是分割線 --------------------------------------------------------------------------------------
第一個(gè)是當(dāng)前目錄,第二個(gè)是你想下載到你的電腦的什么地方,每個(gè)公司的要求不同!
------------------------------------------------------- 我是分割線 --------------------------------------------------------------------------------------
想要添加文件的話,新建文件!
------------------------------------------------------- 我是分割線 --------------------------------------------------------------------------------------
點(diǎn)擊右鍵,選擇Add選項(xiàng),文件上方便會(huì)出現(xiàn)一個(gè)+字!
------------------------------------------------------- 我是分割線 --------------------------------------------------------------------------------------
點(diǎn)擊右鍵,選擇SVN Commit便會(huì)提交了,其他人都可以看見你的文件了!提交完成后+號就變成綠色對勾了!
有時(shí)候,因?yàn)閃indows本身的問題,您可能會(huì)看到有些icon沒有變成綠色的勾勾。此時(shí),多按F5幾次,應(yīng)該就可以解決這個(gè)問題。如果,仍然不行,表示您之前的commit動(dòng)作真的有問題。請仔細(xì)檢查之前的commit動(dòng)作是否正確。
------------------------------------------------------- 我是分割線 --------------------------------------------------------------------------------------
為何需要更新?由于版本控制系統(tǒng)多半都是由許多人共同使用。所以,同樣的檔案可能還有人會(huì)去進(jìn)行編輯。為了確保您工作目錄中的檔案與大家的檔案是同步的。建議您在編輯前都先進(jìn)行更新的動(dòng)作。在此,我們都先假設(shè)您已經(jīng)將檔案check out過一次。現(xiàn)在要說明的是如何在一個(gè)check out過的目錄進(jìn)行update。在想要更新的檔案或目錄icon上面按下鼠標(biāo)右鍵。并且選擇SVN Update。
------------------------------------------------------- 我是分割線 --------------------------------------------------------------------------------------
有時(shí)我們需要回溯至特定的日期或是版本,這時(shí)就可以利用SVN的Update to revision的功能。在想要更新的檔案或目錄icon上面按下鼠標(biāo)右鍵。并且選擇SVN->Update to revision。
點(diǎn)擊后會(huì)彈出這個(gè)對話框,可以回溯到Head revision。當(dāng)然也可以選擇特定的版本。記不住版本就選擇show log選擇一個(gè)!
------------------------------------------------------- 我是分割線 --------------------------------------------------------------------------------------
每次改動(dòng)前都要get lock,這樣其他人就不能更改此文件了。 不然兩個(gè)人修改同一個(gè)文件的話就麻煩了。鎖上后顯示一個(gè)小鎖!沒反應(yīng)就F5刷新!
------------------------------------------------------- 我是分割線 --------------------------------------------------------------------------------------
修改完畢后當(dāng)然要解鎖了!Release lock!
------------------------------------------------------- 我是分割線 --------------------------------------------------------------------------------------
想在trunk下建立一個(gè)新的brance?在trunk上右鍵如下選擇。
------------------------------------------------------- 我是分割線 --------------------------------------------------------------------------------------
請先確認(rèn)From WC at URL: 中的目錄是您要復(fù)制的來源目錄。接著,在To URL中輸入您要復(fù)制過去的路徑。通常我們會(huì)將所有的branch集中在一個(gè)目錄下面。以上面的例子來說,branch檔案都會(huì)集中在branch的子目 錄下面。在To URL中您只需要輸入您要的目錄即可。目錄不存在時(shí),會(huì)由SVN幫您建立。特別需要注意的是SVN因?yàn)樾本€作為目錄分隔字符,而非反斜線。
接著在Log message輸入您此次branch的目的為何。按下OK就可以了。
------------------------------------------------------- 我是分割線 --------------------------------------------------------------------------------------
想要恢復(fù),選擇Merge就ok了!
------------------------------------------------------- 我是分割線 --------------------------------------------------------------------------------------
本節(jié)向大家描述一下版本控制工具SVN使用方法,在學(xué)習(xí)SVN過程中這是必須要掌握的知識(shí),在這里和大家分享一下,歡迎大家和我一起學(xué)習(xí)SVN使用方法。
SVN幫助:svnhelp
(1)svnimport[PATH]URL
將未納入版本控制的文件或目錄樹提交到版本庫。遞歸地提交PATH的副本至URL。如果省略PATH,則默認(rèn)為“.”
(2)svncheckoutURL[@REV]...[PATH]
從版本庫簽出工作副本。如果指定REV,那么它確定了從URL首先查找的版本。如果省略路徑參數(shù),則URL最末尾的目錄名作為目標(biāo)目錄名。如果指定多個(gè)URL,則依次將其簽出到PATH的子目錄中,子目錄名就是URL最末尾的目錄名。
(3)svnaddPATH
把文件和目錄納入版本控制,通過調(diào)度加到版本庫。它們會(huì)在下一次提交時(shí)加入。
(4)svncommit[PATH...]
commit(ci):把工作副本的修改提交到版本庫。常用參數(shù):-m[--message]ARG:指定日志信息ARG
(5)svnupdate[PATH...]
將版本庫的修改合并到工作副本中。如果沒有指定版本,則將工作副本更新到HEAD版本。否則同步到-r選項(xiàng)所指定的版本。
(6)svndeletePATH-m"deletetestfle"
或者直接svndeletetest.php然后再svnci-m'deletetestfile‘,推薦使用這種簡寫:svn(del,remove,rm)
用法:1、deletePATH...
2、deleteURL...
1、每個(gè)PATH指定的項(xiàng)目會(huì)被調(diào)度到下次提交時(shí)從版本庫刪除。除非給出--keep-local參數(shù),工作副本中沒有提交的文件和目錄會(huì)被立即刪除。如果PATH是未版本控制或者已修改的項(xiàng)目,或者包含這些項(xiàng)目,那么僅當(dāng)給出--force參數(shù)時(shí)這些項(xiàng)目才會(huì)被刪除。
2、每個(gè)URL指定的項(xiàng)目會(huì)通過立即提交從版本庫中刪除。
(7)svnmkdir:創(chuàng)建納入版本控制的新目錄。
用法:1、mkdirPATH...
2、mkdirURL...
1、每個(gè)以工作副本PATH指定的目錄,都會(huì)在本地創(chuàng)建,并且加入增加調(diào)度,直到下次提交。
2、每個(gè)以URL指定的目錄,都會(huì)通過立即提交在版本庫中創(chuàng)建。
(8)svnrevertPATH...:將工作副本文件恢復(fù)到原始版本(恢復(fù)大部份的本地修改)。注意:本子命令不會(huì)訪問網(wǎng)絡(luò),它解除任何沖突的狀態(tài)。但是,它不恢復(fù)被刪除的目錄。
(9)版本控制SVN使用其他命令還有:
摘自:http://blog.chinaunix.net/u1/38994/showart_487961.html
加鎖/解鎖svnlock-m"LockMessage"[--force]PATH
例如:svnlock-m"locktestfile"test.php
svnunlockPATH
查看文件或者目錄狀態(tài)
1)svnstatuspath(目錄下的文件和子目錄的狀態(tài),正常狀態(tài)不顯示)【?:不在svn的控制中;M:內(nèi)容被修改;C:發(fā)生沖突;A:預(yù)定加入到版本庫;K:被鎖定】
2)svnstatus-vpath(顯示文件和子目錄狀態(tài))
第一列保持相同,第二列顯示工作版本號,第三和第四列顯示最后一次修改的版本號和修改人。
注:svnstatus、svndiff和svnrevert這三條命令在沒有網(wǎng)絡(luò)的情況下也可以執(zhí)行的,原因是svn在本地的.svn中保留了本地版本的原始拷貝。
簡寫:svnst
查看日志svnlogpath
例如:svnlogtest.php顯示這個(gè)文件的所有修改記錄,及其版本號的變化
查看文件詳細(xì)信息svninfopath
例如:svninfotest.php
比較差異svndiffpath(將修改的文件與基礎(chǔ)版本比較)
例如:svndifftest.php
svndiff-rm:npath(對版本m和版本n比較差異)
例如:svndiff-r200:201test.php
簡寫:svndi
將兩個(gè)版本之間的差異合并到當(dāng)前文件svnmerge-rm:npath
例如:svnmerge-r200:205test.php(將版本200與205之間的差異合并到當(dāng)前文件,但是一般都會(huì)產(chǎn)生沖突,需要處理一下)版本庫下的文件和目錄列表svnlistpath
顯示path目錄下的所有屬于版本庫的文件和目錄
簡寫:svnls
版本控制SVN使用中解決沖突svnresolved:移除工作副本的目錄或文件的“沖突”狀態(tài)。
用法:resolvedPATH...
注意:本子命令不會(huì)依語法來解決沖突或是移除沖突標(biāo)記;它只是移除沖突的相關(guān)文件,然后讓PATH可以再次提交。
輸出指定文件或URL的內(nèi)容。svncat目標(biāo)[@版本]...如果指定了版本,將從指定的版本開始查找。svncat-rPREVfilename>filename(PREV是上一版本,也可以寫具體版本號,這樣輸出結(jié)果是可以提交的)
代碼庫URL變更svnswitch(sw):更新工作副本至不同的URL。
用法:1、switchURL[PATH]
2、switch--relocateFROMTO[PATH...]
1、更新你的工作副本,映射到一個(gè)新的URL,其行為跟“svnupdate”很像,也會(huì)將服務(wù)器上文件與本地文件合并。這是將工作副本對應(yīng)到同一倉庫中某個(gè)分支或者標(biāo)記的方法。
2、改寫工作副本的URL元數(shù)據(jù),以反映單純的URL上的改變。當(dāng)倉庫的根URL變動(dòng)
(比如方案名或是主機(jī)名稱變動(dòng)),但是工作副本仍舊對映到同一倉庫的同一目錄時(shí)使用這個(gè)命令更新工作副本與倉庫的對應(yīng)關(guān)系。本節(jié)關(guān)于版本控制SVN使用介紹完畢。
本節(jié)和大家一起學(xué)習(xí)一下SVN使用方法,主要從三方面來介紹,在這里和大家分享一下,希望本節(jié)的介紹對你的學(xué)習(xí)有所幫助。
SVN使用:
1. 首先是安裝TortoiseSVN這個(gè)Win下的客戶端(當(dāng)然用subversion自己的svn這個(gè)客戶端也可以完成所有操作,理論上)。這個(gè)客戶端是集成到Explore里的,所以沒有什么獨(dú)立的窗體,所有操作右鍵菜單來完成。
2. SVN使用基本流程:
下面說的命令都與TortoiseSVN菜單上的名稱一致。
a. 初次(initial)取出(checkout)repos,建立本地工作拷貝(WC WorkingCopy)。
b. 與repos同步(update),保證將要進(jìn)行的編輯是最新版本。
c. 編輯源代碼(包括創(chuàng)建、修改、刪除)。
d. 與repos同步(update),提交之前先要同步到最新的版本,保證所有在自己之前的有關(guān)提交已經(jīng)在本地有所知曉。
e. 解決沖突(resolve conflict)。
f. 提交(commit),一定要寫上這次提交的內(nèi)容的摘要,便于以后查閱。
g. 繼續(xù)b。
每次開始新的編輯前的同步repos很重要,另外經(jīng)常地update沒有壞處,特別是多人項(xiàng)目中。如果每次提交(commit)前不進(jìn)行更新(update)的到最新的版本的話,svn會(huì)提示當(dāng)前的拷貝過期,需要更新。
在 使用的過程中,時(shí)刻注意當(dāng)前的工作拷貝(WC WorkingCopy)所對應(yīng)的URL很重要,特別是當(dāng)有了branches和tag等時(shí)候。使用svn info可以查看到這些信息。使用TortoiseSVN時(shí),通過下面的操作查看這些信息:右鍵單擊工作拷貝的根文件夾(不是上級文件夾),菜單中選擇則 屬性(不是TortoiseSVN那個(gè)菜單),然后在出現(xiàn)的對話框中選擇Subversion標(biāo)簽就可以看到了。
3. SVN使用branches
(關(guān)于branches的內(nèi)容可以在svn-book:Chapter4 Branching and Merging得到)
當(dāng) 多個(gè)人合作(Sally和John)時(shí),可能有這樣的情況出現(xiàn):John突然有個(gè)想法,跟原先的設(shè)計(jì)不太一致,可能是功能的添加或者日志格式的改進(jìn)等等, 總而言之,這個(gè)想法可能需要花一段時(shí)間來完成,而這個(gè)過程中,John的一些操作可能會(huì)影響Sally的工作,John從現(xiàn)有的狀態(tài)單獨(dú)出一個(gè) project的話,又不能及時(shí)得到Sally對已有代碼做的修正,而且獨(dú)立出來的話,John的嘗試成功時(shí),跟原來的合并也存在困難。這時(shí)最好的實(shí)踐方 法是使用branches。John建立一個(gè)自己的branch,然后在里面實(shí)驗(yàn),必要的時(shí)候從Sally的trunk里取得更新,或者將自己的階段成果 匯集到trunk中。
附:TortoiseSVN幫助里的branch的說明:
One of the features of version control systems is the ability to isolate changes onto a separate line of development. This line is known as a branch. Branches are often used to try out new features without disturbing the main line of development with compiler errors and bugs. As soon as the new feature is stable enough then the development branch is merged back into the main branch (trunk).
3.1 創(chuàng)建branch
(詳細(xì)的解釋參考svn-book:Chapter4 Branching and Merging:Using Branches:Creating a Branch)
實(shí)際是svn copy操作
$ svn copy SourceURL/trunk \
DestinationURL/branchName \
-m "Creating a private branch of xxxx/trunk."
TorToiseSVN 操作更為簡單,只要在working copy里右鍵空白,然后在TorToiseSVN菜單中選擇Branches/Tags,就可將整個(gè)目錄分支(branch)出去,或者點(diǎn)擊某個(gè)文件將 文件單獨(dú)分支(branch),而且有多種選擇,指定是“直接在服務(wù)器端copy HEAD版本”、“直接在服務(wù)器端copy指定版本”(這兩種相當(dāng)于svn copy中源和目的都是URL)、“用當(dāng)前的工作拷貝(WC Working Copy)生成”。同時(shí)還有一個(gè)checkbox用于在完成了這次分支(branch)后直接切換(switch)當(dāng)前的工作拷貝(WC Working Copy)到分支。
3.2SVN使用中 使用merge來應(yīng)用branch的修改
3.2.1 trunk的變化及時(shí)更新到branch
例子原型出自svn-book:Chapter 4:Branching and Merging:Copying Changes Between Branches:Copying Specific Changes
接 著前面的例子,John在實(shí)驗(yàn)過程中,Sally對原有的某個(gè)文件做了一些改動(dòng),如拼寫檢查等,John知道了,希望將這些改動(dòng)也放到自己的當(dāng)前的工作拷 貝(WC Working Copy)中。svn中使用merge指令來完成。假設(shè)Sally的修訂使repos從Rev345到了Rev346,所以John就是要將 Rev345:Rev346(前:后)的變更應(yīng)用到當(dāng)前的WC。使用TortoiseSVN的操作就是在WC中右鍵空白處,然后在相關(guān)菜單中選擇 “Merge...”,在彈出的對話框中,F(xiàn)rom指定比較前項(xiàng)的位置和版本(這里是trunk的Rev345),To指定后項(xiàng)的位置和版本(這里是 trunk的Rev346,可以使用一個(gè)復(fù)選框使的To的位置與From相同)。
相應(yīng)的svn merge指令參考后面“merge操作實(shí)質(zhì)”可知。
3.2.2 branch最終合并回trunk
例子原型出自svn-book:Chapter 4:Branching and Merging:Common Use-Cases:Merging a Whole Branch to Another
John經(jīng)過嘗試,終于實(shí)現(xiàn)了想法,并通過測試,現(xiàn)在他決定將所有的工作合并到trunk去。
這 里要注意的是,John打算合并的是自己的工作,假設(shè)John的branch(johnBranch)開始于Rev233,John的工作提交到 repos是Rev289,那么John的工作是將johnBranch:Rev233到j(luò)ohnBranch:Rev289的內(nèi)容合并到trunk。而 不是johnBranch:Rev233到trunk:HEAD,因?yàn)檫@個(gè)變化包含了對John工作的增加和對trunk中其他人的工作的撤銷(如果 John沒有及時(shí)將他人在trunk的工作合并到自己的johnBranch的話)。
TortoiseSVN的操作是這樣的,先 checkout出trunk(也可以switch到trunk),即保證當(dāng)前的工作拷貝(WC WorkingCopy)是trunk,然后使用菜單中的“Merge...”,選擇From為johnBranch:Rev233選擇To為 johnBranch:Rev289。
相應(yīng)的svn merge指令參考后面“merge操作實(shí)質(zhì)”可知。 下面我們來看一下SVN使用中merge操作的實(shí)質(zhì)。
3.2.3 merge操作的實(shí)質(zhì)
svn merge命令的原型如下
svn merge sourceURL1[@N] sourceURL2[@M] [WCPATH]
svn merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]
svn merge -r N:M SOURCE[@REV] [WCPATH]
In the first and second forms, the source paths (URLs in the first form, working copy paths in the second) are specified at revisions N and M. These are the two sources to be compared. The revisions default to HEAD if omitted.
In the third form, SOURCE can be a URL or working copy item, in which case the corresponding URL is used. This URL, at revisions N and M, defines the two sources to be compared.
WCPATH is the working copy path that will receive the changes. If WCPATH is omitted, a default value of “.” is assumed, unless the sources have identical basenames that match a file within “.”: in which case, the differences will be applied to that file.
可以看出merge實(shí)際是比較前后(源:目的)兩個(gè)版本 (revision)之間的差別(用運(yùn)算符就是 目的 – 源),然后將這些差別應(yīng)用(施用)到工作拷貝(WC WorkingCopy)上的一個(gè)操作,根據(jù)源與目的版本號的先后,出現(xiàn)了“合并”、“撤銷”(源版本號大于目的版本號)等不同效果,然后通過提交 (commit)來將這些效果保存到服務(wù)器端的repos中。本節(jié)關(guān)于SVN使用方法介紹完畢。
訪問Google code
Google code的地址是 http://code.google.com/ ,如果使用cn去訪問好像訪問不了,我這里是一片空白。管理項(xiàng)目的話可以直接使用http://code.google.com/hosting/ 地址訪問。用Gmail登錄進(jìn)去,頁面的中間有【Create a new project 】,點(diǎn)擊以后就可以創(chuàng)建項(xiàng)目了。

二 創(chuàng)建自己的項(xiàng)目
在創(chuàng)建項(xiàng)目的頁面,填寫項(xiàng)目名,概要和描述,其中項(xiàng)目名開頭要小寫,還不能有空格和其他符號。然后就是選擇版本管理系統(tǒng),證書等等,這些我也不懂,隨便選 吧,反正這有選好了,【Create Project】才可用。這里要注意的是項(xiàng)目名字可能沖突。如果創(chuàng)建成功就可以進(jìn)入項(xiàng)目管理界面

三 項(xiàng)目管理
項(xiàng)目管理中,上方的菜單【Project Home】可以看到項(xiàng)目的概述和描述。點(diǎn)擊【Source】就可以進(jìn)行源碼的管理。其中有2個(gè)地址,一個(gè)是Https開頭的,一個(gè)是http 的,https開頭的是帶加密的,所以如果要commit新的代碼的時(shí)候就需要使用這個(gè)地址。而如果僅僅是取得代碼可以只使用http開頭的地址。
使用https的地址的時(shí)候需要提供用戶名和密碼,這里的用戶名是Gmail的用戶名,而密碼是Google給每個(gè)項(xiàng)目生成的,而非是Gmail的密碼。點(diǎn)擊【When prompted, enter your generated googlecode.com password 】后面的藍(lán)色連接可以看到密碼。這個(gè)密碼是你所有項(xiàng)目的密碼,而不是每個(gè)項(xiàng)目一個(gè)密碼。

四 用戶管理
項(xiàng)目建立好以后就可以把其他人加入到項(xiàng)目中,這樣就可以共同開發(fā)了。首先點(diǎn)擊上方的【Administer】,然后點(diǎn)【Project members】,在下面填入要加入的用戶Gmail就可以了。有Project owners,Project committers,Project contributors。具體解釋右側(cè)都有。點(diǎn)擊保存后,其他用戶登錄后,在右上方的【My Favorite】下就可以看到自己加入的項(xiàng)目了。然后按三中介紹的方法找到密碼。
五 其他管理
Google Code還提供了wiki等功能,我沒用上,所以不是太了解。
六 安裝客戶端和VS插件
上面的工作做好后就是上傳源碼和文檔。但是我找了半天也不知道怎么上傳。以為是直接網(wǎng)頁上上傳,原來也要安裝SVN客戶端。在這里
http://tortoisesvn.net/downloads 可以下載到最新的TortoiseSVN,這個(gè)應(yīng)該是目前用的最多的SVN客戶端軟件了。E文不好的朋友上面還提供了中文語言包。
安裝完客戶端后需要重啟電腦,然后就可以遠(yuǎn)程連接到SVN服務(wù)器了。其中URL就填寫Google 提供的哪個(gè)https的URL地址,然后填寫用戶名(Gmail)和密碼(項(xiàng)目密碼),保存后就OK了。客戶端可以支持連接多個(gè)URL,每次啟動(dòng)的時(shí)候可 以選擇要連接到那一個(gè)。


支持SVN的VS插件我使用的是AnkhSvn,http://ankhsvn.open.collab.net/servlets/ProjectDocumentList?folderID=198 這里可以下載到最新版本。目前可以支持到VS2010,之前使用老版本對VS2008支持不好,文件狀態(tài)不對,而且不能提交,換到最新版的時(shí)候就好了。安裝的時(shí)候配置VS要比較長時(shí)間,不要以為是死掉了。
如果只安裝AnkhSvn而不安裝TortoiseSVN也是可以的,不過你在VS中會(huì)發(fā)現(xiàn),操作的功能少了很多,比如分支,合并等等。

七 使用VS進(jìn)行開發(fā)和源碼管理
進(jìn)入到VS中,打開【工具】--【選項(xiàng)】--【Source Control】,默認(rèn)應(yīng)該是已經(jīng)配置好了為AnkhSvn。然后可以點(diǎn)擊【文件】-【Subvwrsion】打開服務(wù)器上的源碼。和其他工具一樣,要選擇一個(gè)本地路徑來保存。

1:文件狀態(tài)介紹
藍(lán)色小勾:Check out狀態(tài);橙色小勾:文件被修改狀態(tài);橙色小方塊:文件修改被保存;加號:新添加文件。
2:SNV版本控制
和VSS不同的時(shí),VSS默認(rèn)是鎖住的狀態(tài),需要手動(dòng)Check Out,而SVN是自動(dòng)Check Out。那么這樣不是會(huì)有沖突嗎,其實(shí)這個(gè)和VSS允許多人牽出是一樣的。在你Commit的時(shí)候,會(huì)檢查版本,會(huì)自動(dòng)合并或提示沖突或是版本過期等等。

獲取最新代碼:這個(gè)不用說了就是從服務(wù)器上拿最新代碼,但是如果你修改了文件,然后拉最新代碼,這個(gè)時(shí)候系統(tǒng)會(huì)自動(dòng)吧你修改的不部分和最新代碼進(jìn)行合并,如果有沖突會(huì)提示,要修修改沖突。
獲取指定版本代碼:這個(gè)可以通過查看歷史,或者指定版本號來拉去指定版本的代碼。這是同樣會(huì)合并代碼。需要注意的是,SVN的版本號和VSS不同,是全局版本號,而不是每個(gè)文件有一個(gè)版本號。這個(gè)要特別注意,因?yàn)槟銜?huì)發(fā)現(xiàn)一個(gè)文件版本號可能是跳躍的。
Switch:有這樣一個(gè)功能,可以把當(dāng)前版本切換為制定的版本,和獲取指定版本不同,他也會(huì)自動(dòng)合并不同的地方。
Revert:恢復(fù)功能,恢復(fù)到修改前的狀態(tài)。這個(gè)要注意的是,如果你對文件修改,然后獲取了最新代碼,然后恢復(fù),這個(gè)時(shí)候是恢復(fù)到最新版本,而不是修改前的那個(gè)版本。這點(diǎn)要注意
版本沖突:這里版本沖突有2種情況,
如果你當(dāng)前版本為1,服務(wù)器版本為2,你修改或提交,服務(wù)器會(huì)提示你本地版本過期了,你可以拉最新代碼,并解決沖突后再次提交;
如果你當(dāng)前版本為2,服務(wù)器版本為2,而你從服務(wù)器獲取版本1的代碼,修改后,然后提交,這個(gè)時(shí)候是不會(huì)提示版本過期的,會(huì)覆蓋掉服務(wù)器上的版本2,而成為版本3。這樣是會(huì)沖掉代碼的。
鎖:SVN提供了鎖的功能,就和VSS的單用戶Check out是一樣的,不能同時(shí)修改。但是目前Google Svn不提供鎖的功能,所以沒有辦法使用了。
myeclipse安裝svn
一、安裝方法:
方法一、如果可以上網(wǎng)可在線安裝
1. 打開Myeclipse,在菜單欄中選擇Help→Software Updates→Find and Install;
2. 選擇Search for new features to install,點(diǎn)擊Next進(jìn)入下一步;
3. 點(diǎn)擊"New Remote Site"按鈕,在彈出的對話框中輸入:
name:SVN
url:http://subclipse.tigris.org/update_1.4.x
點(diǎn)擊OK,關(guān)閉對話框,并點(diǎn)擊Finish按鈕,Myeclipse自動(dòng)下載插件安裝程序;
4. 下載完插件之后,進(jìn)入安裝畫面。
5. 選擇所要安裝的SVN插件內(nèi)容,這里去掉第二個(gè)選項(xiàng)Subclipse Integrations,點(diǎn)擊下一步;
6. 選擇 "I accept the terms in the license agreements"并點(diǎn)擊Next,直到點(diǎn)擊Finish即可,進(jìn)入下一步。
7. 開始安裝SVN插件,安裝完成之后,重啟Myeclipse。
方法二、無法連接網(wǎng)絡(luò)的情況
1、下載SVN插件
下載地址:http://subclipse.tigris.org/files/documents/906/46495/site-1.6.5.zip
2. 在MyEclipse 6.5的安裝路徑下的plug_in(C:/Program Files/MyEclipse 6.5/eclipse/plugins)下新建文件夾:site-1.6.5;
3. 打開MyEclipse 6.5,在菜單欄中選擇 Help → Software Updates → Find and Install;
2. 選擇Search for new features to install,點(diǎn)擊Next進(jìn)入下一步;
3. 點(diǎn)擊"New Local Site"按鈕,找到解壓出來的文件夾(site-1.6.5) → 點(diǎn)擊OK,并點(diǎn)擊Finish按鈕,Myeclipse自動(dòng)加載插件;
4. 在彈出的菜單中,select the features to insteall:在剛加進(jìn)去的路徑Subclipse-site-1.6.5這一項(xiàng)前打鉤,此時(shí)會(huì)報(bào)錯(cuò),然后展開Subclipse前的加號,去掉 Subclipse Integration for Mylyn 3.x(Optional)3.0.0前的鉤,錯(cuò)誤消失 → next → 選 I accept the terms in the license agreements → next → next → 選中所有的8項(xiàng),然后Change Location……,在彈出的菜單中選Add Location……選擇在第3步中建的文件夾的路徑(C:/Program Files/MyEclipse 6.5/eclipse/plugins/site-1.6.5) → Finish → 再彈出的菜單中選 Install All → Yes
5. 開始安裝SVN插件,安裝完成之后,重啟Myeclipse。
方法三、無法連接網(wǎng)絡(luò)的情況(link鏈接)
1、從官網(wǎng)下載 Site-1.6.5.zip
2、解壓Site-1.6.5.zip至${eclipse}/Plugins/Subclipse-1.6.5.zip,并刪除 site.xml(很重要)(即把Site-1.6.5.zip解壓出來的features和plugins文件夾里所有的jar包和兩個(gè)XML文件 artifacts.xml、content.xml添加并替換到plugins文件夾下。例如:我應(yīng)添加在C:/Program Files/MyEclipse 6.5/eclipse/plugins/目錄下)
3、創(chuàng)建link文件 ${eclipse}/linksSubclipse-1.6.5.zip.link (即在link文件夾下添加linksSubclipse-1.6.5.link文件)其內(nèi)容為: path=C:/Program Files/MyEclipse 6.5/eclipse/
4、重啟Eclipse就是把subclipse集成完畢
二、安裝完成
1. 在MyEclipse 6.5 菜單欄中選擇Window→Open Perspective→Other打開Myeclipse試圖列表。這個(gè)時(shí)候Myeclipse的視圖列表中,就出現(xiàn)了"SVN Repository Exploring"一項(xiàng)。
2. 打開"SVN Repository Exploring"視圖。在左邊空白區(qū)域,單擊右鍵 → New → Repository Location。
3. 在Url一欄中輸入svn://IP,點(diǎn)擊Finish按鈕。
4. 選擇要下載的項(xiàng)目右鍵選擇checkout 就把項(xiàng)目下載到本地了
三、基本操作
1.提交工程
右擊工程->小組->共享項(xiàng)目->選擇SVN->選擇svn://127.0.0.1(如果沒有,則創(chuàng)建一個(gè)新的資源庫)->下一步->完成
2.下載工程
在SVN資源庫透視圖下,點(diǎn)開svn://127.0.0.1,會(huì)顯示出現(xiàn)在本機(jī)SVN上的所有工程,右擊你想下載的工程->檢出為->下一步->完成
3.操作工程
3.1同步
在MyEclipse J2EE透視圖下,右擊你要同步的工程->小組->與資源庫同步->這時(shí)會(huì)進(jìn)入同步透視圖,會(huì)顯示出本機(jī)與SVN上內(nèi)容有不同的文件,雙擊文件名,會(huì)顯示出兩個(gè)文件中哪里不同;
3.2提交
在同步透視圖下有"灰色向右的箭頭,表示你本機(jī)修改過",右擊該文件,可以選擇提交操作;
3.3覆蓋/更新
在同步透視圖下有"藍(lán)色向左的箭頭,表示你本機(jī)修改過",右擊該文件,可以選擇覆蓋/更新操作;
4.圖標(biāo)說明
4.1灰色向右箭頭:本地修改過
4.2藍(lán)色向左箭頭:SVN上修改過
4.3灰色向右且中間有個(gè)加號的箭頭:本地比SVN上多出的文件
4.4藍(lán)色向左且中間有個(gè)加號的箭頭:SVN上比本地多出的文件
4.5灰色向右且中間有個(gè)減號的箭頭:本地刪除了,而SVN上未刪除的文件
4.6藍(lán)色向左且中間有個(gè)減號的箭頭:SVN上刪除了,而本地未刪除的文件
4.7紅色雙向箭頭:SVN上修改過,本地也修改過的文件
5.一些我遇到的出錯(cuò)信息
5.1在上面講的3.2步輸入U(xiǎn)RL(svn://127.0.0.1)點(diǎn)下一步出現(xiàn)"svnserve.conf:12: Option expected"錯(cuò)誤
你打開svnserve.conf文件中的第12行,該錯(cuò)誤是由于該行的前面有空格引起的,把左邊多出的空格刪除掉即可;
5.2在上面講的3.2步輸入U(xiǎn)RL(svn://127.0.0.1/SVN_PRJ)點(diǎn)下一步出現(xiàn)"svn://127.0.0.1/SVN_PRJ non-existent in revision '7'"錯(cuò)誤
URL錯(cuò)了,應(yīng)該輸入svn://127.0.0.1即可
使用link方式安裝以后,如果啟動(dòng)MyEclipse會(huì)產(chǎn)生一個(gè)沖突
例如: org.tigris.subversion.clientadapter.javahl.win32 1.6.4.jar和eclipse的沖突,還有什么mlyn包沖突,出現(xiàn)紅X,安裝不成功...
原因是因?yàn)椴寮械脑搄ar和eclipse內(nèi)部的jar包沖突造成的,所以可以選擇讓myeclipse忽略這些沖突的jar即可,找 到${MyEclipse_HOME}/home/xuliang/Genuitec/MyEclipse 8.5 M2/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info文件,此 處會(huì)列出eclipse啟動(dòng)時(shí)候可以忽略的插件jar.你會(huì)找到你自己的svn插件的默認(rèn)忽略的jar,例如:
org.tigris.subversion.clientadapter,1.6.4.1,file:/home/xuliang/Genuitec/MyEclipse 8.5 M2/myplugin/svn-plugin/plugins/org.tigris.subversion.clientadapter_1.6.4.1.jar,4,false
org.tigris.subversion.clientadapter.javahl,1.6.4.1,file:/home/xuliang/Genuitec/MyEclipse 8.5 M2/myplugin/svn-plugin/plugins/org.tigris.subversion.clientadapter.javahl_1.6.4.1.jar,4,false
org.tigris.subversion.clientadapter.svnkit,1.6.4,file:/home/xuliang/Genuitec/MyEclipse 8.5 M2/myplugin/svn-plugin/plugins/org.tigris.subversion.clientadapter.svnkit_1.6.4.jar,4,false
org.tigris.subversion.subclipse.core,1.6.5,file:/home/xuliang/Genuitec/MyEclipse 8.5 M2/myplugin/svn-plugin/plugins/org.tigris.subversion.subclipse.core_1.6.5.jar,4,false
org.tigris.subversion.subclipse.doc,1.3.0,file:/home/xuliang/Genuitec/MyEclipse 8.5 M2/myplugin/svn-plugin/plugins/org.tigris.subversion.subclipse.doc_1.3.0.jar,4,false
org.tigris.subversion.subclipse.graph,1.0.7,file:/home/xuliang/Genuitec/MyEclipse 8.5 M2/myplugin/svn-plugin/plugins/org.tigris.subversion.subclipse.graph_1.0.7.jar,4,false
org.tigris.subversion.subclipse.ui,1.6.5,file:/home/xuliang/Genuitec/MyEclipse 8.5 M2/myplugin/svn-plugin/plugins/org.tigris.subversion.subclipse.ui_1.6.5.jar,4,false
org.tmatesoft.svnkit,1.3.0.5847,file:/home/xuliang/Genuitec/MyEclipse 8.5 M2/myplugin/svn-plugin/plugins/org.tmatesoft.svnkit_1.3.0.5847.jar,4,false
以上這些是默認(rèn)情況下eclipse葫蘆的svn jar,所以加上以下2句,把剛剛沖突的包忽略就OK了
org.tigris.subversion.clientadapter.javahl.win32,1.6.4,file:/home/xuliang/Genuitec/MyEclipse 8.5 M2/myplugin/svn-plugin/plugins/org.tigris.subversion.clientadapter.javahl.win32_1.6.4.jar,4,false
org.tigris.subversion.subclipse.mylyn,3.0.0,file:/home/xuliang/Genuitec/MyEclipse 8.5 M2/myplugin/svn-plugin/plugins/org.tigris.subversion.subclipse.mylyn_3.0.0,4,false
總結(jié):其實(shí)以上4種方法中的最后一種也是這個(gè)原理,只是他使用java來做這件事情
我們在一些著名開源項(xiàng)目的版本庫中,通常可以看到trunk, branches, tags等三個(gè)目錄。由于SVN固有的特點(diǎn),目錄在SVN中并沒有特別的意義,但是這三個(gè)目錄卻在大多數(shù)開源項(xiàng)目中存在,這是因?yàn)檫@三個(gè)目錄反映了軟件開發(fā)的通常模式。
trunk是主分支,是日常開發(fā)進(jìn)行的地方。
branches是分支。一些階段性的release版本,這些版本是可以繼續(xù)進(jìn)行開發(fā)和維護(hù)的,則放在branches目錄中。又比如為不同用戶客制化的版本,也可以放在分支中進(jìn)行開發(fā)。
tags目錄一般是只讀的,這里存儲(chǔ)階段性的發(fā)布版本,只是作為一個(gè)里程碑的版本進(jìn)行存檔。
比如一個(gè)項(xiàng)目有main.cpp, common.h兩個(gè)文件,假設(shè)目前在開發(fā)的是最新的3.0版本,而且1.0/2.0版本也在進(jìn)行維護(hù),那么項(xiàng)目樹將類似如下樣子:
project
|
+-- trunk
+ |
+ +----- main.cpp (3.0版本的最新文件)
+ +----- common.h
+
+-- branches
+ |
+ +-- r1.0
+ + |
+ + +---- main.cpp (1.x版本的最新文件)
+ + +---- common.h
+ +
+ +-- r2.0
+ |
+ +---- main.cpp (2.x版本的最新文件)
+ +---- common.h
+
+-- tags (此目錄只讀)
|
+-- r1.0
+ |
+ +---- main.cpp (1.0版本的發(fā)布文件)
+ +---- common.h
+
+-- r1.1
+ |
+ +---- main.cpp (1.1版本的發(fā)布文件)
+ +---- common.h
+
+-- r1.2
+ |
+ +---- main.cpp (1.2版本的發(fā)布文件)
+ +---- common.h
+
+-- r1.3
+ |
+ +---- main.cpp (1.3版本的發(fā)布文件)
+ +---- common.h
+
+-- r2.0
+ |
+ +---- main.cpp (2.0版本的發(fā)布文件)
+ +---- common.h
+
+-- r2.1
|
+---- main.cpp (2.1版本的發(fā)布文件)
+---- common.h
要使用這樣的文件夾結(jié)構(gòu),在建立項(xiàng)目版本庫時(shí),可首先建好項(xiàng)目文件夾,并在其中建立trunk, branches, tags三個(gè)空的子目錄,再將項(xiàng)目文件夾連同這三個(gè)子目錄一起導(dǎo)入版本庫。
這樣在trunk中開始進(jìn)行開發(fā),當(dāng)需要建立branch或tag時(shí),使用SVN的copy操作進(jìn)行。
其中tags目錄需要只讀,可以使用SVN中的authz文件控制該目錄的訪問權(quán)限為只讀。
一.提交之前先更新
1. SVN更新的原則是要隨時(shí)更新,隨時(shí)提交。當(dāng)完成了一個(gè)小功能,能夠通過編譯并且自己測試之后,謹(jǐn)慎地提交。
2. 如果在修改的期間別人也更改了svn的對應(yīng)文件,那么commit就可能會(huì)失敗。如果別人和自 己更改的是同一個(gè)文件,那么update時(shí)會(huì)自動(dòng)進(jìn)行合并,如果修改的是同一行,那么合并時(shí)會(huì)產(chǎn)生沖突,這種情況就需要同之前的開發(fā)人員聯(lián)系,兩個(gè)人一起協(xié)商解決沖突,解決沖突之后,需要兩人一起測試保證解決沖突之后,程序不會(huì)影響其他功能。
3. 在更新時(shí)注意所更新文件的列表,如果提交過程中產(chǎn)生了更新,則也是需要重新編譯并且完成自己的一些必要測試,再進(jìn)行提交。這樣既能了解別人修改了哪些文件,同時(shí)也能避免SVN合并錯(cuò)誤導(dǎo)致代碼有錯(cuò)
二.保持原子性的提交
每次提交的間歇盡可能地短,以幾個(gè)小時(shí)的開發(fā)工作為宜。例如在更改UI界面的時(shí)候,可以每完成一個(gè)UI界面的修改或者設(shè)計(jì),就提交一次。在開發(fā)功能模塊的時(shí)候,可以每完成一個(gè)小細(xì)節(jié)功能的測試,就提交一次,在修改bug的時(shí)候,每修改掉一個(gè)bug并且確認(rèn)修改了這個(gè)bug,也就提交一次。我們提倡多提交,也就能多為代碼添加上保險(xiǎn)。
三.提交時(shí)注意不要提交本地自動(dòng)生成的文件
一般配置管理員都會(huì)將項(xiàng)目中一些自動(dòng)生成的文件或者與本地配置環(huán)境有關(guān)的文件屏蔽提交(例如eclipse中的.classpath文件等)。如果項(xiàng)目中沒有進(jìn)行這方面的配置來強(qiáng)行禁止提交這樣的文件,請自覺不要提交這樣的文件。提交了這樣的文件后,別人在更新后就可能與本地的環(huán)境沖突從而影響大家的工作。
四.不要提交不能通過編譯的代碼
代碼在提交之前,首先要確認(rèn)自己能夠在本地編譯。如果在代碼中使用了第三方類庫,要考慮到項(xiàng)目組成員中有些成員可能沒有安裝相應(yīng)的第三方類庫。項(xiàng)目經(jīng)理在準(zhǔn)備項(xiàng)目工作區(qū)域的時(shí)候,需要考慮到這樣的情況,確保開發(fā)小組成員在簽出代碼之后能夠在統(tǒng)一的環(huán)境中進(jìn)行編譯。
五.不要提交自己不明白的代碼
代碼在提交入SVN之后,你的代碼將被項(xiàng)目成員所分享。如果提交了你不明白的代碼,你看不懂,別人也看不懂,如果在以后出現(xiàn)了問題將會(huì)成為項(xiàng)目質(zhì)量的隱患。因此在引入任何第三方代碼之前,確保你對這個(gè)代碼有一個(gè)很清晰的了解。
六.提前協(xié)調(diào)好項(xiàng)目組成員的工作計(jì)劃
項(xiàng) 目經(jīng)理應(yīng)該合理分配工作計(jì)劃。每個(gè)成員在準(zhǔn)備開始進(jìn)行某項(xiàng)功能的修改之前,如果有可能,先跟工作小組的成員談?wù)勛约旱男薷挠?jì)劃,讓大家都能了解你的思想, 了解你即將對軟件作出的修改,這樣能盡可能的減少在開發(fā)過程中可能出現(xiàn)的沖突,提高開發(fā)效率。同時(shí)你也能夠在和成員的交流中發(fā)現(xiàn)自己之前設(shè)計(jì)的不足,完善 你的設(shè)計(jì)。
七.對提交的信息采用明晰的標(biāo)注
在一個(gè)項(xiàng)目組中使用SVN, 如果提交空的標(biāo)注或者不確切的標(biāo)注將會(huì)讓項(xiàng)目組中其他的成員感到很無奈,項(xiàng)目經(jīng)理無法很清晰的掌握工作進(jìn)度,無法清晰的把握此次提交的概要信息。在發(fā)現(xiàn)錯(cuò) 誤后也無法準(zhǔn)確的定位引起錯(cuò)誤的文件。所以,在提交工作時(shí),要填寫明晰的標(biāo)注,能夠概要的描述所提交文件的信息,讓項(xiàng)目組其他成員在看到標(biāo)注后不用詳細(xì)看 代碼就能了解你所做的修改。
八.慎用鎖定功能
在項(xiàng)目中要慎用鎖定的功能,在你鎖定了一個(gè)文件之后別人就無法繼續(xù)修改提交該文件,雖然可以減少?zèng)_突的發(fā)生率,但是可能會(huì)影響項(xiàng)目組中其他人員的工作。平時(shí)只有在編輯那些無法合并的文件(例如圖片文件,flash文件等)時(shí),才適當(dāng)?shù)牟捎面i定操作。
負(fù)責(zé)而謹(jǐn)慎地提交自己的代碼
SVN更新的原則是要隨時(shí)更新,隨時(shí)提交。當(dāng)完成了一個(gè)小功能,能夠通過編譯并且并且自己測試之后,謹(jǐn)慎地提交。
如果提交過程中產(chǎn)生了沖突,則需要同之前的開發(fā)人員聯(lián)系,兩個(gè)人一起協(xié)商解決沖突,解決沖突之后,需要兩人一起測試保證解決沖突之后,程序不會(huì)影響其他功能。
如果提交過程中產(chǎn)生了更新,則也是需要重新編譯并且完成自己的一些必要測試,再進(jìn)行提交。
保持原子性的提交
每次提交的間歇盡可能地短,以一個(gè)小時(shí),兩個(gè)小時(shí)的開發(fā)工作為宜。如在更改UI界面的時(shí)候,可以每完成一個(gè)UI界面的修改或者設(shè)計(jì),就提交一次。在開發(fā)功能模塊的時(shí)候,可以每完成一個(gè)小細(xì)節(jié)功能的測試,就提交一次,在修改bug的時(shí)候,每修改掉一個(gè)bug并且確認(rèn)修改了這個(gè)bug,也就提交一次。我們提倡多提交,也就能多為代碼添加上保險(xiǎn)。
不要提交自動(dòng)生成的文件
Visual Studio在生成過程中會(huì)產(chǎn)生很多自動(dòng)文件,如.suo等配置文件,Debug,Release,Obj等編譯文件,以及其他的一些自動(dòng)生成,同編譯代碼無關(guān)的文件,這些文件在提交的時(shí)候不應(yīng)該簽入,如果不小心簽入了,需要使用Delete命令從倉庫中刪除。
不要提交不能通過編譯的代碼
代碼在提交之前,首先要確認(rèn)自己能夠在本地編譯。如果在代碼中使用了第三方類庫,要考慮到項(xiàng)目組成員中有些成員可能沒有安裝相應(yīng)的第三方類庫或者沒有放入GAC(針對.Net Framework)中,項(xiàng)目經(jīng)理在準(zhǔn)備項(xiàng)目工作區(qū)域的時(shí)候,需要考慮到這樣的情況,確保開發(fā)小組成員在簽出代碼之后能夠在統(tǒng)一的環(huán)境中進(jìn)行編譯。
不要提交自己不明白的代碼
代碼在提交入SVN之后,你的代碼將被項(xiàng)目成員所分享。如果提交了你不明白的代碼,你看不懂,別人也看不懂,如果在以后出現(xiàn)了問題將會(huì)成為項(xiàng)目質(zhì)量的隱患。因此在引入任何第三方代碼之前,確保你對這個(gè)代碼有一個(gè)很清晰的了解。
提前宣布自己的工作計(jì)劃
在自己準(zhǔn)備開始進(jìn)行某項(xiàng)功能的修改之前,先給工作小組的成員談?wù)勛约旱男薷挠?jì)劃,讓大家都能了解你的思想,了解你即將對軟件作出的修改,這樣能盡可能的減少在開發(fā)過程中可能出現(xiàn)的沖突,提高開發(fā)效率。同時(shí)你也能夠在和成員的交流中發(fā)現(xiàn)自己之前設(shè)計(jì)的不足,完善你的設(shè)計(jì)。
對提交的信息采用明晰的標(biāo)注
+) 表示增加了功能
*) 表示對某些功能進(jìn)行了更改
-) 表示刪除了文件,或者對某些功能進(jìn)行了裁剪,刪除,屏蔽。
b) 表示修正了具體的某個(gè)bug