SVN使用說明跟蹤介紹
本節向大家講解一下SVN使用說明方面的知識,講述svn的基本使用規則以及操作流程等主題,本節論述內容適用于1.2以后版本。下面是具體的介紹,歡迎大家一起來學習SVN使用說明。
介紹
svn屬于cs構架的源代碼管理工具,服務器保存了所有版本的代碼,每個開發人員從服務器checkout出代碼,修改代碼完成某項工作以后checkin修改的代碼,在服務器中會記錄一個新的軟件版本
一般來說一個項目會有一個獨立的代碼庫,代碼庫的建立很簡單,使用svnadmincreate命令記錄即可,svn手冊建議項目使用以下的目錄結構
project
trunk
branches
tags
trunk目錄記錄代碼的主線,branches目錄存放為了某個工作目的創建的分支,tags目錄記錄軟件發行的某個版本。下面我們來看一下SVN使用說明中關于SVN特點的介紹。
SVN的特點:
1.全局版本號
svn的一個代碼庫只有一個版本號,初始版本號為0,以后不管哪個目錄發生了commit,都會產生一個新的版本號,比如一開始大家可能不習慣,但是其實這樣的策略有一個好處,就是每次你在本地svnup的時候,如果發現了版本號增加,那么就是說別人在代碼庫上有了新的修改,你很可能需要合并這個新的修改。
2.提交是原子的
每次提交多個文件修改的記錄的時候,如果成功,都只會生成一條版本記錄,相當于完成某項功能的一個patch,如果提交不是原子的,版本管理很難實現。
3.分支標記都使用svncopy命令
svn的分支標志是很高效的,幾乎是立刻完成,因為svn在新的分支和標記上只是引用了原來代碼庫中的對象,這個和命令名似乎不太相符,因此大家可以放心使用svncopy命令,而不需要擔心性能上的問題
4.缺乏mergetracking,合并的版本需要自己記錄
這是頻繁合并分支的代碼樹所必需注意的,具體工作下面有一些簡要的敘述
基本工作流程
SVN使用說明中基本工作流程的介紹。下面使用一個本地的代碼庫示例日常的svn使用流程:
首先我們在本地建議一個庫,訪問本地的庫無須用戶驗證
mkdir~/expe
cd~/expe
svnadmincreaterepos
在~/expe/repos建立了代碼庫
首先建立代碼庫的的基本目錄結構
mkdirworking_copy
cdworking_copy
mkdirtrunkbranchestags
把干凈的純代碼等需要版本控制的文件拷貝到trunk目錄
svnimport.file:///home/kkmao/expe/repos-m"initimport"
這時代碼庫中的就包含了本地的目錄結構,以及trunk下面的代碼了
把本地的內容刪掉,checkout出svn的一個版本出來,為什么本地的沒用了呢,這是因為本地的內容里面沒有.svn的目錄,因此不是一個有效的workingcopy,需要svncheckout出一個有效的版本。svncofile:///home/kkmao/expe/repos/trunk.注:svnco是(svncheckout的簡寫)
現在你已經建立好了一個可以試驗的workingcopy和庫了,每個本地目錄都會有一個.svn目錄,該目錄包含了完整的某一個版本的代碼樹,任何本地的修改都可以svndiff查看,該命令直接跟本地的這個cache進行比較,不會發生對庫的訪問,提高效率。SVN使用說明中svninfo可以看到你的本地和哪個庫相連以及當前版本路徑:.
地址(URL):file:///home/kkmao/expe/repos/trunk
檔案庫UUID:1d2627a1-0526-0410-8f90-b8b4839c1c87
修訂版:1
節點種類:目錄
調度:正常
***修改的作者:kkmao
***修改的修訂版:1
***修改的時間:2007-01-0210:38:59+0800(二,021月2007)
我隨便做了兩個文件,準備加到庫里面,作為本地修改的一個示例:
- kkmao@Loongson:~/expe/workingcopy$cathello
- helloword.
- Iamkkmao,whoareyou.
- kkmao@Loongson:~/expe/workingcopy$svnaddhello
- Ahello
- kkmao@Loongson:~/expe/workingcopy$catREADME
- whynotreadme????
- kkmao@Loongson:~/expe/workingcopy$svnaddREADME
- Ahello
- add
只修改本地內容,并沒有提交。這個時候我準備提交(commit)我的更改了,首先我會運行svnupdate查看別人是否對代碼進行了修改
kkmao@Loongson:~/expe/workingcopy$svnup于修訂版1。
up是update的簡寫,update的作用是把別人修改的代碼先取到本地,上面的結果是沒有人進行了修改。為什么要先up呢,這是因為如果有沖突的話,應該在本地解決沖突以后,再進行commit,事實上你可以直接svnci(commit),但是如果別人和你修改了同一個文件,svn也不會讓你成功提交,還是需要先進行本地的update。
現在我已經可以commit了,我先查看一下我需要commit什么,基本的規則是,patch應該一個一個的commit怎么做呢,我會先查看我本地修改了什么,使用status-u命令kkmao@Loongson:~/expe/workingcopy$svnstatus-ubr /> A0hello
A0README
狀態于修訂版:1
詳細查看一下更改的內容svndiffhello,svndiffREADME,我發現這兩個是無關的更改,他們屬于兩個不同的patch,應該單獨提交。因此我提交了兩次,并指明提交的文件
kkmao@Loongson:~/expe/workingcopy$svncommithello-m"addhello"
新增hello
傳輸文件數據.
提交后的修訂版為2。
kkmao@Loongson:~/expe/workingcopy$svncommitREADME-m"addREADME"
新增README
傳輸文件數據.
提交后的修訂版為3。
kkmao@Loongson:~/expe/workingcopy$
例子中的-m的內容也太過簡單,每次提交都應該有詳細的comment,特別是對bug的修復,應該詳細說明bug的產生原因,修復的道理等
從上面看到,應該勤commit,不要等到修改了一大堆文件以后,才想起來要commit。請期待下節關于SVN使用說明的介紹。
【編輯推薦】