搭建svn版本控制系統

一、搭建svn服務器
1、環境檢查

[root@linux-node01 ~]# cat /etc/redhat-release 
CentOS release 6.8 (Final)
[root@linux-node01 ~]# getconf LONG_BIT
64
[root@linux-node01 ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
[root@linux-node01 ~]# getenforce 
Disabled

2、安裝svn服務器

[root@master data1]# yum install subversion -y

如果需要更新 svn 版本可以使用 wandisco 的 yum 源

[root@linux-node01 ~]# rpm -qa | grep subversion # 查找已安裝版本
subversion-1.6.11-15.el6_7.x86_64
[root@linux-node01 ~]# yum remove -y subversion-1.6.11-15.el6_7.x86_64  # 卸載安裝的1.6版本
[root@linux-node01 ~]# cat /etc/yum.repos.d/wandisco-svn.repo
[WandiscoSVN]
name=Wandisco SVN Repo
baseurl=http://opensource.wandisco.com/centos/$releasever/svn-1.9/RPMS/$basearch/
enabled=1
gpgcheck=0
[root@linux-node01 ~]# yum clean all
[root@linux-node01 ~]# yum install -y subversion
[root@linux-node01 ~]# rpm -qa | grep subversion
subversion-1.9.7-1.x86_64

3、新建svn服務器目錄並初始化第一個倉庫project

[root@linux-node01 ~]# mkdir /development/svndata
[root@linux-node01 ~]# svnadmin create /development/svndata/project
[root@linux-node01 ~]# tree /development/svndata/project
/development/svndata/project
├── conf
│   ├── authz
│   ├── hooks-env.tmpl
│   ├── passwd
│   └── svnserve.conf
├── db
│   ├── current
│   ├── format
│   ├── fsfs.conf
│   ├── fs-type
│   ├── min-unpacked-rev
│   ├── revprops
│   │   └── 0
│   │       └── 0
│   ├── revs
│   │   └── 0
│   │       └── 0
│   ├── transactions
│   ├── txn-current
│   ├── txn-current-lock
│   ├── txn-protorevs
│   ├── uuid
│   └── write-lock
├── format
├── hooks
│   ├── post-commit.tmpl
│   ├── post-lock.tmpl
│   ├── post-revprop-change.tmpl
│   ├── post-unlock.tmpl
│   ├── pre-commit.tmpl
│   ├── pre-lock.tmpl
│   ├── pre-revprop-change.tmpl
│   ├── pre-unlock.tmpl
│   └── start-commit.tmpl
├── locks
│   ├── db.lock
│   └── db-logs.lock
└── README.txt
10 directories, 28 files
路徑           類型 作用
conf           目錄 存放版本庫所用配置文件的目錄
dav            目錄 供mod_dav_svn使用
db             目錄 版本數據存儲目錄
db/fs-type     文件 版本庫數據真實存儲格式,SVN有fsfs和bdb兩種存儲格式
db/revprops    目錄 記錄版本屬性
db/revs        目錄 版本庫數據存儲真實目錄
db/uuid        文件 存儲版本庫唯一標識號,參考《svn版本庫標識uuid簡述》
db/txn-current 文件 記錄當前事務
format         文件 存儲一個整數的文件,此整數代表庫層次結構版本
hooks          目錄 存放版本庫勾子目錄
locks          目錄 存儲庫鎖目錄,用來跟蹤庫的訪問者

4、在根目錄下svnroot目錄並在這個目錄下創建兩個大版本庫分別爲北京項目、天津項目,在這兩個項目下建立分支,由於項目名稱不能使用中文,請使用project1代表北京項目,使用project2代表天津項目

[root@linux-node01 ~]# mkdir -p /svnroot/project1/{trunk,branch,age}
[root@linux-node01 ~]# mkdir -p /svnroot/project2/{trunk,branch,age}
[root@linux-node01 ~]# tree /svnroot
/svnroot
├── project1
│   ├── age
│   ├── branch
│   └── trunk
└── project2
    ├── age
    ├── branch
    └── trunk
8 directories, 0 files
[root@linux-node01 ~]# svn import /svnroot file:///development/svndata/project/ -m 'init svn project'
Adding         /svnroot/project1
Adding         /svnroot/project1/age
Adding         /svnroot/project1/branch
Adding         /svnroot/project1/trunk
Adding         /svnroot/project2
Adding         /svnroot/project2/age
Adding         /svnroot/project2/branch
Adding         /svnroot/project2/trunk
Committing transaction...
Committed revision 1.

提交後的版本爲1
解釋一下上面命令的含義
    import 爲導入命令,將/svnroot目錄下的目錄導入到project版本庫下,-m 輸入日誌信息
    import的其他用法請使用svn help import查看具體幫助

[root@linux-node01 ~]# rm -rf /svnroot

這樣就將svnroot目錄下的文件夾導入到倉庫project下,然後刪掉svnroot文件夾

5、配置SVN
先進入到project目錄下有一個conf目錄,裏面存放了project版本庫的配置文件

[root@linux-node01 ~]# cd /development/svndata/project
[root@linux-node01 project]# ll
total 24
drwxr-xr-x 2 root root 4096 Aug 16 01:31 conf
drwxr-sr-x 6 root root 4096 Aug 16 01:38 db
-r--r--r-- 1 root root    2 Aug 16 01:31 format
drwxr-xr-x 2 root root 4096 Aug 16 01:31 hooks
drwxr-xr-x 2 root root 4096 Aug 16 01:31 locks
-rw-r--r-- 1 root root  246 Aug 16 01:31 README.txt
[root@linux-node01 project]# cd conf/
[root@linux-node01 conf]# ll
total 20
-rw-r--r-- 1 root root 1080 Aug 16 01:31 authz
-rw-r--r-- 1 root root  885 Aug 16 01:31 hooks-env.tmpl
-rw-r--r-- 1 root root  309 Aug 16 01:31 passwd

-rw-r--r-- 1 root root 4371 Aug 16 01:31 svnserve.conf
其中:
    svnserve.conf是SVN版本庫的配置文件。裏面包含了認證文件的路徑以及匿名用戶是否用於讀取權限等操作
    passwd文件指定了用戶的登錄名以及對應的密碼信息
    authz文件指定了passwd文件中用戶的權限
修改svnserver.conf配置文件,在修改之前先備份,備份的目的有兩個,一個是便於操作失誤能夠進行快速還原,另一個就是改完之後可以對比文件修改了那些地方
cp svnserve.conf{,.backup}
開始編輯,過程省略,直接查看編輯完成之後的結果,此文件的修改配置項必須定格,否則配置錯誤

[root@linux-node01 conf]# diff svnserve.conf{,.backup}
19,20c19,20
< anon-access = none
< auth-access = write
---
> # anon-access = read
> # auth-access = write
27c27
< password-db = passwd
---
> # password-db = passwd
36c36
< authz-db = authz
---
> # authz-db = authz

以<開頭的是修改後的配置項信息
以>開頭的是修改前的配置項信息
6、新增用戶並設置密碼
passwd文件定義用戶屬性,這裏的用戶分爲兩個項目組的用戶,其中zhangsan、lisi爲project1組的成員,有讀寫權限。liutao、gaoyuanyuan、chenglong爲project2組的成員擁有讀寫權限 ,admin作爲管理員對project總版本庫擁有rw權限
passwd文件主要定義有哪些用戶,格式爲:用戶名 = 密碼 #注意等號兩邊的空格以及書寫必須定格

[root@linux-node01 ~]# cat /development/svndata/project/conf/passwd    
…………省略內容…………
[users]
# harry = harryssecret
# sally = sallyssecret
# 下面都是添加的,前面是用戶名,後面是密碼
admin = 123456
zhangsan = 123456
lisi = 123456
liutao = 123456
gaoyuanyaun = 123456
chenglong = 123456

7、添加羣組並增加訪問控制
定義authz文件,定義這些用戶的權限,之中裏面有組的概念,可以將多個用戶定義爲一個組,爲組定義權限,組內的用戶共享這個權限
此文件格式定義組的格式爲
[groups]
組名 = 用戶 #多個用戶使用逗號進行分隔
版本庫授權的格式爲
[版本庫根目錄]
@組名 = 權限
用戶名 = 權限
[版本庫根目錄/項目目錄]
@組名 = 權限
用戶名 = 權限

[root@linux-node01 ~]# cat /development/svndata/project/conf/authz 
…………省略內容…………
[groups]
project1 = zhangsan,lisi
prohect2 = liutao,gaoyuanyaun,chenglong
[/]
admin = rw
[/project1]
@project1 = rw
[/prohect2]
@prohect2 = rw
* =

權限表示:
r 表示對該目錄有讀權限;
w 表示對該目錄有寫權限;
rw 表示對該目錄有讀寫權限;
* = 表示,除了上面設置了權限的用戶組之外,其他任何人都被禁止訪問本目錄,這點比較重要。
8、啓動svn服務

[root@linux-node01 ~]# svnserve -d -r /development/svndata/project

檢查啓動結果,端口號爲3690

[root@linux-node01 ~]# netstat -anptlu | grep svn
tcp        0      0 0.0.0.0:3690                0.0.0.0:*                   LISTEN      2950/svnserve       
[root@linux-node01 ~]# ps aux|grep svn|grep -v grep
root       2950  0.0  0.2 151016  1156 ?        Ss   01:52   0:00 svnserve -d -r /development/svndata/project

如果防火牆開啓了請建立相關規則

iptables -I INPUT -p tcp --dport 3690 -j ACCEPT
service  iptables save

安裝完成之後,在任意地點創建文件夾名稱,點擊右鍵會出現一個SVN檢出的選項點擊一下

9、使用http認證服務器

[root@linux-node01 ~]# yum install httpd mod_dav_svn 
http之支持加密的密碼,所以需要將svn的明文密碼轉換
[root@linux-node01 ~]# touch /development/svndata/project/conf/webpasswd
[root@linux-node01 ~]# htpasswd -b /development/svndata/project/conf/webpasswd admin admin
Adding password for user admin

一步一步轉換或者在/development/svndata/project/conf/目錄下新建下面perl腳本 pd.pl

[root@linux-node01 conf]# cat pd.pl 
#!/usr/bin/perl
use warnings;
use strict;
open (FILE, "passwd") or die ("Cannot open the passwd file!\n");
open (OUT_FILE, ">webpasswd") or die ("Cannot open the webpasswd file!\n");
close (OUT_FILE);
foreach (<FILE>) {
    if($_ =~ m/^[^#].*=/) {
        $_ =~ s/=//;
        `htpasswd -b webpasswd $_`;
    }
}

運行 perl pd.pl

[root@linux-node01 conf]# perl pd.pl
Adding password for user admin
Adding password for user zhangshan
Adding password for user lisi
Adding password for user liutao
Adding password for user gaoyuanyaun
Adding password for user chenglong

10、修改httpd.conf文件

vim /etc/httpd/conf/httpd.conf 
在文件最後添加
<Location /project>
     DAV svn
    SVNPath /development/svndata/project/
    AuthType Basic
    AuthName "svn for project"
    AuthUserFile /development/svndata/project/conf/webpasswd
    AuthzSVNAccessFile /development/svndata/project/conf/authz
    Satisfy all
    Require valid-user
</Location>

11、修改文件夾屬主爲apache

[root@linux-node01 ~]# chown -R apache.apache /development/svndata/project/

12、啓動 httpd

[root@linux-node01 conf]# service httpd start 
Starting httpd:                                            [  OK  ]

10、打開web頁面 http://192.168.56.11/project/
建議更換成ip地址。輸入賬戶密碼如下:

13、如果出現 (13)Permission denied: Could not open password file: /development/svndata... 則是因爲SELinux未關閉,授權是無效的,需要修改SVN目錄的權限配置。運行下面的命令

chcon -R -h -t httpd_sys_content_t /data1/svn/project

成功運行後刪掉 passwd 文件,這樣密碼就只有你知道了

14、使用https認證服務器
一般公司的Svn服務器會搭建成https認證的服務器,密碼則是使用ldap認證,所以搭建起來比較麻煩,除了httpd之外還要open-ssl等插件支持,但足夠安全和實用。

[root@linux-node01 ~]# yum install openssl mod_ssl -y
[root@linux-node01 ~]# cd /etc/httpd/conf
[root@linux-node01 conf]# 
[root@linux-node01 conf]# openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
..............................++++++
......++++++
e is 65537 (0x10001)
Enter pass phrase for server.key: # 123123
Verifying - Enter pass phrase for server.key: # 123123

命令運行期間需要用戶輸入並確認自己的密碼

對憑證進行填寫必要信息,需要填寫國家(CN),郵箱,公司等等,按要求填寫即可(後面好像不需要用到)

[root@linux-node01 conf]# openssl req -new -key server.key > server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

生成證書

[root@linux-node01 conf]# openssl req -x509 -days 2048 -key server.key -in server.csr > server.crt
Enter pass phrase for server.key:
[root@linux-node01 conf]# ll
total 64
-rw-r--r-- 1 root root 34744 Aug 16 02:25 httpd.conf
-rw-r--r-- 1 root root 13139 Jul 12 21:33 magic
-rw-r--r-- 1 root root   867 Aug 16 02:30 server.crt
-rw-r--r-- 1 root root   599 Aug 16 02:30 server.csr
-rw-r--r-- 1 root root   963 Aug 16 02:29 server.key

修改配置文件 httpd.conf

vim httpd.conf
增加
LoadModule ssl_module modules/mod_ssl.so
在<Location /project>中的最後加上
SSLRequireSSL
在文件最後加上
SSLMutex default
SSLRandomSeed startup builtin
SSLSessionCache none
ErrorLog /var/log/httpd/SSL.log
LogLevel info
SSLEngine On
SSLCertificateFile conf/server.crt
SSLCertificateKeyFile conf/server.key

重啓httpd,輸入密碼即可

Stopping httpd:                                            [  OK  ]
Starting httpd: [Wed Aug 16 02:36:25 2017] [warn] module ssl_module is already loaded, skipping
Apache/2.2.15 mod_ssl/2.2.15 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.
Server 127.0.0.1:80 (RSA)
Enter pass phrase: # 123123
OK: Pass Phrase Dialog successful.
                                                           [  OK  ]

頁面上訪問 https://192.168.56.11/project/

15、commit的時候提交備註
在hooks目錄下面增加pre-commit文件即可,文件內容可以參考pre-commit.tmpl需要注意的是如果是中文在windows下可能會顯示不了

#!/bin/sh
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c)
if [ "$LOGMSG" -lt 10 ]; then
echo -e "\n Please submit a comment greater than 10 characters."1>&2        
exit 1
fi

16、密碼使用mysql保存驗證
首先需要 按照 mod_auth_mysql

yum install mod_auth_mysql -y


配置可參考 http://modauthmysql.sourceforge.net/CONFIGURE
修改 httpd.conf 添加

LoadModule mysql_auth_module modules/mod_auth_mysql.so 
在 <location /project> 中修改
AuthMySQLEnable On
AuthMySQLHost master
AuthMySQLPort 3306
AuthMySQLSocket /data1/mysql/3306/mysql.sock
AuthMySQLUser svn
AuthMySQLPassword xxxx
AuthMySQLDB user
AuthMySQLUserTable user_auth
AuthMySQLNameField user_name
AuthMySQLPasswordField passwd
AuthMySQLNoPasswd Off
AuthMySQLPwEncryption md5   # 密碼加密 md5
# AuthMySQLSaltField
AuthMySQLCharacterSet utf8
AuthMySQLAuthoritative On  # 只支持 mysql 驗證 取消其他驗證方式

在數據庫user中新建一個表如下

mysql> show create table user_auth\G
*************************** 1. row ***************************
       Table: user_auth
Create Table: CREATE TABLE `user_auth` (
  `user_name` varchar(32) NOT NULL COMMENT '用戶英文名',
  `passwd` varchar(256) NOT NULL COMMENT '用戶密碼',
  `last_modify` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時間',
  PRIMARY KEY (`user_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶認證'
1 row in set (0.00 sec)

並新建用戶

grant all privileges on user.user_auth to 'svn'@'master' identified by 'xxxx';

重啓 httpd 即可。
如果遇到MySQL ERROR: Can't connect to MySQL server on 'master' (13)
解決方法
1. 查看httpd_can_network_connect的值是否爲off(例如:httpd_can_network_connect --> off)

# getsebool -a | grep httpd

2. 修改httpd_can_network_connect的值爲on

# setsebool httpd_can_network_connect 1

3. 重新驗證httpd_can_network_connect

# getsebool -a | grep httpd

4. 重啓http

# service httpd restart

如果遇到 Permission denied: make_sock: could not bind to address [::]:80則使用

semanage port -a -t http_port_t -p tcp 80

但由於我的semanage一直安裝失敗但要下載一大堆依賴包,太麻煩了,我就使用了下面的方法

setenforce 0     # 寬鬆模式
service httpd restart
setenforce 1   # 強制模式

shell下求MD5值的方法

echo -n '12345'|md5sum|cut -d ' ' -f1      
827ccb0eea8a706c4c34a16891f84e7b

17、如果配置辦公網訪問一般需要關閉iptables或者配置
# 查看規則

iptables -nvL --line-number

# 在第4行插入443端口輸入規則

-I INPUT -i eth0 -p tcp -s IP --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

# 第一行插入443端口輸出規則

-I OUTPUT 1 -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT


二、建立全量,增量腳本
以下爲兩個腳本

[root@linux-node01 ~]# mkdir -p /data/scripts

1、    全庫備份whole.sh

[root@linux-node01 scripts]# cat whole.sh 
#!/bin/sh
DATE=$(date +%F-%H)
SVN_DIR=/development/svndata/project/    # 定義SVN庫目錄變量
SVN_BAK_DIR=/backup/                     # 定義備份文件存放目錄變量
NUM1=$(cat /data/scripts/whole_id)     # 取初始化版本號
NUM2=$(svnlook youngest $SVN_DIR)        # 取當前最新的版本號
# 開始備份
svnadmin dump $SVN_DIR  -r $NUM1:$NUM2  --incremental >  $SVN_BAK_DIR/whole_bak_$DATE
# 判斷備份是否成功,若成功,則記錄當前最新的版本號到臨時文件中,用於下次增量備份使用
if [ $? -eq 0 ];
    then
    echo $NUM2 > /data/scripts/whole_id
    else
    echo "backup fail...."
fi

2、    增量備份increment.sh

[root@linux-node01 scripts]# cat increment.sh
#!/bin/sh
DATE=$(date +%F-%H)
SVN_DIR=/development/svndata/project/      # 定義SVN庫目錄變量
SVN_BAK_DIR=/backup/                       # 定義備份文件存放目錄變量
NUM1=$(cat /data/scripts/increment_id)       # 取初始化版本號
NUM2=$(svnlook youngest $SVN_DIR)          # 取當前最新的版本號
#開始備份
svnadmin dump $SVN_DIR  -r $NUM1:$NUM2  --incremental >  $SVN_BAK_DIR/whole_bak_$DATE
#判斷備份是否成功,若成功,則記錄當前最新的版本號到臨時文件中,用於下次增量備份使用
if [ $? -eq 0 ];
    then
    echo $NUM2 > /data/scripts/increment_id
    else
    echo "backup fail...."
fi

在配置計劃任務之前請手動執行一次這兩個腳本
建立計劃任務,實現每週日凌晨1點進行一次全庫備份,凌晨2點進行增量備份
最後利用rsync進行同步

rsync -azH /backup  192.168.56.12::SVN_BACKUP
crontab -e
00 1 * * 7 /bin/sh whole.sh
00 2 1 * * /bin/sh increment.sh
00 3 1 * * /usr/bin/rsync -azH /backup 192.168.56.12::SVN_BACKUP

恢復思路:
1、建立全新的svn庫
2、使用最近一次的全庫備份進行恢復,在進行每天的增量恢復
3、進行結果查看
恢復命令

svnadmin load  要恢復的svn庫 < 備份全路徑

三、svn常用命令
svn客戶端的三種登錄方式

svn://ip地址      這種是svn默認的登錄方式
http://ip地址     這種是結合了apache實現的 web登錄方式
https://ip地址    這種是結合了apache+openssl實現的安全登錄方式,.常用於外網svn
file:///絕對路徑  本地的登錄方式,一般在svn服務端本地操作時會用到

1、checkout到本地目錄

svn checkout -–username=*** --password=*** path

簡寫:svn co
例如:

[root@linux-node01 ~]# svn  checkout svn://192.168.56.11/ --username=admin --password=admin
-----------------------------------------------------------------------
ATTENTION!  Your password for authentication realm:
   <svn://192.168.56.11:3690> 7db09e79-fb2b-4ec9-88ea-0dc4fd9766e5
can only be stored to disk unencrypted!  You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible.  See the documentation for details.
You can avoid future appearances of this warning by setting the value
of the 'store-plaintext-passwords' option to either 'yes' or 'no' in
'/root/.subversion/servers'.
-----------------------------------------------------------------------
Store password unencrypted (yes/no)? yes
A    project1
A    project1/age
A    project1/branch
A    project1/trunk
A    project2
A    project2/age
A    project2/branch
A    project2/trunk
Checked out revision 1.

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

svn add file

例如:

[root@linux-node01 age]# svn add test.txt 
A         test.txt

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

svn commit -m "LogMessage" [-N] [--no-unlock] PATH

# 如果選擇了保持鎖,就使用–no-unlock開關
# -m 後面是提交的日誌信息,一般情況是必填的。
簡寫:svn ci
例如:

[root@linux-node01 age]# svn commit -m "test"      
Adding         test.txt
Transmitting file data .done
Committing transaction...
Committed revision 2.

4、加鎖/解鎖

svn lock -m "LockMessage" [--force] PATH

5、本地更新到某個版本

svn update -r * path  # *爲版本號
svn update       # 整個文件夾
svn update file     # 單獨一個文件

6、查看文件或者目錄狀態
1)svn status path  #目錄下的文件和子目錄的狀態,正常狀態不顯示
【?:不在svn的控制中;M:內容被修改;C:發生衝突;A:預定加入到版本庫;K:被鎖定】
2)svn status -v path  # 顯示文件和子目錄狀態
第一列保持相同,第二列顯示工作版本號,第三和第四列顯示最後一次修改的版本號和修改人。
注:svn status、svn diff和svn revert這三條命令在沒有網絡的情況下也可以執行的,原因是svn在本地的.svn中保留了本地版本的原始拷貝。
簡寫:svn st
7、刪除文件

svn delete path -m "delete test fle"

例如:

svn delete svn://master/project/test.php -m “delete test file”

或者分步驟(推薦使用這種)

svn delete test.php
svn ci -m ‘delete test file‘

簡寫:svn  [del, remove, rm]
8、查看日誌

svn log file

顯示這個文件的所有修改記錄,及其版本號的變化
9、查看文件詳細信息

svn info file

10、比較差異

svn diff path  # 將修改的文件與基礎版本比較

例如:

svn diff test.php
svn diff -r m:n path  # 對版本m和版本n比較差異

例如:

svn diff -r 200:201 test.php

簡寫:svn di
11、將兩個版本之間的差異合併到當前文件

svn merge -r m:n path

例如:

svn merge -r 200:205 test.php   # 將版本200與205之間的差異合併到當前文件,但是一般都會產生衝

突,需要手動修改文件
12、Svn 幫助

svn help
svn help ci

以上是常用命令,下面寫幾個不經常用的
13、版本庫下的文件和目錄列表

svn list path   # 顯示path目錄下的所有屬於版本庫的文件和目錄

簡寫:svn ls
14、創建納入版本控制下的新目錄

svn  mkdir *    #  創建納入版本控制下的新目錄。

用法:

(1)、mkdir PATH…
(2)、mkdir URL…

創建版本控制的目錄。
(1)、每一個以工作副本 PATH 指定的目錄,都會創建在本地端,並且加入新增調度,以待下一次的提交。
(2)、每個以URL指定的目錄,都會透過立即提交於倉庫中創建.在這兩個情況下,所有的中間目錄都必須事先存在。
15、恢復本地修改

svn revert: 恢復原始未改變的工作副本文件 (恢復大部份的本地修改)。

用法:

revert PATH…

注意: 本子命令不會存取網絡,並且會解除衝突的狀況。但是它不會恢復被刪除的目錄
16、代碼庫URL變更

svn switch (sw):   更新工作副本至不同的URL。

用法:

(1)、switch URL [PATH]
(2)、switch –relocate FROM TO [PATH...]
(1)、更新你的工作副本,映射到一個新的URL,其行爲跟“svn update”很像,也會將服務器上文件與本地文件合併。這是將工作副本對應到同一倉庫中某個分支或者標記的方法。
(2)、改寫工作副本的URL元數據,以反映單純的URL上的改變。當倉庫的根URL變動(比如方案名或是主機名稱變動),但是工作副本仍舊對映到同一倉庫的同一目錄時使用這個命令更新工作副本與倉庫的對應關係。

17、解決衝突

svn resolved:  移除工作副本的目錄或文件的“衝突”狀態。

用法:

resolved PATH…

注意: 本子命令不會依語法來解決衝突或是移除衝突標記;它只是移除衝突的相關文件,然後讓 PATH 可以再次提交。
18、輸出指定文件或URL的內容

svn cat 目標[@版本]…如果指定了版本,將從指定的版本開始查找。
svn cat -r PREV filename >filename
(PREV 是上一版本,也可以寫具體版本號,這樣輸出結果是可以提交的)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章