aicoder實習svn內部培訓教程

1 svn介紹

都已經用了git,爲何還要介紹svn呢?爲了讓aicoder.com的學員可以掌握多種的源代碼管理工具的使用方法,更快的融入到項目開發中,特整理此文檔。css

1.1 項目管理中的版本控制問題

一般軟件開發由多人協做開發,若是對代碼文件、配置文件、文檔等沒有進行版本控制,將會出現不少問題:html

  • 備份多個版本,佔用磁盤空間大
  • 解決代碼衝突困難
  • 容易引起BUG
  • 難於追溯問題代碼的修改人和修改時間
  • 難於恢復至之前正確版本
  • 沒法進行權限控制
  • 項目版本發佈困難

1.2 什麼是版本控制

版本控制(Revision control)是維護工程藍圖的標準作法,能追蹤工程藍圖從誕生一直到定案的過程。是一種記錄若干文件內容變化,以便未來查閱特定版本修訂狀況的系統。python

1.3 svn是什麼?

SVN(Subversion)是一個開源的版本管理工具。linux

svn是基於客戶/服務器模式:nginx

 
image

複製-修改-合併方案(Subversion默認的模式):git

在這種模型裏,每個客戶讀取項目配置庫創建一個私有工做副本——版本庫中文件和目錄的本地映射。用戶並行工做,修改各自的工做副本,最終,各個私有的複製合併在一塊兒,成爲最終的版本,這種系統一般能夠輔助合併操做,可是最終要靠人工去肯定正誤。web

鎖定-修改-解鎖方案:npm

在這樣的模型裏,在一個時間段裏配置庫的一個文件只容許被一我的修改。 此模式不適合軟件開發這種工做。gulp

2 svn服務端安裝配置

2.1 linux(centos7)下搭建svn服務器端

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

檢驗是否安裝上了vim

svnser --version
#(注意是兩個 - ) 
  1. 建立倉庫所在文件夾
mkdir /home/svndata/objects

在該文件夾下建立版本庫

svnadmin create /home/svndata/objects
  1. 配置SVN

找到SVN配置文件夾

cd /home/svndata/hgd/conf/ 

成功進入後,輸入命令 ls 能夠看到該目錄下的文件:authz passwd svnserve.conf

  • 配置svnserve.conf
vim svnserve.conf 

進入文件後 按i進行編輯,將下列代碼前的#和空格刪去,直至頂格

anon-access=none
auth-access=write
password-db=password
realm=/home/svndata/objects #該路徑爲倉庫路徑 

編輯結束後 按esc退出修改模式 後再輸入:wq,即保存退出

  • 配置passwd
vim passwd

密碼文件內容以下:

[user]
username = password

格式:用戶名=密碼

修改後同上保存退出

  • 配置authz
vim authz

權限有三種:rw(讀寫)r(只讀)w(只能寫)

[group]
用戶組=成員1,成員2.。。。。 [/]#總權限 @用戶組 = 權限 [objects:/]#下級子倉庫權限 @用戶組 = 權限 
  • 關閉防火牆
systemtcl stop firewalld.service 

關閉開機啓動

systemctl disable firewalld.service 

查看防火牆狀態

firewall-cmd --state

出現not running就表示關閉成功了

  1. 啓動SVN
svnserve -d -r /home/svndata/objects

至此svn就能夠用了

  1. 配置SVN的鉤子
    進入服務器端倉庫的目錄,會有hooks目錄。
 
hooks目錄

對應修改post-commit文件就是當有提交的時候自動執行的鉤子。

例如:

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客戶端須要經過網絡訪問svn服務端提交文件、查詢文件等,可經過如下客戶端類型訪問svn服務端:

一、使用Subversion提供的客戶端命令

使用方式:在命令行下輸入命令操做。

二、使用Torotise圖形化界面操做(推薦)

三、使用開發工具插件操做(推薦)

3.2 下載安裝

TortoiseSVN是Subversion版本控制系統的一個免費開源客戶端,不須要爲使用它而付費。

TortoiseSVN是 Subversion 的 Windows 擴展。它使你避免接觸 Subversion 枯燥並且不方便的 Command Line。它徹底嵌入 Windows Explorer,使用時只需在正常的窗口裏右鍵操做就能夠了

 
image

下載地址:https://tortoisesvn.net/downloads.html, 頁面裏有語言包補丁的下載連接。

目前最新版爲 1.11.0 下載地址: https://osdn.net/projects/tortoisesvn/storage/1.11.0/

 

在語言補丁包中咱們能夠找到中文的補丁並下載下來:

 

 
image

運行下載的 TortoiseSVN 安裝程序

 
image

運行下載的 TortoiseSVN 中文語言包

 
image

3.3 修改默認語言

修改 TortoiseSVN 默認語言

TortoiseSVN 安裝完後默認的界面是英文的,咱們能夠經過設置修改爲已安裝語言

 

3.4 瀏覽倉庫

使用Tortoise瀏覽svn服務端的倉庫的內容:

 
image
 
image
 
image

4 關於工做上手

進入公司後,第一步就是要獲取公司的源碼快速上手項目。

4.1 獲取用戶名和倉庫地址

能夠找老大要一下倉庫的地址,並讓代碼管理員幫忙建立倉庫的帳號和密碼。

5 TortoiseSVN平常使用

5.1 瀏覽倉庫

Repo-browser : 瀏覽倉庫中資源信息

 

