SVN 備課筆記(2011.4.7-kiki)
*******************************************************************************
好的,我們現(xiàn)在開(kāi)始,為了照顧新員工,我先介紹一下接下來(lái)如何進(jìn)行我們的培訓(xùn)內(nèi)容。
首先,我會(huì)先帶大家過(guò)一遍SVN
的常用命令,然后,我們實(shí)際演示一下SVN在開(kāi)發(fā)過(guò)程中的實(shí)際使用周期及中間會(huì)遇到什么問(wèn)題。
*******************************************************************************
首先,我們了解一下什么是Subversion,以及Subversion的歷史由來(lái)。
SVN 是一個(gè)自由/開(kāi)源的版本控制系統(tǒng),SVN 讓你的文件和目錄可以超越時(shí)空,允許你的數(shù)據(jù)恢復(fù)到早期版本,可以檢查所有的歷史。所以我們將SVN理解成一個(gè)時(shí)間機(jī)器。
現(xiàn)在我們知道SVN是一個(gè)版本控制系統(tǒng),(有一些版本控制系統(tǒng)也是SCM系統(tǒng),可以用來(lái)管理源碼樹(shù),并且具備很多與軟件開(kāi)發(fā)有關(guān)的特性-比如對(duì)編程語(yǔ)言的支持或者提供程序構(gòu)建工具,)不過(guò)SVN不是這樣的系統(tǒng),大家有興趣可以了解下其他的版本管理工具。
*******************************************************************************
這就是Subversion的產(chǎn)生歷史,從2000年開(kāi)始,2001年完成第一個(gè)完整版本,到現(xiàn)在有1.6版了。
*******************************************************************************
從Subversion的架構(gòu),我們可以看到:可以有3中方式來(lái)訪問(wèn)SVN庫(kù)。我們現(xiàn)在最多使用的是通過(guò)Apache的這種URL的方式來(lái)訪問(wèn)。
*******************************************************************************
SVN它有一個(gè)與大多數(shù)版本控制工具不一樣的特點(diǎn):在SVN中,修訂號(hào)是針對(duì)代碼庫(kù)中所有對(duì)象的,包括:目錄/子目錄/文件。修訂號(hào)的實(shí)際意義是對(duì)代碼庫(kù)的第幾次提交。
*******************************************************************************
接下來(lái),我們看一下SVN客戶端經(jīng)常使用的一些命令。下面我會(huì)給大家演示。
測(cè)試庫(kù):/home/kikitest
訪問(wèn)路徑:http://10.58.100.247/kikitest/
演示服務(wù)器:10.58.100.198
1.
svn co s204代碼 (1分鐘)(1-4518)
2.
svn info ---------查看代碼庫(kù)的屬性信息。
3.
svn st--------查看文件的修改信息(M,U,C,?,)?代表這個(gè)文件是不受控的。
4.
svn log –r 100 -v --------查看代碼庫(kù)的日志信息,-r,-v,兩個(gè)參數(shù)show出某個(gè)版本的時(shí)候具體修改了哪些文件。
*******************************************************************************
5.
svn cp MakeFile
makefile1---------
6.
svn st -----------會(huì)發(fā)現(xiàn)本地的工作拷貝WC中多了一個(gè)文件makefile1,前面的/代表這個(gè)文件目前是不受控的。
7.
svn ci ---------提交
8.
svn delete------------刪除一個(gè)文件(是庫(kù)中的文件,狀態(tài)不在中間狀態(tài)如M,C),提交之后庫(kù)中文件將真正被刪除。
9.
svn revert testfile2---------我們?cè)噲D修改一個(gè)文件,會(huì)看到狀態(tài)變成M,在testfile2修改之后,我們考慮將他進(jìn)行提交,如果發(fā)現(xiàn)修改很多是有問(wèn)題的話,可以使用svn
revert 取消這個(gè)文件的所有更改。
10.
svn blame Makefile ----------我們可以查看某個(gè)文件的修改歷史,可以具體到每行代碼的修訂號(hào)和修改者。
*******************************************************************************
11.
svn cat Makefile –r 400
---------查看某個(gè)版本的文件內(nèi)容。在我們的WC中,一個(gè)文件只存在一個(gè)修訂號(hào),想要看其他任一修訂號(hào)的某個(gè)文件,可以用svn cat 加上版本號(hào)即可。
12.
svn diff Makefile –r 2298:3322-----------查看一個(gè)文件在兩個(gè)修訂號(hào)之間的差異。
*******************************************************************************
13.
svn co s204 –r 4500---------co
s204代碼
14.
svn info --------------我們看到是4500版本的代碼了
15.
svn up –r 4518---------想更新到4518版本代碼,從這里我們看到從4500-》4518,變化過(guò)程中修改了一些文件,刪除過(guò)一些文件,同事新增了一些文件,最終產(chǎn)生了4518版本的代碼。
*******************************************************************************
16.
svn export url 目錄名-----------從某個(gè)其他庫(kù)的源碼導(dǎo)出一個(gè)干凈的目錄樹(shù)。
17.
svn import 源/目錄名 目的地/庫(kù)名--------導(dǎo)入到庫(kù)中。
18.
svn mv bcm963xx
trunk/----------搬移目錄內(nèi)容
19.
svn copy url1 url2 –m “………” ---------創(chuàng)建新分支,可以加版本號(hào)-r,在linux下的WC目錄中就可以執(zhí)行創(chuàng)建分支了。
*******************************************************************************
20.
處理沖突的方法:
下面我說(shuō)一個(gè),通用的解決沖突的辦法,還不會(huì)覆蓋代碼,以test.php為例 :
1,修改文件后提交不了,大多是因?yàn)榘姹静灰恢略斐傻摹8乱幌?,不產(chǎn)生沖突的情況,就可以提交了。
2,更新文件,如果出現(xiàn)沖突的情況,打開(kāi)沖突文件test.php會(huì)看到類似以下的內(nèi)容
<<<<<<<<<<<<<<<
asdfadfadfadf
11111111111111
=======
asdfadfadfadf
111111111111111
222222222222
>>>>>>>>>>>>>>>>
結(jié)合別人修改的內(nèi)容和自己修改的內(nèi)容,然后把文件中 的<<<<<,=====,>>>>>>>這類沖突符號(hào)去掉。去掉后,還是不 能提交的,為什么?因?yàn)闆_突時(shí)會(huì)產(chǎn)生三個(gè)文件,有這三個(gè)文件存在肯定提交不了。
客戶端用的tortoisesvn(這個(gè)估計(jì)程序員用的最多),沖突時(shí)會(huì)多產(chǎn)生,三個(gè)文件
test.php.mine 是沖突前自己的文件
test.php.版本號(hào) 是沖突前本地的版本文件
test.php.服務(wù)器的版本號(hào) 是沖突后服務(wù)器版本文件
提交的時(shí)候,把這三個(gè)文件刪除掉就可以提交了。
3,產(chǎn)生覆蓋的原因。
a),在修改沖突文件test.php時(shí),把別人代碼都刪除掉了,只留下了自己的代碼。這樣就會(huì)產(chǎn)生覆蓋了。
b),把test.php.mine中的內(nèi)容直接copy到test.php文件,這樣也會(huì)產(chǎn)生代碼覆蓋。
上面二種情況都是我親眼看到新手這樣操作的,要避免這二種操作方法。
21.
合并
svn merge test.php
–r 200:205 (將版本200與205之間的差異合并到當(dāng)前文件,通常會(huì)產(chǎn)生沖突,需要處理一下。)
End.