歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下SVN的常用工作流程

Linux下SVN的常用工作流程

日期:2017/2/28 16:09:08   编辑:Linux教程

這兩篇文章(http://www.linuxidc.com/Linux/2011-08/40592.htm 與 http://www.linuxidc.com/Linux/2011-08/40593.htm)在Ubuntu和RedHat 5.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下的沖突是當前時刻與服務器數據沖突。

以上操作均在redhat 5.5上測試通過。

更高級的操作請查看用戶手冊,多看看,有益無害。

Copyright © Linux教程網 All Rights Reserved