您好,登錄后才能下訂單哦!
svn的搭建和使用
啥是svn?
svn是一個跨平臺的開源的版本控制系統,svn版本管理工具管理著隨時間改變的各種數據,這些數據放置在一個中央資料檔案庫中,這個檔案庫很像一個普通的文件服務器或者FTP服務器,但是,與其他服務器不同的是,svn會備份并記錄每個文件每一次的修改更新變動。這樣我們就可以把任意一個時間點的檔案恢復到想要的某一個舊的版本,當然也可以直接瀏覽指定文件的更新歷史記錄。
svn的缺點:
上文提到每一次提交都會保留一個副本,所以svn的數據庫容量會暴增
如果svn的服務器宕機,基本上不可以工作
不適合開源的系統開發
svn的優點:
管理方便,邏輯比較清晰,符合一般人的思維習慣
容易管理,集中式的svn服務器更可以保證數據的安全性
版本一致性會更有保證
適合開發人數不多的項目開發
普及度比較高
svn工作流程大概可以分成如下四步驟:
在中央庫上創建或從主干復制一個分支;
從中央庫check out下這個分支的代碼;
增加自己的代碼文件,修改現存的代碼或刪除代碼文件;
commit代碼,假設有人在剛剛的分支上提交了代碼,你就會被提示代碼過期,你要先up你的代碼后再提交,up代碼的時候如果出現了沖突,需要解決好沖突后再進行提交。
實驗
環境搭建
[root@svnserver ~]# yum -y install subversion #首先當然是下載軟件
[root@svnserver ~]# mkdir -p /svn/data #創建版本庫存放目錄
[root@svnserver ~]# mkdir -p /svn/auth #創建認證相關文件的存放目錄
[root@svnserver ~]# svnserve -d -r /svn/data/ #啟動svn,-d指定后臺運行,-r選項指定版本庫存放目錄
svnserve可用選項:
-d [--daemon] : 后臺模式
-i [--inetd] : inetd 模式
-t [--tunnel] : 隧道模式
-X [--listen-once] : 監聽一次方式(調試用)
-r [--root] ARG : 服務的根目錄
-R [--read-only] : 強制只讀;覆蓋版本庫配置文件
--config-file ARG : 從文件 ARG 讀取配置
--listen-port ARG : 監聽端口
[方式: daemon, listen-once]
--listen-host ARG : 監聽主機名稱或IP地址
[方式: daemon, listen-once]
-T [--threads] : 使用線程代替進程 [方式: daemon]
--foreground : 在前臺運行(調試用)
[方式: daemon]
--log-file ARG : svnserve 日志文件
--pid-file ARG : 寫進程 PID 到文件 ARG
[方式: daemon, listen-once]
--tunnel-user ARG : 隧道用戶名(默認是當前UID對應的用戶名)
[方式: tunnel]
-h [--help] : 顯示本幫助
--version : 顯示程序版本信息
[root@svnserver ~]# ps -ef |grep svn |grep -v grep #查看svn進程
root 2720 1 0 04:41 ? 00:00:00 svnserve -d -r /svn/data/
[root@svnserver ~]# lsof -i:3690 #查看svn的監聽端口
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
svnserve 2720 root 3u IPv4 21398 0t0 TCP *:svn (LISTEN)
[root@svnserver ~]# svnadmin create /svn/data/dir #創建版本庫
[root@svnserver ~]# tree /svn/data/dir/ #初始化版本庫之后會生成在版本庫目錄下生成許多文件和目錄,比較重要的是conf目錄和hooks目錄,前者用來存放和配置相關的文件,后者存放的是鉤子腳本
/svn/data/dir/
├── conf
│ ├── authz
│ ├── passwd
│ └── svnserve.conf
├── 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
[root@svnserver conf]# cp svnserve.conf svnserve.conf.bak #要養成修改配置文件之前先保存一份備份的習慣
[root@svnserver conf]# cat svnserve.conf | egrep -v "(#|^$)" #修改成如下
[general]
anon-access = read #匿名連接的權限
auth-access = write #認證連接的權限
password-db = /svn/auth/passwd #用戶認證文件
authz-db = /svn/auth/authz #用戶權限文件
[root@svnserver conf]# cp authz passwd /svn/auth/ #拷貝認證、權限文件到自定義的目錄下
[root@svnserver conf]# cd /svn/auth/
[root@svnserver auth]# chmod 700 * #修改權限為700
[root@svnserver auth]# cat passwd | egrep -v "(#|^$)" #修改如下
[users]
lhx = 1
[root@svnserver auth]# cat authz | egrep -v "(#|^$)" #修改如下
[dir:/]
lhx = rw
重啟svn
[root@svnserver auth]# pkill svnserve
[root@svnserver auth]# svnserve -d -r /svn/data/
svn在windows下的使用
在windows客戶端創建一個目錄,然后右鍵點擊這個目錄,選擇“SVN Checkout”,輸入svn的倉庫的路徑
輸入用戶名和密碼,點擊OK
成功之后會出現一個綠色的勾
在svndata目錄下創建一個文件,然后右擊這個目錄,選擇“SVN commit”,選擇要上傳的文件
上傳成功
在svn服務器查看上傳的文件
[root@svnserver ~]# svn list svn://192.168.83.134/dir --verbose --username=lhx --password=1
1 lhx May 22 04:59 ./
1 lhx 0 May 22 04:59 test.txt
svn在linux下的使用
常用的命令:svn<subcommand> [options] [args]
checkout (co) #從源碼庫取出一個工作版本的拷貝
commit (ci) #提交當前工作拷貝的更改,這個地方有可能出現代碼沖突
copy(cp) #做一個工作拷貝的拷貝
delete (del,remove,rm) #刪除本地或者svn server response上的文件或者目錄
diff(di) #比較某個文件與庫中的對應文件的不同
export # 導出一個無版本控制的目錄樹拷貝,一般用于導出發行,或者投入運行的版本
import #將本地當前目錄下的文件導入到svn response中
info #當前目錄工作拷貝中某文件信息
status(stat,st) #svn工作拷貝當前狀態,與svn server上的源碼比較的結果
update (up) # 將svn server端文件同步到本地
[root@client ~]# yum -y install subversion
[root@client ~]# svn co svn://192.168.83.134/dir /svndata --username=lhx --password=1 #從庫里面checkout文件下來
-----------------------------------------------------------------------
A /svndata/test.txt
Checked out revision 1.
[root@client ~]# tree /svndata/
/svndata/
└── test.txt
如果checkout的時候報錯:
svn:Can’t convert string from ‘UTF-8’ to native encoding:
可以用如下方法解決:
[root@client ~]# export LC_CTYPE="en_US.UTF-8"
[root@client ~]# export LC_ALL=
當然工作中,會用到的命令和選項還有很多,這里就不一一深究了。上面的命令都有解釋,大家可以自己做一下試試。
如有紕漏,歡迎指正。。。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。