aicoder實(shí)習(xí)svn內(nèi)部培訓(xùn)教程

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ù)器模式:

image

復(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ù)器端

  1. 從普通用戶模式進(jìn)入管理員模式
su
  1. 安裝svn
yum install subversion -y

檢驗(yàn)是否安裝上了

svnser --version
#(注意是兩個(gè) - )
  1. 創(chuàng)建倉(cāng)庫(kù)所在文件夾
mkdir /home/svndata/objects

在該文件夾下創(chuàng)建版本庫(kù)

svnadmin create /home/svndata/objects
  1. 配置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)閉成功了

  1. 啟動(dòng)SVN
svnserve -d -r /home/svndata/objects

至此svn就可以用了

  1. 配置SVN的鉤子
    進(jìn)入服務(wù)器端倉(cāng)庫(kù)的目錄,會(huì)有hooks目錄。
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í)只需在正常的窗口里右鍵操作就可以了

image

下載地址: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):


image

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

image

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

image

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)容:

image
image
image

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隱藏文件夾)

image

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

image

5.3 修改提交

image

5.3.1 Checkout

檢出項(xiàng)目,復(fù)制項(xiàng)目的副本到本地。

在要檢出的目錄中右鍵:

image
image

5.3.2 add

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

image

圖標(biāo): 這是一個(gè)新文件

n Add to ignore list :添加到忽略列表 (標(biāo)記該文件不需要版本控制 )

image

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

image

已經(jīng)標(biāo)記要添加到版本庫(kù)

5.3.3 Commit

當(dāng)檢出目錄或子目錄中內(nèi)容有修改,目錄圖標(biāo)變?yōu)椋?/p>

提交Commit 提交本地修改至svn服務(wù)器:

在檢出目錄或要提交修改的目錄右鍵:

提交后目錄中的內(nèi)容與svn服務(wù)同步,目錄圖標(biāo)變?yōu)椋?div id="u0z1t8os" class="image-package">

5.3.4 update

更新倉(cāng)庫(kù)的文件到本地

在檢出目錄或子目標(biāo)或文件上右鍵:

5.3.4.1 更新到最新版本

5.3.4.2 更新到指定版本

5.3.5 Delete

Delete :刪除版本庫(kù)文件

標(biāo)記刪除后,本地文件刪除,標(biāo)記刪除后需要提交。

5.3.6 恢復(fù)

在檢出目錄或子目錄操作會(huì)記錄操作日志,提交前可以回滾操作。

在要回滾的檢出目錄或子目錄中右鍵:

5.4 沖突處理

兩個(gè)客戶端同時(shí)修改同一個(gè)文件, 改動(dòng)同一個(gè)位置,發(fā)生沖突情況

     如果當(dāng)commit 遇到文件已經(jīng)過時(shí),說(shuō)明另一個(gè)人可能改動(dòng)過 ----- update
     db.properties 將本地和服務(wù)器合并到一起的文件 (不要直接看)

     db.properties.mine 我本地自己修改后的文件

     db.properties.r16 我修改之前的文件

     db.properties.r17 別人修改后的文件

手動(dòng)Merge 后,需要將編輯后沖突文件,標(biāo)記為已經(jīng)解決 , 再進(jìn)行commit

6. 分支管理

6.1 合并動(dòng)作 merge

假如我們?cè)?branch 分支中對(duì)文件進(jìn)行了修改或增加了文件,要 merge 回 trunk 目錄中,方法很簡(jiǎn)單。以上面的例子來(lái)說(shuō),我們?cè)?D:\runoob01\trunk目錄空白處,按下鼠標(biāo)右鍵,選擇 Merge(合并):

這個(gè)畫面主要分為三個(gè)部份,前面的 From: 與 To: 是要問您打算從 Branch 中的哪個(gè)版本到哪個(gè)版本,merge 回原來(lái)的 trunk 目錄中。因此,F(xiàn)rom 跟 To 的 URL 字段應(yīng)當(dāng)都是指定原來(lái) branch 的目錄下。剩下的就是指定要 merge 的 revision 范圍。以上面的例子而言,我們從 Branch 的 Revision 7 開始 merge 到 Branch 下面的最新版本。您可以透過,Dry run 按鈕,試作一次 Merge。這個(gè) merge 只會(huì)顯示一些訊息,不會(huì)真正的更新到 trunk 的目錄去。只有按下 Merge 按鈕后,才會(huì)真正的將 branch 的檔案與 trunk 的檔案合并起來(lái)。

如果您確認(rèn)這次的 merge 沒有問題,您可以直接使用 commit 來(lái)將這兩個(gè)被修改的檔案 commit 回 SVN repository 上。如果有問題,您可以直接修改這兩個(gè)檔案,直到確認(rèn) ok 了,再行 commit。


6.2 制作 Tag 或是 Release

所謂的 Tag 或是 Release 就是一個(gè)特別的版本,因?yàn)檫@個(gè)版本可能有特別的意義。例如:這個(gè)版本是特別的 Milestone 或是 release 給客戶的版本。其實(shí),Tag 與 Release 的作法與 Branch 完全相同。只是 Branch 可能會(huì)需要 merge 回原來(lái)的 trunk 中,而 tag 及 release 大部分都不需要 merge 回 trunk 中。

舉例來(lái)說(shuō),今天我們的 trunk 做了一版,這個(gè)版本被認(rèn)定是軟件的 1.0 版。 1.0版對(duì)于開發(fā)來(lái)說(shuō)是一個(gè)非常重要的里程碑。所以我們要特別為他做一個(gè)標(biāo)記,亦即 Tag。假設(shè),這個(gè) 1.0 版是要正式 release 給客戶或是相關(guān) vendor,我們要可以為他做一個(gè) Release 的標(biāo)記?;旧?,SVN 只有目錄的概念,并沒有什么 Tag 的用法。所以您會(huì)看到在 SVN 的選單上面,Branch 與 Tag 是同一個(gè)項(xiàng)目。以這個(gè) 1.0 的例子來(lái)說(shuō),我們?cè)?runoob01 目錄下創(chuàng)建 tags 目錄用于存放打 tag 的版本,并提交到版本庫(kù),然后在 Trunk 上面,按下鼠標(biāo)右鍵,選擇 Branch/Tag 的項(xiàng)目:

成功的話,您就在對(duì)應(yīng)的 Tag 目錄下面建立了一個(gè) v1.0 的目錄。當(dāng)然,如果您這時(shí)到 Tag 的目錄下面去,會(huì)看不到這個(gè)目錄,您需要在 Tag 目錄下面 update 一下,才能看到它。

6.3分支工作流管理

參考老馬的git分支管理教程:https://ke.qq.com/course/368468?tuin=1eb4a0a4

7. svn注意事項(xiàng)

  1. 每次操作必須要有cmmit的消息
  2. 所有的提交之前必須經(jīng)過嚴(yán)格測(cè)試,而且必須先獲取最新,然后解決沖突后再提交。
  3. 下班的時(shí)候要提交一次代碼(即使沒有完成的代碼,最好注釋掉不能編譯通過的部分,也要提交一次)
  4. 更新的公共代碼后,通知一下小伙伴,一起update一下
  5. commit的消息遵守公司的規(guī)范,最好嚴(yán)格按照規(guī)范走
  6. 公共文件最好獲取lock后再修改,然后盡快釋放lock
  7. 提交頻率最好是一個(gè)功能完成后,測(cè)試沒有問題大了,就立即提交。

參考

  1. AICODER官網(wǎng)地址:https://www.aicoder.com/
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容