Svn版本管理-學習篇
Linux系統運維交流羣:476794643
svn介紹
常見版本控制軟件
svn常用的運行模式
svn常用的訪問模式
svn數據格式
svn服務器搭建部署
windows系統svn客戶端使用
linux系統svn客戶端使用
Svn鉤子腳本簡介
Svn備份還原模擬演練
本文參考了網上資料
svn 服務端搭建部署
svn介紹
Subversion(SVN)是一個開源的,跨平臺的版本控制系統,由CollabNet公司成立於2000年;Subversion作爲新一代的版本管理系統,以其目錄版本化、原子提交、版本化的元數據、更加有效的分支和標籤等特性,至今已被衆多的互聯網企業使用來管理網站、論壇的代碼文件;Subversion最獨特的地方,便是可以通過Apache的擴展模塊與Apache的HTTP服務相結合,實現更安全的特性與管理,其次用戶還可以通過HTTP協議去訪問版本庫,還可以通過SSL協議傳輸加密,保證數據的安全性;Subversion是Apache軟件基金會的發展的一個項目,並且也是一個豐富的開發人員和用戶社區的一部分。
常見的版本控制軟件
1,CVS,逐漸被SVN取代,是CVX重寫版和改寫版
2,SVN,Subversion
3,Git,Git是一個開源的分佈式版本控制系統,用以有效、高速的處理從很小到非常大的項目版本管理。Git 是 Linus Torvalds 爲了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件
svn的服務器常見有3種運行訪問方式
1、獨立服務器(例如:svn://IP/sadoc); 2、藉助apache(例如:http://IP/sadoc); 3、本地直接訪問(例如:file://IP/sadoc)
客戶端訪問方式
Subversion可以通過多種方式訪問--本地磁盤訪問,或各種各樣不同的網絡協議,但一個版本庫的地址永遠都是一個URL,URL方案反映了訪問方法
file://直接版本訪問(本地磁盤或者網絡磁盤) http://通過WebDAV協議訪問支持Subversion的Apache服務器 https://與http://相似,但是用的SSL加密 svn://通過未認證的TCP/IP自定義協議訪問svnserver服務器 svn+ssh://通過認證並加密的TCP/IP自定義協議訪問svnserver服務器
SVN數據格式
Subversion存儲版本數據方式2種:BDB(一種事務安全型表類型)和FSFS(一種不需要數據庫的存儲系統)。因爲BDB方式在服務器中斷時,有可能鎖住數據,所以還是FSFS方式更安全一點;那麼在創建Subversion版本控制倉庫的時候,可以指定存儲版本數據爲FSFS方式;
集中式代碼管理的核心是服務器,所有開發者在開始新一天的工作之前必須從服務器獲取代碼,然後開發,最後解決衝突,提交。所有的版本信息都放在服務器上。如果脫離了服務器,開發者基本上可以說是無法工作的。下面舉例說
明:開始新一天的工作
1、從服務器下載項目組最新代碼
2、進入自己的分支,進行工作,每隔一小時向服務器上自己的分支持提交一次代碼(很多人都有這個習慣。因爲有時候自己對自己代碼改來改去,最後又想還原到前一個小時的版本,或者看看前一個小時自己修改了哪些代碼,就需要這樣做了)。
3、下班時間快到了,把自己的分支合併到服務器的主分支上,一天的工作完成,並反映給服務器
這就是經典的svn工作流程,從流程上看,有缺點,也有優點
缺點:
1、服務器壓太大,svn數據庫容量暴增
2、如果不能連接到服務器上,基本上不可以工作,看上面第二步,如果服務器不能連接上,就不能提交,還原,對比等
3、不適合開源開發(開發人數非常非常多,但是Google app engine就是用SVN的)。但一般集中式管理的有非常明確權限管理機制(例如分支訪問限制),可以實現分層管理,從而很好解決開發人數衆多問題
優點:
1、管理方便,邏輯明確,符合一般人思維習慣
2、易於管理,集中式服務器更能保證安全性
3、代碼一致性非常高
4、適合開發人數不多的項目開發
5、大部分軟件配置的大學教材都是使用svn和vss
1,yum安裝subversion
[root@localhost ~]# yum -y install subversion
2,檢測是否安裝成功
[root@localhost ~]# rpm -qa subversion subversion-1.6.11-15.el6_7.x86_64
3,創建svn版本根目錄已經密碼權限目錄
[root@localhost ~]# mkdir -pv /web/svndata /web/svnpasswd mkdir: 已創建目錄 "/web" mkdir: 已創建目錄 "/web/svndata" mkdir: 已創建目錄 "/web/svnpasswd" [root@localhost ~]# ll /web/ 總用量 8 drwxr-xr-x. 2 root root 4096 2月 23 22:16 svndata drwxr-xr-x. 2 root root 4096 2月 23 22:16 svnpasswd
4,啓動服務,並檢測服務和端口是否開啓
[root@localhost ~]# svnserve -d -r /web/svndata [root@localhost ~]# ps -ef | grep svn | grep -v grep root 1745 1 0 22:18 ? 00:00:00 svnserve -d -r /web/svndata [root@localhost ~]# netstat -lntup | grep 3690 tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 1745/svnserve
5,創建一個新的subversion項目www.baidu.com,項目可以創建很多個
[root@localhost ~]# svnadmin create /web/svndata/www.baidu.com [root@localhost ~]# ls -ld /web/svndata/www.baidu.com/ drwxr-xr-x. 6 root root 4096 2月 23 22:20 /web/svndata/www.baidu.com/
6,關於幫助,可以查看幫助
[root@localhost ~]# svnadmin help create create: 用法: svnadmin create REPOS_PATH 在 REPOS_PATH 創建一個新的空版本庫。 有效選項: --bdb-txn-nosync : 在提交事務時禁用fsync [BDB] --bdb-log-keep : 禁用自動刪除日誌文件 [BDB] --config-dir ARG : 從目錄 ARG 讀取用戶配置文件 --fs-type ARG : 版本庫類型: “fsfs”(默認)或“bdb” --pre-1.4-compatible : 使用與1.4之前版本兼容的格式 --pre-1.5-compatible : 使用 Subversion 1.5 之前版本的格式 --pre-1.6-compatible : 使用與 1.6 之前版本兼容的格式
7,修改配置文件
[root@localhost ~]# cd /web/svndata/www.baidu.com/ [root@localhost www.baidu.com]# ls conf db format hooks locks README.txt ************************************************************************** dav目錄:是提供apache與mod_dav_svn使用的目錄,讓他們存儲內部數據,剛開始新建時此目錄沒有 db目錄:就是所有版本控制的數據存放文件 hooks目錄:放置hook腳本文件的目錄 locks目錄:用來放置subversion常見鎖定數據的目錄,用來追蹤存取文件庫的客戶端 format文件:是一個文本文件,裏面只放了一個整數。表示當前文件庫配置的版本號 conf目錄:是這個倉庫的配置文件(倉庫的用戶訪問賬號、權限等),也是我們要關注的配置文件 [root@localhost www.baidu.com]# cd conf/ [root@localhost conf]# ls authz passwd svnserve.conf ************************************************************************** authz #認證權限相關 passwd #用戶名和密碼 svnserve.conf #服務器配置文件 [root@localhost conf]# cp svnserve.conf svnserve.conf.2016-3-3bak [root@localhost conf]# vi svnserve.conf [root@localhost conf]# egrep "\-access|-db = " svnserve.conf anon-access = read #原先註釋掉了,匿名用戶可以讀,使用none的話就是匿名用戶不可以訪問 auth-access = write #這幾行都要取消註釋,認證用戶可以寫,可以是read,write,none password-db = /app/svnpasswd/passwd #密碼庫文件,默認使用的是同一目錄下的passwd文件作爲用戶密碼庫 authz-db = /app/svnpasswd/authz #認證權限文件 realm = www.baidu.com #登陸提示信息 注意:此配置文件的所有內容必須頂格,否則會報錯
8,定義用戶名密碼,權限配置
[root@localhost conf]# cp authz passwd /web/svnpasswd/ [root@localhost conf]# cd /web/svnpasswd/ [root@localhost svnpasswd]# ls authz passwd [root@localhost svnpasswd]# vi passwd [users] # harry = harryssecret # sally = sallyssecret user1 = 123456 user2 = 123456 user3 = 123456 ************************************************************************** #末尾添加上面三行 #對於部分版本,前面的[users]是有#號的,如果有#號,一定要取消,否則只能使用匿名用戶登錄,客戶端登錄不會 出現登錄窗口或密碼提示,除非在配置文件將anon設置爲none,否則將返回一個錯誤 #這裏的密碼都是明文,沒有加密
8.1,配置權限
[root@localhost svnpasswd]# vi authz [groups] # harry_and_sally = harry,sally # harry_sally_and_joe = harry,sally,&joe # [/foo/bar] # harry = rw # &joe = r # * = # [repository:/baz/fuz] # @harry_and_sally = rw # * = r admin = user1,user2 #定義組,在[groups]下面添加 #用戶組格式 用戶組名 = 用戶1,用戶2 #一個組可以包含多個用戶,英文逗號間隔,用戶名必須是在passwd中存在的 [www.baidu.com:/] #/表示我當前所在版本庫目錄 @admin = rw #@admin表示這個組的權限,就是上面定義的組的成員 user3 = r #用戶 * = #除了上面的有賦予權限成員之外,其他的成員都沒有權限 ************************************************************************** authz配置 用戶組格式,其中1個用戶組可以包含1個或多個用戶,用戶間用,隔開 [groups] =, [<項目庫>:/項目/目錄] @<用戶組名> = <權限> <用戶名> = <權限> [/]表示根目錄 及以下,根目錄是svnserve啓動時指定的, 我們指定爲/app/svndata,[/]就是表示全部版庫設置權限 [repos:/]表示版本庫repos設置權限 [repos:/webtest]表示版本庫repos中的webtest項目設置權限 [repos:/webtest/zhanghe]表示版本庫對repos中的webtest項目的zhanghe目錄設置權限 權限主體可以是用戶組,用戶或*,用戶組在前面加@,*表示全部用戶 權限可以是w,r,wr和空,空表示沒有任何權限 authz中每個參數都要頂格寫,開頭不能空格 對於組,要以@開頭,用戶不需要@開頭
9,重新啓動svn服務
[root@localhost svnpasswd]# pkill svnserve [root@localhost svnpasswd]# ps -ef | grep svn root 1881 1679 0 23:30 pts/0 00:00:00 grep svn [root@localhost svnpasswd]# svnserve -d -r /web/svndata/ [root@localhost svnpasswd]# netstat -tlunp | grep svn tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 1883/svnserve
windows系統svn客戶端使用
Linux系統運維交流羣:476794643
1,下載svn windows 客戶端
2,安裝windows svn客戶端
3,新建文件夾svn 右擊svn checkout設置設置取出數據
4,設置svn地址
5,輸入賬號密碼
6,見到這個頁面就代表取出數據成功了
7,windows svn客戶端提交數據
8,提交數據成功
9,右擊 tortoisesvn 選中 repo-browser,隨時查看服務器上面的內容
10,看到服務器上面的內容了
linux系統 svn客戶端使用
Linux系統運維交流羣:476794643
svn Linux客戶端使用幫助
1,安裝軟件
[root@localhost ~]# yum -y install subversion
2,本地取出svn數據
[root@localhost ~]# mkdir svn [root@localhost ~]# svn co svn://192.168.42.128/www.baidu.com /root/svn/ --username=user1 --password=123456 ----------------------------------------------------------------------- 注意! 你的密碼,對於認證域: <svn://192.168.42.128:3690> Welcome SVN server 只能明文保存在磁盤上! 如果可能的話,請考慮配置你的系統,讓 Subversion 可以保存加密後的密碼。請參閱文檔以獲得詳細信息。 你可以通過在“/root/.subversion/servers”中設置選項“store-plaintext-passwords”爲“yes”或“no”, 來避免再次出現此警告。 ----------------------------------------------------------------------- 保存未加密的密碼(yes/no)?yes A /root/svn/index.php.txt 取出版本 1。 [root@localhost ~]# svn co svn://192.168.42.128/www.baidu.com /root/svn/ --username=user1 --password=123456 A /root/svn/zabbix.txt 取出版本 2。 [root@localhost ~]# ls svn/ index.php.txt zabbix.txt
###################################
2.1,解決 UTF-8 中文取出失敗
[root@localhost ~]# export LC_CTYPE="en_US.UTF-8" [root@localhost ~]# export LC_ALL=
3,Linux客戶端查看svn文件列表
[root@localhost ~]# svn ls svn://192.168.42.128/www.baidu.com --username=user1 --password=123456 index.php.txt zabbix.txt 新建文本文檔.txt
4,Linux客戶端查看svn文件內容
[root@localhost ~]# svn cat svn://192.168.42.128/www.baidu.com/zabbix.txt 111111111111111111111111 222222222222222222222222
5,Linux客戶端提交數據
[root@localhost svn]# touch {a..e}#一定要本地創建好 [root@localhost svn]# ls a b c d e index.php.txt zabbix.txt 新建文本文檔.txt [root@localhost svn]# svn add a b c d e A a A b A c A d A e [root@localhost svn]# svn ci -m "1" 增加 a 增加 b 增加 c 增加 d 增加 e 傳輸文件數據..... 提交後的版本爲 5。
6,文件夾創建提交
[root@localhost svn]# mkdir zhanghe [root@localhost svn]# svn add zhanghe A zhanghe [root@localhost svn]# svn ci -m "2" 增加 zhanghe 提交後的版本爲 6。
7,Linux客戶端數據導入
[root@localhost ~]# mkdir svn1 [root@localhost ~]# mkdir -p svn1/trunk svn1/branch svn1/tag [root@localhost ~]# svn import svn1/ svn://192.168.42.128/www.baidu.com -m "4" 增加 svn1/trunk 增加 svn1/tag 增加 svn1/branch 提交後的版本爲 7。
8,svn 把主幹拷貝成分之
[root@localhost ~]# svn copy svn://192.168.42.128/www.baidu.com/trunk svn://192.168.42.128/www.baidu.com/branch/branch_cms_160303 -m "5" --username=user1 --password=123456 提交後的版本爲 8。
Svn鉤子腳本簡介
Linux系統運維交流羣:476794643
鉤子腳本的具體寫法就是操作系統shell腳本程序寫法,請根據自己SVN所在的操作系統和shell程序進行相應的開發。
鉤子腳本就是被某些版本庫事件觸發的程序,例如創建新版本或修改未被版本控制的屬性。每個鉤子都能掌管足夠的信息來了解發生了什麼事件,操作對象是什麼以及觸發事件用戶的賬號。根據鉤子的輸出或者返回狀態,鉤子程序能夠以某種方式控制該動作繼續執行,停止或者掛起。
svn的hooks模版功能介紹 start-commit提交前觸發事務 pre-commit提交完成前觸發事務 post-commit提交完成時觸發事務 pre-revprop-change版本屬性修改前觸發事務 post-revprop-change版本屬性修改後觸發事務
post-commit
在提交完成,成功創建版本之後執行該鉤子,提交已經完成,不可更改,因此腳本返回值被忽略
post-lock
對文件進行加鎖操作之後執行該腳本
post-revprop-change
在修改revision屬性之後,執行該腳本。因爲修改稿已經完成,不可更改,因此本腳本的返回值被飯忽略
(不過實際上的實現似乎是該腳本的正確執行與否影響屬性修改)
post-unlock
對文件進行解鎖操作之後執行該腳本
pre-commit
在Subversion transaction完畢之後,在提交之前,執行該腳本
pre-revprop-change
在修改revision屬性之前,執行該腳本
start-commit
對客戶端還沒有向服務器提交數據之前,即還沒有建立Subversion transaction(縮寫txn)之前,執行該腳本
腳本post-commit 演示
腳本用處:當svn更新時候,自動同步到tmp下面去,適合網站使用
REPOS="$1" REV="$2" export LC_CTYPE="en_US.UTF-8" export LC_ALL LOGPATH="/web/log" [ ! -d ${LOGPATH} ] && mkdir ${LOGPATH} -p #update content from svn SVN=/usr/bin/svn $SVN update --username user1 --password 123456 /data/www if [ $? -eq 0 ] then /usr/bin/rsync -az --delete /data/www /tmp fi
腳本pre-commit 演示
腳本用處:限制上傳文件大小,文件後綴
REPOS="$1" TXN="$2" #此處更改大小限制,這裏是5M MAX_SIZE=5242880 #此處增加限制文件後比綴名 FILTER='\.(zip|rar|o|obj|tar|gz)$' #Make sure that the log message contains some test SVNLOOK=/usr/bin/svnlook #LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c` LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | wc -c` if [ "$LOGMSG" -lt 9 ]; then echo -e "nLog message cann't be empty! you must input more than 8 chars as comment!." 1>&2 exit 1 fi files=$($SVNLOOK changed -t $TXN $REPOS |cut -d "" -f 4-) #echo "$files">&2 #echo "$r">&2 #exit 1 rc=0 echo "$files" | while read f; do #check file type filesize=`$SVNLOOK cat -t "$TXN" "$REPOS" "$f" | wc -c ` if [ "filezie" -gt "$MAX_SIZE" ]; then echo "File $f is too large(must <+$MAX_SIZE)B" >&2 exit 1 fi done #All checks passed,so allow the commit. if [ $? -eq 1 ]; then exit 1 else exit 0 fi
2016年03月03日15:52:53
數據備份還原 待更新。。。。。。。。。
腳本實現svn備份與恢復,基於rsync實現遠程備份,並記錄日誌
Linux系統運維交流羣:476794643
svn服務器:192.168.42.128
備份服務器:192.168.42.129
在svn服務器進行本地備份
1.全量備份
# vim /data/shell/backup_svn.sh #!/bin/sh # PATH=$PATH:/usr/local/subversion/bin export PATH #定義時間變量,用於文件名後綴 DATE=$(date +%F) #定義SVN庫目錄變量 SVN_DIR_docs=/web/svndata/www.baidu.com SVN_DIR_tools=/web/svndata/ #SVN_DIR_ALL=/web/svndata/ #沒有試過能不能把兩個庫一起備份下來 #定義備份文件存放目錄變量 SVN_BAK_DIR=/data/bak/ #初始化版本號,全庫備份一定是從0版本號開始 echo '0' > /data/svnnum/docs_svn_id echo '0' > /data/svnnum/tools_svn_id #取初始化版本號 NUM_docs1=$(cat /data/svnnum/docs_svn_id) NUM_tools1=$(cat /data/svnnum/tools_svn_id) #取當前最新的版本號 NUM_docs2=$(svnlook youngest $SVN_DIR_docs) NUM_tools2=$(svnlook youngest $SVN_DIR_tools) #備份用戶認證以及授權文件 \cp /web/svnpassword {authz,passwd} /data/bak/. #開始備份 #判斷備份是否成功,若成功,則記錄當前最新的版本號到臨時文件中,用於下次增量備份使用 All_Backup_svn(){ svnadmin dump $SVN_DIR_docs -r $NUM_docs1:$NUM_docs2 --incremental > $SVN_BAK_DIR/docs_bak_$DATE if [ $? -eq 0 ]; then echo $NUM_docs2 > /data/svnnum/docs_svn_id else echo "$(date +%F) docs backup fail...." >> /tmp/svnback.log fi svnadmin dump $SVN_DIR_tools -r $NUM_tools1:$NUM_tools2 --incremental > $SVN_BAK_DIR/tools_bak_$DATE if [ $? -eq 0 ]; then echo $NUM_tools2 > /data/svnnum/tools_svn_id else echo "$(date +%F) tools backup fail...." >> /tmp/svnback.log fi } All_Backup_svn
2.增量備份
# vim /data/shell/day_backup_svn.sh #!/bin/bash # PATH=$PATH:/usr/local/subversion/bin export PATH #定義時間變量,用於文件名後綴 DATE=$(date +%F) #定義SVN庫目錄變量 SVN_DIR_docs=/web/svndata/www.baidu.com SVN_DIR_tools=/web/svndata/www.google.com #SVN_DIR_ALL=/web/svndata/ #沒有試過能不能把兩個庫一起備份下來 #定義備份文件存放目錄變量 SVN_BAK_DIR=/data/bak/ #取初始化版本號 NUM_docs1=$(cat /data/svnnum/docs_svn_id) NUM_tools1=$(cat /data/svnnum/tools_svn_id) #取當前最新的版本號 NUM_docs2=$(svnlook youngest $SVN_DIR_docs) NUM_tools2=$(svnlook youngest $SVN_DIR_tools) #開始備份 #判斷備份是否成功,若成功,則記錄當前最新的版本號到臨時文件中,用於下次增量備份使用 Day_Backup_svn(){ if [ $NUM_docs1 -lt $NUM_docs2 ]; then svnadmin dump $SVN_DIR_docs -r $NUM_docs1:$NUM_docs2 --incremental > $SVN_BAK_DIR/docs_bak_$DATE if [ $? -eq 0 ]; then echo $NUM_docs2 > /data/svnnum/docs_svn_id else echo "$(date +%F) docs backup fail...." >> /tmp/svnback.log fi fi if [ $NUM_tools1 -lt $NUM_tools2 ]; then svnadmin dump $SVN_DIR_tools -r $NUM_tools1:$NUM_tools2 --incremental > $SVN_BAK_DIR/tools_bak_$DATE if [ $? -eq 0 ]; then echo $NUM_tools2 > /data/svnnum/tools_svn_id else echo "$(date +%F) tools backup fail...." >> /tmp/svnback.log fi fi } Day_Backup_svn
3.添加定時任務
# crontab -e #start 0 2 * * * /usr/sbin/ntpdate time.nist.gov > /dev/null 2>&1 #每週日做一次全量備份 59 23 * * 0 /data/shell/backup_svn.sh &>/dev/null #對svn進行增量備份 59 23 * * 1-6 /data/shell/day_backup_svn.sh
4.配置rsync服務器:
# rpm -qa rsync(如果安裝 yum install rsync -y) rsync-3.0.6-12.el6.x86_64 # yum install xinetd -y 啓用rsync # vim /etc/xinetd.d/rsync # default: off # description: The rsync server is a good addition to an ftp server, as it \ # allows crc checksumming etc. service rsync { disable = no flags = IPv6 socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID } 提供rsync配置文件 # vim /etc/rsyncd.conf #rsync --daemon --config=/etc/rsyncd.conf #全局選項 strict modes =yes # 是否檢查口令文件的權限 port = 873 # 默認端口873 log file = /var/log/rsyncd.log # 日誌記錄文件 pid file = /var/run/rsyncd.pid # 運行進程的ID寫到哪裏 [svn] path = /data/bak # 這裏是認證的模塊名,在client端需要指定 max connections = 0 # 客戶端最大連接數,默認0(沒限制) uid = root # 指定該模塊傳輸文件時守護進程應該具有的uid gid = root # 指定該模塊傳輸文件時守護進程應該具有的gid ignore errors # 可以忽略一些無關的IO錯誤 read only = yes # no客戶端可上傳文件,yes只讀 write only = no # no客戶端可下載文件,yes不能下載 hosts allow = * # 充許任何主機連接 #hosts deny = 10.5.3.1 # 禁止指定的主機連接 auth users = root # 認證的用戶名,如果沒有這行,則表明是匿名 secrets file = /etc/backserver.pas # 指定認證口令文件位置
5.提供認證文件,且權限必須爲600
# vim /etc/backserver.pas root:123456 # chmod 600 /etc/backserver.pas
6.重啓服務
# /etc/init.d/xinetd restart
7.同步備份至192.168.42.129
提供認證文件,且權限必須爲600
# vim /etc/backserver.pas 123456 # chmod 600 /etc/backserver.pas # mkdir -p /data/bak/svn # vim /home/bak/backup_svn.sh #!/bin/bash #備份svn倉庫 /usr/bin/rsync -vzrtopg --progress --delete [email protected]::svn /data/bak/svn --password-file=/etc/backserver.pas
8.添加定時任務
# crontab -e #Start 0 2 * * * /usr/sbin/ntpdate time.nist.gov > /dev/null 2>&1 #備份svn 35 01 * * * /home/backup_svn.sh &> /dev/null #End
9. svn恢復測試
# mkdir docs # svnadmin create newrepos # svnadmin load newrepos < docs_bak_Mon # svnadmin load newrepos < docs_bak_Tue # svnadmin load newrepos < docs_bak_Wed # svnadmin load newrepos < docs_bak_Thu # svnadmin load newrepos < docs_bak_Fri # svnadmin load newrepos < docs_bak_Sun
Linux系統運維交流羣:476794643