5.2 導入導出

Export :導出項目 ,和checkout區別 (checkout檢出後文件,含有.svn隱藏文件夾, 會和SVN倉庫交互, export導出,沒有.svn隱藏文件夾)

 
image

import 將本地資源導入到svn 服務器

 
image

5.3 修改提交

 
image

5.3.1 Checkout

檢出項目,複製項目的副本到本地。

在要檢出的目錄中右鍵:

 
image
 
image

5.3.2 add

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

 
image

圖標: 這是一個新文件

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

 
image

n Add : 標記這個文件添加到服務器

 
image

已經標記要添加到版本庫

5.3.3 Commit

當檢出目錄或子目錄中內容有修改,目錄圖標變爲:

提交Commit 提交本地修改至svn服務器:

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

 
 
 

 

 

提交後目錄中的內容與svn服務同步,目錄圖標變爲:

 

5.3.4 update

更新倉庫的文件到本地

在檢出目錄或子目標或文件上右鍵:

 

5.3.4.1 更新到最新版本

 

5.3.4.2 更新到指定版本

 
 

5.3.5 Delete

Delete :刪除版本庫文件

標記刪除後,本地文件刪除,標記刪除後須要提交。

 

5.3.6 恢復

在檢出目錄或子目錄操做會記錄操做日誌,提交前能夠回滾操做。

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

 
 

5.4 衝突處理

兩個客戶端同時修改同一個文件, 改動同一個位置,發生衝突狀況

若是當commit 遇到文件已通過時,說明另外一我的可能改動過 ----- update
 
db.properties 將本地和服務器合併到一塊兒的文件 (不要直接看) db.properties.mine 我本地本身修改後的文件 db.properties.r16 我修改以前的文件 db.properties.r17 別人修改後的文件 
 

手動Merge 後,須要將編輯後衝突文件,標記爲已經解決 , 再進行commit

 

6. 分支管理

6.1 合併動做 merge

假如咱們在 branch 分支中對文件進行了修改或增長了文件,要 merge 回 trunk 目錄中,方法很簡單。以上面的例子來講,咱們在 D:\runoob01\trunk目錄空白處,按下鼠標右鍵,選擇 Merge(合併):

 

這個畫面主要分爲三個部份,前面的 From: 與 To: 是要問您打算從 Branch 中的哪一個版本到哪一個版本,merge 回原來的 trunk 目錄中。所以,From 跟 To 的 URL 字段應當都是指定原來 branch 的目錄下。剩下的就是指定要 merge 的 revision 範圍。以上面的例子而言,咱們從 Branch 的 Revision 7 開始 merge 到 Branch 下面的最新版本。您能夠透過,Dry run 按鈕,試做一次 Merge。這個 merge 只會顯示一些訊息,不會真正的更新到 trunk 的目錄去。只有按下 Merge 按鈕後,纔會真正的將 branch 的檔案與 trunk 的檔案合併起來。

 

若是您確認此次的 merge 沒有問題,您能夠直接使用 commit 來將這兩個被修改的檔案 commit 回 SVN repository 上。若是有問題,您能夠直接修改這兩個檔案,直到確認 ok 了,再行 commit。


6.2 製做 Tag 或是 Release

所謂的 Tag 或是 Release 就是一個特別的版本,由於這個版本可能有特別的意義。例如:這個版本是特別的 Milestone 或是 release 給客戶的版本。其實,Tag 與 Release 的做法與 Branch 徹底相同。只是 Branch 可能會須要 merge 回原來的 trunk 中,而 tag 及 release 大部分都不須要 merge 回 trunk 中。

舉例來講,今天咱們的 trunk 作了一版,這個版本被認定是軟件的 1.0 版。 1.0版對於開發來講是一個很是重要的里程碑。因此咱們要特別爲他作一個標記,亦即 Tag。假設,這個 1.0 版是要正式 release 給客戶或是相關 vendor,咱們要能夠爲他作一個 Release 的標記。基本上,SVN 只有目錄的概念,並無什麼 Tag 的用法。因此您會看到在 SVN 的選單上面,Branch 與 Tag 是同一個項目。以這個 1.0 的例子來講,咱們在 runoob01 目錄下建立 tags 目錄用於存放打 tag 的版本,並提交到版本庫,而後在 Trunk 上面,按下鼠標右鍵,選擇 Branch/Tag 的項目:

 
 

成功的話,您就在對應的 Tag 目錄下面創建了一個 v1.0 的目錄。固然,若是您這時到 Tag 的目錄下面去,會看不到這個目錄,您須要在 Tag 目錄下面 update 一下,才能看到它。

 

6.3分支工做流管理

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

7. svn注意事項

  1. 每次操做必需要有cmmit的消息
  2. 全部的提交以前必須通過嚴格測試,並且必須先獲取最新,而後解決衝突後再提交。
  3. 下班的時候要提交一次代碼(即便沒有完成的代碼,最好註釋掉不能編譯經過的部分,也要提交一次)
  4. 更新的公共代碼後,通知一下小夥伴,一塊兒update一下
  5. commit的消息遵照公司的規範,最好嚴格按照規範走
  6. 公共文件最好獲取lock後再修改,而後儘快釋放lock
  7. 提交頻率最好是一個功能完成後,測試沒有問題大了,就當即提交。

參考

  1. AICODER官網地址:https://www.aicoder.com/
相關文章
相關標籤/搜索