【svn-Linux】Linux下SVN的所有使用說明

 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%php

SVN http://202.231.××.×:×××/svn/03-Design/.....
%××××××××××××××××××××××××××××××× 配置 ××××××××××××××××××××××××××××××××××××%
1.安裝svn vim

  sudo apt-get update
  # sudo apt-get install subversion
  能夠驗證一下,經過以下命令:
  svn help //--svn幫助
  svn --version //--svn版本
  svnserve --version //--svn server版本
%××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××%
2.卸載svn 服務器

利用如下命令查看本身的系統是否已經安裝了svn:
  svn
若是顯示一下信息說明已安裝,可使用如下命令進行卸載:
  sudo apt-get remove --purge subversion (–purge 選項表示完全刪除改軟件和相關文件)網絡

%××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××%dom

3.建立SVN版本庫tcp

建立項目目錄和svn倉庫:
  sudo mkdir /home/svn
  sudo mkdir /home/svn/repository
  sudo chmod -R 777 /home/svn/repository
  sudo svnadmin create /home/svn/repository編輯器

  # cd /home/svn/repository/
  # ls
執行命令後,會在repository下生成如下文件
  conf db format hooks locks README.txt
咱們主要關心的是conf和db文件,conf文件夾下是存放主配置文件和用戶、權限位置,db文件夾是存放svn轉儲後的數據。
對db進行權限設置:
  sudo chmod -R 777 dbsvn

%×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××%工具

4.設置訪問權限url

  # cd conf/
  # ls
執行命令後,authz passwd svnserve.conf
其中authz文件是設置用戶權限,passwd文件是存儲用戶及密碼,svnserve.conf是主配置文件,先配置主配置文件。

××××××××全部的行都必須頂格,不然報錯。
修改配置文件conf/svnserve.conf,將如下參數去掉註釋
  sudo vim svnserve.conf
[general]
  anon-access = none #匿名訪問權限,默認read,none爲不容許訪問
  auth-access = write #認證用戶權限
  password-db = passwd #用戶信息存放文件,默認在版本庫/conf下面,也能夠絕對路徑指定文件位置
  authz-db = authz

添加訪問用戶:
  # sudo vi passwd #格式是用戶名=密碼,採用明文密碼
[users]
  xiaoming = 123
  zhangsan = 123
  lisi = 123

設置用戶權限:
  # sudo vim authz
  [groups] #定義組的用戶
  manager = xiaoming
  core_dev = zhangsan,lisi
  [repos:/] #以根目錄起始的repos版本庫manager組爲讀寫權限
  @manager = rw
  [repos:/media] #core_dev對repos版本庫下media目錄爲讀寫權限
  @core_dev = rw

其中,
  admin = wang //用戶王屬於admin權限組
  @admin = rw //admin權限組的權限是讀和寫
  * = r 全部的組都具備讀權限

%××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××%

5.啓動svn服務202.231.××.×:****

  # sudo svnserve -d -r /home/svn (svnserve -d -r /home/svn [--listen-host 202.231.92.5])
  注: -d:表示在後臺運行 -r:指定服務器的根目錄 -多ip的話–listen-host來指定監聽的ip地址.
  能夠用以下命令查看svnserve是否已經運行:
    ps aux | grep svnserve

  # 查看是否啓動成功,可看的監聽3690端口
  # sudo netstat -antp |grep svnserve
    tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 28967/svnserve
  # 若是想關閉服務,可以使用
    pkill svnserve (中止服務器 killall svnserve
    ps aux | grep svnserve)

%×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××%
6.下載svn

  將服務器上代碼目錄同步到本地目錄
  (若是是第一次提交文件,極可能會出現「svn:'.'不是工做副本」,即當前目錄不是工做副本,這個時候須要用到import:eg:svn import . url)
  將文件checkout到本地目錄
  svn checkout path(path是服務器上的目錄) 下載完成後打印<××××××「取出版本 163。」××××××>

  簡寫:svn co

  svn checkout svn://192.168.*.***/repos/media /svn

  或者,

  svn checkout svn://192.168.*.***/repos/media /svn --username zhangsan --password 123 
    例如:user@***$ svn checkout http://202.231.××.×:×××/svn/03-Design/.....

%×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××%
7.從服務器上更新最新文件到本地

  svn update /home/user/svn/RM181/TSJP/03-Design/SS/LC

 


 %×××××××××××××××××××××××××× 使用 ××××××××××××××××××××××××××××××××××%

二、往版本庫中添加新的文件

  svn add file
    例如: svn add test.php(添加test.php)
        svn add *.php(添加當前目錄下全部的php文件)

三、將改動的文件提交到版本庫

  svn commit -m 「LogMessage「 [-N] [--no-unlock] PATH(若是選擇了保持鎖,就使用–no-unlock開關)

  簡寫:svn ci
    例如:svn commit -m 「add test file for my test「 ***.xlsx

四、加鎖/解鎖

  svn lock -m 「LockMessage「 [--force] PATH
    例如:svn lock -m 「lock test file「 test.php
  svn unlock PATH

五、更新到某個版本

  svn update -r m path

  簡寫:svn up 
  例如:
    svn update若是後面沒有目錄,默認將當前目錄以及子目錄下的全部文件都更新到最新版本。
    svn update -r 200 test.php(將版本庫中的文件test.php還原到版本200)
    svn update test.php(更新,於版本庫同步。若是在提交的時候提示過時的話,是由於衝突,須要先update,修改文件,而後清除svn resolved,最後再提交commit)

