1 svn介紹
都已經(jīng)用了git,為什么還要介紹svn呢?為了讓aicoder.com的學(xué)員能夠掌握多種的源代碼管理工具的使用方法,更快的融入到項(xiàng)目開發(fā)中,特整理此文檔。
1.1 項(xiàng)目管理中的版本控制問題
通常軟件開發(fā)由多人協(xié)作開發(fā),如果對(duì)代碼文件、配置文件、文檔等沒有進(jìn)行版本控制,將會(huì)出現(xiàn)很多問題:
- 備份多個(gè)版本,占用磁盤空間大
- 解決代碼沖突困難
- 容易引發(fā)BUG
- 難于追溯問題代碼的修改人和修改時(shí)間
- 難于恢復(fù)至以前正確版本
- 無(wú)法進(jìn)行權(quán)限控制
- 項(xiàng)目版本發(fā)布困難
1.2 什么是版本控制
版本控制(Revision control)是維護(hù)工程藍(lán)圖的標(biāo)準(zhǔn)做法,能追蹤工程藍(lán)圖從誕生一直到定案的過程。是一種記錄若干文件內(nèi)容變化,以便將來(lái)查閱特定版本修訂情況的系統(tǒng)。
1.3 svn是什么?
SVN(Subversion)是一個(gè)開源的版本管理工具。
svn是基于客戶/服務(wù)器模式:

復(fù)制-修改-合并方案(Subversion默認(rèn)的模式):
在這種模型里,每一個(gè)客戶讀取項(xiàng)目配置庫(kù)建立一個(gè)私有工作副本——版本庫(kù)中文件和目錄的本地映射。用戶并行工作,修改各自的工作副本,最終,各個(gè)私有的復(fù)制合并在一起,成為最終的版本,這種系統(tǒng)通常可以輔助合并操作,但是最終要靠人工去確定正誤。
鎖定-修改-解鎖方案:
在這樣的模型里,在一個(gè)時(shí)間段里配置庫(kù)的一個(gè)文件只允許被一個(gè)人修改。 此模式不適合軟件開發(fā)這種工作。
2 svn服務(wù)端安裝配置
2.1 linux(centos7)下搭建svn服務(wù)器端
- 從普通用戶模式進(jìn)入管理員模式
su
- 安裝svn
yum install subversion -y
檢驗(yàn)是否安裝上了
svnser --version
#(注意是兩個(gè) - )
- 創(chuàng)建倉(cāng)庫(kù)所在文件夾
mkdir /home/svndata/objects
在該文件夾下創(chuàng)建版本庫(kù)
svnadmin create /home/svndata/objects
- 配置SVN
找到SVN配置文件夾
cd /home/svndata/hgd/conf/
成功進(jìn)入后,輸入命令 ls 可以看到該目錄下的文件:authz passwd svnserve.conf
- 配置svnserve.conf
vim svnserve.conf
進(jìn)入文件后 按i進(jìn)行編輯,將下列代碼前的#和空格刪去,直至頂格
anon-access=none
auth-access=write
password-db=password
realm=/home/svndata/objects #該路徑為倉(cāng)庫(kù)路徑
編輯結(jié)束后 按esc退出修改模式 后再輸入:wq,即保存退出
- 配置passwd
vim passwd
密碼文件內(nèi)容如下:
[user]
username = password
格式:用戶名=密碼
修改后同上保存退出
- 配置authz
vim authz
權(quán)限有三種:rw(讀寫)r(只讀)w(只能寫)
[group]
用戶組=成員1,成員2.。。。。
[/]#總權(quán)限
@用戶組 = 權(quán)限
[objects:/]#下級(jí)子倉(cāng)庫(kù)權(quán)限
@用戶組 = 權(quán)限
- 關(guān)閉防火墻
systemtcl stop firewalld.service
關(guān)閉開機(jī)啟動(dòng)
systemctl disable firewalld.service
查看防火墻狀態(tài)
firewall-cmd --state
出現(xiàn)not running就表示關(guān)閉成功了
- 啟動(dòng)SVN
svnserve -d -r /home/svndata/objects
至此svn就可以用了
- 配置SVN的鉤子
進(jìn)入服務(wù)器端倉(cāng)庫(kù)的目錄,會(huì)有hooks目錄。

