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