都已經用了git
,爲何還要介紹svn
呢?爲了讓aicoder.com的學員可以掌握多種的源代碼管理工具的使用方法,更快的融入到項目開發中,特整理此文檔。css
一般軟件開發由多人協做開發,若是對代碼文件、配置文件、文檔等沒有進行版本控制,將會出現不少問題:html
版本控制(Revision control)是維護工程藍圖的標準作法,能追蹤工程藍圖從誕生一直到定案的過程。是一種記錄若干文件內容變化,以便未來查閱特定版本修訂狀況的系統。python
SVN(Subversion)是一個開源的版本管理工具。linux
svn是基於客戶/服務器模式:nginx
複製-修改-合併方案(Subversion默認的模式):git
在這種模型裏,每個客戶讀取項目配置庫創建一個私有工做副本——版本庫中文件和目錄的本地映射。用戶並行工做,修改各自的工做副本,最終,各個私有的複製合併在一塊兒,成爲最終的版本,這種系統一般能夠輔助合併操做,可是最終要靠人工去肯定正誤。web
鎖定-修改-解鎖方案:npm
在這樣的模型裏,在一個時間段裏配置庫的一個文件只容許被一我的修改。 此模式不適合軟件開發這種工做。gulp
su
yum install subversion -y
檢驗是否安裝上了vim
svnser --version
#(注意是兩個 - )
mkdir /home/svndata/objects
在該文件夾下建立版本庫
svnadmin create /home/svndata/objects
找到SVN配置文件夾
cd /home/svndata/hgd/conf/
成功進入後,輸入命令 ls 能夠看到該目錄下的文件:authz passwd svnserve.conf
vim svnserve.conf
進入文件後 按i進行編輯,將下列代碼前的#和空格刪去,直至頂格
anon-access=none
auth-access=write
password-db=password
realm=/home/svndata/objects #該路徑爲倉庫路徑
編輯結束後 按esc退出修改模式 後再輸入:wq,即保存退出
vim passwd
密碼文件內容以下:
[user] username = password
格式:用戶名=密碼
修改後同上保存退出
vim authz
權限有三種:rw(讀寫)r(只讀)w(只能寫)
[group]
用戶組=成員1,成員2.。。。。 [/]#總權限 @用戶組 = 權限 [objects:/]#下級子倉庫權限 @用戶組 = 權限
systemtcl stop firewalld.service
關閉開機啓動
systemctl disable firewalld.service
查看防火牆狀態
firewall-cmd --state
出現not running就表示關閉成功了
svnserve -d -r /home/svndata/objects
至此svn就能夠用了
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
svn客戶端須要經過網絡訪問svn服務端提交文件、查詢文件等,可經過如下客戶端類型訪問svn服務端:
一、使用Subversion提供的客戶端命令
使用方式:在命令行下輸入命令操做。
二、使用Torotise圖形化界面操做(推薦)
三、使用開發工具插件操做(推薦)
TortoiseSVN是Subversion版本控制系統的一個免費開源客戶端,不須要爲使用它而付費。
TortoiseSVN是 Subversion 的 Windows 擴展。它使你避免接觸 Subversion 枯燥並且不方便的 Command Line。它徹底嵌入 Windows Explorer,使用時只需在正常的窗口裏右鍵操做就能夠了
下載地址:https://tortoisesvn.net/downloads.html, 頁面裏有語言包補丁的下載連接。
目前最新版爲 1.11.0 下載地址: https://osdn.net/projects/tortoisesvn/storage/1.11.0/
在語言補丁包中咱們能夠找到中文的補丁並下載下來:
運行下載的 TortoiseSVN 安裝程序
運行下載的 TortoiseSVN 中文語言包
修改 TortoiseSVN 默認語言
TortoiseSVN 安裝完後默認的界面是英文的,咱們能夠經過設置修改爲已安裝語言
使用Tortoise瀏覽svn服務端的倉庫的內容:
進入公司後,第一步就是要獲取公司的源碼快速上手項目。
能夠找老大要一下倉庫的地址,並讓代碼管理員幫忙建立倉庫的帳號和密碼。
Repo-browser : 瀏覽倉庫中資源信息
Export :導出項目 ,和checkout區別 (checkout檢出後文件,含有.svn隱藏文件夾, 會和SVN倉庫交互, export導出,沒有.svn隱藏文件夾)
import 將本地資源導入到svn 服務器
檢出項目,複製項目的副本到本地。
在要檢出的目錄中右鍵:
5.3.2 add
在檢出的目錄中添加文件:
圖標: 這是一個新文件
n Add to ignore list :添加到忽略列表 (標記該文件不須要版本控制 )
n Add : 標記這個文件添加到服務器
已經標記要添加到版本庫
當檢出目錄或子目錄中內容有修改,目錄圖標變爲:
提交Commit 提交本地修改至svn服務器:
在檢出目錄或要提交修改的目錄右鍵:
提交後目錄中的內容與svn服務同步,目錄圖標變爲:
更新倉庫的文件到本地
在檢出目錄或子目標或文件上右鍵:
Delete :刪除版本庫文件
標記刪除後,本地文件刪除,標記刪除後須要提交。
在檢出目錄或子目錄操做會記錄操做日誌,提交前能夠回滾操做。
在要回滾的檢出目錄或子目錄中右鍵:
兩個客戶端同時修改同一個文件, 改動同一個位置,發生衝突狀況
若是當commit 遇到文件已通過時,說明另外一我的可能改動過 ----- update
db.properties 將本地和服務器合併到一塊兒的文件 (不要直接看) db.properties.mine 我本地本身修改後的文件 db.properties.r16 我修改以前的文件 db.properties.r17 別人修改後的文件
手動Merge 後,須要將編輯後衝突文件,標記爲已經解決 , 再進行commit
假如咱們在 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。
所謂的 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 一下,才能看到它。
參考老馬的git分支管理教程:https://ke.qq.com/course/368468?tuin=1eb4a0a4