簡介: 目前流行的版本控制軟體中,SVN ( 集中式版本控制 ) 算是使用範圍更廣、且使用時間更早的一款了,現在 git ( 分散式版本控制 ) 更火爆一點。 以前寫的 SVN 文檔丟失了,簡單整理一遍。 一、SVN 的安裝 ( CentOS ) 二、SVN 基本步驟 1、創建工作目錄、版本庫 2、 ...
簡介:
目前流行的版本控制軟體中,SVN ( 集中式版本控制 ) 算是使用範圍更廣、且使用時間更早的一款了,現在 git ( 分散式版本控制 ) 更火爆一點。
以前寫的 SVN 文檔丟失了,簡單整理一遍。
一、SVN 的安裝 ( CentOS )
shell > yum -y install subversion shell > svn --version --quiet # 版本號 1.6.11
二、SVN 基本步驟
1、創建工作目錄、版本庫
shell > mkdir /svn # 創建一個工作目錄 ( 可以略 ) shell > svnadmin create /svn/myrepos # 新建一個版本庫,名為 myrepos ( 可以使用 svnadmin help [ 可以接子命令 ] 命令參數 ) shell > ls /svn/myrepos/ # 版本庫下的目錄、文件 conf db format hooks locks README.txt shell > tree /svn/myrepos/conf/ # 版本庫配置文件目錄 /svn/myrepos/conf/ ├── authz # 用戶授權 ├── passwd # 用戶認證 └── svnserve.conf # svnserve 服務配置文件
2、修改 SVN 版本庫配置文件 ( 需要重啟 svnserve )
shell > grep -vP '^#|^$' /svn/myrepos/conf/svnserve.conf # 文件行首不能有空格 [general] anon-access = none # 匿名用戶訪問許可權 auth-access = write # 認證用戶訪問許可權 password-db = passwd # 認證用戶密碼文件 authz-db = authz # 目錄授權文件位置 realm = My First Repository # 提示信息 [sasl]
3、添加認證用戶、密碼 ( username = password )
shell > grep -vP '^#|^$' /svn/myrepos/conf/passwd [users] wang = wang_pwd guaishou = guaishou_pwd
4、添加目錄授權
shell > grep -vP '^#|^$' /svn/myrepos/conf/authz [aliases] [groups] [myrepos:/] # 授權目錄 wang = rw # 授權認證用戶 ( 可讀、可寫) * = # 非授權認證用戶 ( 無許可權 )
5、以守護進程的方式啟動 SVN
shell > svnserve -d -r /svn # -d 以守護進程的方式啟動一個 svnserve ,-r 指定版本庫
# 預設監聽 TCP 3690 埠,以守護進程模式啟動時,可以使用 --list-port 、--list-host 來指定埠、主機
shell > netstat -lnpt | grep 3690 tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 1883/svnserve
6、授權測試 ( 一 )
shell > svn checkout --no-auth-cache --username wang --password wang_pwd svn://192.168.12.128/myrepos /home/wang/myrepos # 成功 取出版本 0。 shell > svn co --no-auth-cache --username guaishou --password guaishou_pwd svn://192.168.12.128/myrepos /home/guaishou/myrepos # 失敗 ( co = checkout ) svn: 認證失敗
# 由上可知,authz 中的授權生效 ( 用戶:guaishou 雖然也是認證用戶,但是沒有授權 )
shell > touch /home/wang/myrepos/readme # 建立測試文件 shell > svn add /home/guaishou/myrepos/readme # 添加到工作區 shell > svn --no-auth-cache --username wang --password wang_pwd commit -m 'add readme' /home/guaishou/myrepos/readme # commit 提交,-m 指定 log 增加 home/wang/myrepos/readme 傳輸文件數據. 提交後的版本為 1。
# 由上可知,用戶:wang 被授權的讀、寫許可權生效
shell > grep -vP '^#|^$' /svn/myrepos/conf/authz [aliases] [groups] [myrepos:/] wang = rw * = r # 非授權認證用戶 ( 只讀許可權 ) shell > svn co --no-auth-cache --username guaishou --password guaishou_pwd svn://192.168.12.128/myrepos /home/guaishou/myrepos # 成功 A /home/guaishou/myrepos/readme 取出版本 1。 shell > echo my name is guaishou > /home/guaishou/myrepos/readme # 修改 readme shell > svn --no-auth-cache --username guaishou --password guaishou_pwd commit -m 'change readme' /home/guaishou/myrepos/readme # 失敗 ( 用戶:guaishou 為只讀許可權 ) svn: 提交失敗(細節如下): svn: 認證失敗
# 由上可知,authz 文件發生改變,不需要重啟 svnserve 即可生效
7、授權測試 ( 二 )
shell > mkdir /home/wang/myrepos/{home_f,home_g,public} # 建立三個測試目錄 shell > svn add /home/wang/myrepos/* # 添加到工作區 A /home/wang/myrepos/home_f A /home/wang/myrepos/home_g A /home/wang/myrepos/public svn: 警告: “/home/wang/myrepos/readme”已納入版本控制 shell > svn --no-auth-cache --username wang --password wang_pwd commit -m 'add test dir' /home/wang/myrepos/ # 提交到版本庫 增加 home/wang/myrepos/home_f 增加 home/wang/myrepos/home_g 增加 home/wang/myrepos/public 提交後的版本為 2。 shell > shell > grep -vP '^#|^$' /svn/myrepos/conf/passwd # 添加認證用戶 [users] wang = wang_pwd feng = feng_pwd guaishou = guaishou_pwd shell > grep -vP '^#|^$' /svn/myrepos/conf/authz # 新的授權目錄如下 [aliases] [groups] [myrepos:/] wang = rw * = r [myrepos:/home_f] wang = r feng = rw * = [myrepos:/home_g] wang = r guaishou = rw * = [myrepos:/public] * = rw shell > svn co --no-auth-cache --username wang --password wang_pwd svn://192.168.12.128/myrepos /home/wang/myrepos/ # wang 檢出了所有目錄 A /home/wang/myrepos/home_f A /home/wang/myrepos/readme A /home/wang/myrepos/home_g A /home/wang/myrepos/public 取出版本 2。 shell > svn co --no-auth-cache --username feng --password feng_pwd svn://192.168.12.128/myrepos /home/feng/myrepos/ # feng 沒有檢出 home_g A /home/feng/myrepos/home_f A /home/feng/myrepos/readme A /home/feng/myrepos/public 取出版本 2。 shell > svn co --no-auth-cache --username guaishou --password guaishou_pwd svn://192.168.12.128/myrepos /home/guaishou/myrepos/ # guaishou 沒有檢出 home_f A /home/guaishou/myrepos/readme A /home/guaishou/myrepos/home_g A /home/guaishou/myrepos/public 取出版本 2。 shell > touch /home/wang/myrepos/home_f/readme # 建立測試文件 shell > svn add /home/feng/myrepos/home_f/readme # 添加到工作區 A /home/wang/myrepos/home_f/readme shell > svn --no-auth-cache --username wang --password wang_pwd commit -m 'add readme' /home/feng/myrepos/home_f/readme # 提交失敗 增加 home/wang/myrepos/home_f/readme 傳輸文件數據.svn: 提交失敗(細節如下): svn: Access denied shell > touch /home/wang/myrepos/public/readme shell > svn add /home/wang/myrepos/public/readme A /home/wang/myrepos/public/readme shell > svn --no-auth-cache --username wang --password wang_pwd commit -m 'add public/readme' /home/wang/myrepos/public/readme # 提交成功 增加 home/wang/myrepos/public/readme 傳輸文件數據. 提交後的版本為 3。
## 好了,授權就到這裡 !
三、停止 svnserve
shell > kill $(ps aux | grep svnserve | grep -v grep | awk '{print $2}')
四、SVN 備份、還原 ( 寫個小腳本,加入到任務計劃中 !)
1、邏輯備份 ( 備份靈活、可以全量、增量備份 --incremental 、節省空間,適合版本庫比較小的規模 )
shell > svnadmin dump /svn/myrepos > /data/backup/svn/myrepos_$(date +%Y%m%d).bak
2、物理備份 ( 占用空間大,備份、恢復速度快 )
shell > svnadmin hotcopy /svn/myrepos/ /data/backup/svn/myrepos_hot_$(date +%Y%m%d).bak
3、邏輯還原
shell > svnadmin load /svn/myrepos/ < /data/backup/svn/myrepos_20160303.bak # 註意:如果版本庫被刪除,還原後還需重新配置認證用戶、授權等!
4、物理還原
shell > svnadmin hotcopy /data/backup/svn/myrepos_hot_20160303.bak/ /svn/myrepos # 路徑剛好反過來就好了!
五、Win 客戶端連接
shell > iptables -A INPUT -p tcp --dport 3690 -j ACCEPT # 開放 TCP 3690 埠 shell > service iptables save
1、下載、安裝小烏龜 ( TortoiseSVN )
2、建立工作目錄,右鍵 Checkout --> URL ( svn://192.168.12.128/myrepos ) --> 輸入用戶名、密碼 ( wang / wang_pwd )
3、測試授權,創建一個文件,添加,提交 看看是否很授權吻合 !
## 先到此為止 !