Linux下svn的常用工作流程

 

上篇文章在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
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章