六、查看文件或者目錄狀態

1)svn status path(目錄下的文件和子目錄的狀態,正常狀態不顯示)
  【?:不在svn的控制中;M:內容被修改;C:發生衝突;A:預約加入到版本庫;K:被鎖定】M狀態通常比較多
2)svn status -v path(顯示文件和子目錄狀態)

  簡寫:svn st 
    第一列保持相同,第二列顯示工做版本號,第三和第四列顯示最後一次修改的版本號和修改人。
    注:svn status、svn diff和 svn revert這三條命令在沒有網絡的狀況下也能夠執行的,緣由是svn在本地的.svn中保留了本地版本的原始拷貝。

七、刪除文件

  svn delete path -m 「delete test fle「

  簡寫:svn (del, remove, rm)
    例如:svn delete svn://192.168.*.1/pro/domain/test.php -m 「delete test file」
    或者直接svn delete test.php 而後再svn ci -m ‘delete test file‘,推薦使用這種

八、查看日誌

  svn log path
    例如:svn log test.php 顯示這個文件的全部修改記錄,及其版本號的變化

九、查看文件詳細信息

  svn info path
    例如:svn info test.php

十、比較差別

  svn diff path(將修改的文件與基礎版本比較)
    例如:svn diff test.php
  svn diff -r m:n path(對版本m和版本n比較差別)
  簡寫:svn di 

    例如:svn diff -r 200:201 test.php

十一、將兩個版本之間的差別合併到當前文件

  svn merge -r m:n path
  例如:svn merge -r 200:205 test.php(將版本200與205之間的差別合併到當前文件,可是通常都會產生衝突,須要處理一下)

十二、SVN 幫助

  svn help
  svn help ci



%×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××%
1.經常使用svn命令

  獲取當前最新修訂版本號
    svnlook youngest /home/svn/repos

1.1 將服務器上代碼目錄同步到本地目錄
    svn checkout svn://192.168.*.***/repos/media /svn --username zhangsan --password 123
  #不指定同步到本地目錄(/svn)默認是當前目錄,也能夠不指定用戶名和密碼,須要手動輸入。或使用簡寫svn co "svn://..."。

1.2 把新建文件提交到svn版本庫
  具體步驟:
    a) cd /svn #切換到本地代碼目錄,
    b) svn add filename
  #將文件加入svn管理,此時並未提交完成,另外提交文件也要在/svn目錄,不然報"svn: '..' is not a working copy"
c) svn ci filename
  #添加註釋說明並提交文件,此時會用nano編輯器打開,添加註釋說明後按ctrl+x,再按y,最後回車完成提交

1.3 把修改後的文件提交到svn
  svn commit -m "註釋說明" filename

1.4 更新代碼到最新版本
# 將代碼目錄全部文件更新到最新版本
  svn update
# 將某個文件還原到某個版本
  svn update -r 85 filename #85是修訂版號

1.5 對代碼加鎖/解鎖
# 加鎖
  svn lock -m "註釋說明" filename
# 解鎖
  svn unlock filename

1.6 代碼更新衝突
  若是提交時提供過時的話,說明代碼衝突,需先svn update filename,再執行svn resolved filename,最後提交svn commit -m "註釋說明" filename

1.7 查看日誌
  svn log filename

1.8 查看文件信息
  svn info filename

1.9 版本庫合併
  把庫1合併到庫2中:先把庫2代碼checkout到本地目錄(svn co url2),再進此目錄執行遷移(svn merge url1)便可


二、備份方式

2.1 svnadmin dump是官方推薦的備份方式,適用於量小(100G左右)版本庫備份,可增量備份,備份恢復較慢。

2.2 svnadmin hotcopy是全量熱拷貝的工具,所以磁盤佔用多,適用於量大(100G以上)版本庫備份,但不能達到增量備份效果,備份恢復快。

2.3 svnsync是一種實時備份方式,將數據徹底複製到另外一臺版本庫,當這臺機器故障,可迅速切換到備份那臺。

三、備份與恢復

3.1 svnadmin dump備份

# 完整備份
  svnadmin dump /home/svn/repos > YYmmdd_fully_backup.svn
# 完整壓縮備份
  svnadmin dump /home/svn/repos | gzip > YYmmdd_fully_backup.gz
# 備份恢復
  svnadmin load /home/svn/repos < YYmmdd_fully_backup.svn
  zcat YYmmdd_fully_backup.gz | svnadmin load repos

### 增量備份 ###
# 先完整備份
  svnadmin dump /home/svn/repos -r 0:100 > YYmmdd_incremental_backup.svn
# 再增量備份
  svnadmin dump /home/svn/repos -r 101:200 --incremental > YYmmdd_incremental_backup.svn
3.2 svnadmin hotcopy備份

%××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××%

4.下載代碼庫

 注:推出root權限,否則下載後的代碼沒法在其它用戶權限下編輯

  #exit

  $svn co svn://192.168.×.100/Openwrt

  注:其中的ip地址可使用ifconfig查看

%××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××%

5.增長或刪除庫中的文件

5.1增長/刪除單個文件

  $svn add text.sh

  $svn del text.sh

  $svn ci

5.2 批量增長/刪除文件

  $svn status|grep ? |awk '{print $2}'|xargs svn add

  $svn status|grep ! |awk '{print $2}'|xargs svn del

相關文章
相關標籤/搜索