上篇文章在ubuntu和redhat5.5上搭建好了svnserve環境,下面總結一下svn的具體使用流程。
服務器的搭建
1)建立代碼庫。
#svnadmin create /srv/svn/repos/myproject
2)修改配置文件svnserve.conf
anon_access = none
auth_access = write
password_db = passwd 其中passwd是一個文件,默認是當前文件夾下的passwd,如果要用其他的passwd需要制定路徑名
3)配置passwd文件
添加用戶名和密碼: cobing = 123
4)啓動svnserve服務
#svnserve -d -T -r /srv/svn/repos
-d 表示把進程svnserve作爲守護進程在後臺運行
-T 表示用多線程的方式處理數據
-r
可以有效地改變文件系統的根位置,客戶端可以使用去掉前半部分的路徑,留下的要短一些的
要想讓svnserve在系統啓動時自動啓動,需要把它添加到/etc/rc.local文件中
客戶端
1)將本地代碼導入到svn代碼庫中
#svn import test svn://192.168.146.128/myproject
注意:當初建立代碼庫的路徑時/srv/svn/repos/myproject,我們啓動svn服務器指定的根目錄是/srv/svn/repos,而現在客戶導入代碼的目錄是/myproject。因爲svnserve指定了根目錄,所以用戶在訪問192.168.146.128是就相當於在訪問服務器的/srv/svn/repos目錄,所以這個時候我們只需要指出myproject目錄即可。這個地方很容易出錯,多家防範,我掉進去摸索了好久纔出來。
2)代碼導入SVN代碼庫中以後,其他用戶就可以從代碼庫下載代碼進行修改了,這個操作由svn checkout 完成
# svn checkout svn://192.168.146.128/myproject
checkout之後,svn會在你的當前目錄下生成一個myproject的文件夾,這個文件夾就是你將來進行各種操作、與svn服務器交互的地方
3)之後就可以coding了,但是要注意:每次對myproject下文件的添加、刪除、移動、複製操作都要告訴svn:
a, 增加文件、目錄 #svn add 文件或目錄名
b,刪除文件、目錄 #svn delete 文件或目錄名
c, 拷貝文件、目錄 #svn copy 條目名1 條目名2
d, 拷貝條目並刪除原條目 #svn move 條目名1 條目名2
svn項目本身已經存在的文件只需要對其修改即可,svn會自動檢測到修改。
4)修改完文件後不能馬上提交,還有很多工作要做:
a, 檢驗修改
當你完成修改,你需要提交他們到版本庫,但是在此之前,檢查一下做過什麼修改是個好主意,通過提交前的檢查,你可以整理一份精確的日誌信息,你也可以發現你不小心修改的文件,給了你一次恢復修改的機會。此外,這是一個審查和仔細察看修改的好機會,你可通過命令svn status瀏覽所做的修改,通過svn diff檢查修改的詳細信息。
# svn status 會檢測你做的所有文件和目錄的修改
A item
-
預定加入到版本庫的文件、目錄或符號鏈的
item
。 C item
-
文件
item
發生衝突,在從服務器更新時與本地版本發生交迭,在你提交到版本庫前,必須手工的解決衝突。 D item
-
文件、目錄或是符號鏈
item
預定從版本庫中刪除。 M item
-
文件
item
的內容被修改了。
#svn diff 會精確地檢測到你做的修改
b, 取消本地修改
假定我們在看svn diff的輸出,你發現對某個文件的所有修改都是錯誤的,或許你根本不應該修改這個文件,或者是從開頭重新修改會更加容易。
#svn revert 文件名
c,手動解決衝突,把由衝突的文件手動改過來
d, 接着用svn update查看本地版本與服務器版本由什麼區別:
#svn update
這時有三個標示:
U : 表示本地沒有修改
G: 表示本地已經修改,但是與版本庫沒有重疊的地方,可以合併
C: 服務器上的改動同本地的改動衝突了,需要手動解決衝突或者用svn revert 放棄本地修改
4)At Last,您的修改結束了,並且與服務器上的版本沒有衝突,那就提交吧!
#svn commit -m "LOGMSG"
不知道你們看到這裏有沒有疑惑?是不是在想svn update 和 svn status 到底什麼區別,不都是檢驗修改麼?仔細翻翻svn用戶手冊就會發現,svn revert , svn status 和svn diff這三個命令在沒有連接svn服務器的時候也可以進行,爲什麼呢?細心的用戶或者在windows上用過svn的用戶就會發現,當前工作的svn文件夾裏有一個./svn的文件,官方文檔是這樣說的“Subversion通過在.svn
管理區域使用原始的版本緩存來做到這一點,這使得報告和恢復本地修改而不必訪問網絡,這個緩存(叫做“text-base”)也允許Subversion可以根據原始版本生成一個壓縮的增量(“區別”)
提交—即使你有個非常快的網絡,有這樣一個緩存有極大的好處,只向服務器提交修改的部分而不是整個文件”。也許你已經明白了,是的,svn status是本地修改與.svn中的數據對比,而svn update是本地修改與服務器數據對比。兩者的衝突是不一樣的,svn status下的衝突是你跟之前checkout時服務器數據衝突,svn update下的衝突是當前時刻與服務器數據衝突。
以上操作均在redhat5.5上測試通過。
svn創建分支
有時候,我們在開發主分支trunk外創建另外的分支,這樣可以保證主分支和另外的分支同時工作,當分支的任務完成之後就可以將分支合併到主分支上,繼續前進。svn中的分支要創建在branches目錄中。
1,創建分支時首先要複製主分支的一個版本到新分支中:
svn cp http://svn.ss.com/YStatTST/trunk http://svn.ss.com/YStatTST/branches/uvList2uvTree -m "we modified ..."
2,然後下載分支uvList2uvTree到你的目錄下
svn co http://svn.ss.com/YStatTST/branches/uvList2uvTree
3,修改你的代碼
4, 提交你的代碼到分支uvList2uvTree上
svn commit -m "xxx"
svn刪除分支
如果不小心創建錯了一個分支,或者某個分支你不想用了,就可以刪除分支
1, svn delete http://svn.ss.com/YStatTST/branches/uvList2uvTree -m "this comment must be pretty pretty long"
注意,日誌必須足夠長,如果這個日誌信息不夠20個字符的話,不能刪掉分支呃~
svn分支對比
如果你想看看你的新分支跟其他分支(包括主分支)的區別,那就用svn diff吧
svn diff http://svn.ss.com/YStatTST/branches/uvList2uvTree http://svn.ss.com/YStatTST/trunk > filename.diff