對(duì)應(yīng)修改post-commit文件就是當(dāng)有提交的時(shí)候自動(dòng)執(zhí)行的鉤子。
例如:
REPOS="$1"
REV="$2"
#DIRS=$(svnlook dirs-changed $REPOS)
#echo $DIRS | grep -c trunk
#touch /usr/local/webserver/nginx/html/index.txt
/usr/bin/svn up --force /home/svndata/scratchFile/hgd/branches/dev --username "admin" --password "xxxxxxxx"
cd /usr/local/webserver/nginx/html
rm -rf ./*
cd /home/svndata/scratchFile/hgd/branches/dev
npm i
gulp dist
cp -R /home/svndata/scratchFile/hgd/branches/dev/dist/* /usr/local/webserver/nginx/html
exit 0
3 TortoiseSVN客戶端
3.1 svn客戶端類型
svn客戶端需要通過網(wǎng)絡(luò)訪問svn服務(wù)端提交文件、查詢文件等,可通過以下客戶端類型訪問svn服務(wù)端:
1、使用Subversion提供的客戶端命令
使用方式:在命令行下輸入命令操作。
2、使用Torotise圖形化界面操作(推薦)
3、使用開發(fā)工具插件操作(推薦)
3.2 下載安裝
TortoiseSVN是Subversion版本控制系統(tǒng)的一個(gè)免費(fèi)開源客戶端,不需要為使用它而付費(fèi)。
TortoiseSVN是 Subversion 的 Windows 擴(kuò)展。它使你避免接觸 Subversion 枯燥而且不方便的 Command Line。它完全嵌入 Windows Explorer,使用時(shí)只需在正常的窗口里右鍵操作就可以了

下載地址:https://tortoisesvn.net/downloads.html, 頁(yè)面里有語(yǔ)言包補(bǔ)丁的下載鏈接。
目前最新版為 1.11.0 下載地址: https://osdn.net/projects/tortoisesvn/storage/1.11.0/

在語(yǔ)言補(bǔ)丁包中我們可以找到中文的補(bǔ)丁并下載下來(lái):

運(yùn)行下載的 TortoiseSVN 安裝程序

運(yùn)行下載的 TortoiseSVN 中文語(yǔ)言包

3.3 修改默認(rèn)語(yǔ)言
修改 TortoiseSVN 默認(rèn)語(yǔ)言
TortoiseSVN 安裝完后默認(rèn)的界面是英文的,我們可以通過設(shè)置修改成已安裝語(yǔ)言

3.4 瀏覽倉(cāng)庫(kù)
使用Tortoise瀏覽svn服務(wù)端的倉(cāng)庫(kù)的內(nèi)容:



4 關(guān)于工作上手
進(jìn)入公司后,第一步就是要獲取公司的源碼快速上手項(xiàng)目。
4.1 獲取用戶名和倉(cāng)庫(kù)地址
可以找老大要一下倉(cāng)庫(kù)的地址,并讓代碼管理員幫忙創(chuàng)建倉(cāng)庫(kù)的賬號(hào)和密碼。
5 TortoiseSVN日常使用
5.1 瀏覽倉(cāng)庫(kù)
Repo-browser : 瀏覽倉(cāng)庫(kù)中資源信息

5.2 導(dǎo)入導(dǎo)出
Export :導(dǎo)出項(xiàng)目 ,和checkout區(qū)別 (checkout檢出后文件,含有.svn隱藏文件夾, 會(huì)和SVN倉(cāng)庫(kù)交互, export導(dǎo)出,沒有.svn隱藏文件夾)

import 將本地資源導(dǎo)入到svn 服務(wù)器

5.3 修改提交

5.3.1 Checkout
檢出項(xiàng)目,復(fù)制項(xiàng)目的副本到本地。
在要檢出的目錄中右鍵:


5.3.2 add
在檢出的目錄中添加文件:

圖標(biāo): 這是一個(gè)新文件
n Add to ignore list :添加到忽略列表 (標(biāo)記該文件不需要版本控制 )

n Add : 標(biāo)記這個(gè)文件添加到服務(wù)器

已經(jīng)標(biāo)記要添加到版本庫(kù)
5.3.3 Commit
當(dāng)檢出目錄或子目錄中內(nèi)容有修改,目錄圖標(biāo)變?yōu)椋?/p>
提交Commit 提交本地修改至svn服務(wù)器:
在檢出目錄或要提交修改的目錄右鍵:


















