svn的搭建和使用

svn的搭建和使用

啥是svn?

svn是一個跨平臺的開源的版本控制系統,svn版本管理工具管理着隨時間改變的各種數據,這些數據放置在一箇中央資料檔案庫中,這個檔案庫很像一個普通的文件服務器或者FTP服務器,但是,與其他服務器不同的是,svn會備份並記錄每個文件每一次的修改更新變動。這樣我們就可以把任意一個時間點的檔案恢復到想要的某一箇舊的版本,當然也可以直接瀏覽指定文件的更新歷史記錄。


svn的缺點:

  1. 上文提到每一次提交都會保留一個副本,所以svn的數據庫容量會暴增

  2. 如果svn的服務器宕機,基本上不可以工作

  3. 不適合開源的系統開發


svn的優點:

  1. 管理方便,邏輯比較清晰,符合一般人的思維習慣

  2. 容易管理,集中式的svn服務器更可以保證數據的安全性

  3. 版本一致性會更有保證

  4. 適合開發人數不多的項目開發

  5. 普及度比較高


svn工作流程大概可以分成如下四步驟:

  1. 在中央庫上創建或從主幹複製一個分支;

  2. 從中央庫check out下這個分支的代碼;

  3. 增加自己的代碼文件,修改現存的代碼或刪除代碼文件;

  4. 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的倉庫的路徑

wKiom1khgtKTgtJMAACRGEfzxCQ038.png

輸入用戶名和密碼,點擊OK

wKiom1khgtPzB48CAABX8-yBWBU108.png

成功之後會出現一個綠色的勾

wKioL1khgtOjynfiAAAMdo69fcs310.png

在svndata目錄下創建一個文件,然後右擊這個目錄,選擇“SVN commit”,選擇要上傳的文件

wKiom1khgtTz9tBFAAB37qXwO9s211.png

上傳成功

wKiom1khgtiDmGVvAAF2SK99HxE966.png


在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=


當然工作中,會用到的命令和選項還有很多,這裏就不一一深究了。上面的命令都有解釋,大家可以自己做一下試試。



如有紕漏,歡迎指正。。。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章