【svn-Linux】Linux下SVN的全部使用說明


 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

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

  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 選項表示徹底刪除改軟件和相關文件)

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

3.創建SVN版本庫

創建項目目錄和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 db

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

4.設置訪問權限

  # 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

 


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

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

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

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

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

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

4、加鎖/解鎖

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

5、更新到某個版本

  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)

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

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中保留了本地版本的原始拷貝。

7、刪除文件

  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‘,推薦使用這種

8、查看日志

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

9、查看文件詳細信息

  svn info path
    例如:svn info test.php

10、比較差異

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

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

11、將兩個版本之間的差異合並到當前文件

  svn merge -r m:n path
  例如:svn merge -r 200:205 test.php(將版本200與205之間的差異合並到當前文件,但是一般都會產生沖突,需要處理一下)

12、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、備份方式

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

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

2.3 svnsync是一種實時備份方式,將數據完全復制到另一台版本庫,當這台機器故障,可迅速切換到備份那台。

3、備份與恢復

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM