
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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
