SVN實踐筆記(理論概念)--版本控制

前言

版本控制工具就是記錄項目代碼文件夾和文件的每個改動,併爲每次改動編上序號(也叫版本號),用於存儲,跟蹤文件夾和文件的修改歷史的工具。經過版本控制,能夠恢復文件的舊版本並查看歷史-誰在什麼時間如何進行的修改。html

目前主流的版本控制工具:Git和VSN。本學習筆記是SVN學習筆記,由於我在的公司就用這個。linux

SVN實踐筆記

第一章 對於SVN的一些觀念

1.1 SVN概述

SVN是Subversion的簡稱,是一個開放源代碼的版本控制系統,是用於多我的共同開發同一個項目,共用資源的目的。程序員

版本庫:Subversion使用集中的數據庫,它包含了全部的版本控制文件及其完整歷史。這個數據庫就是版本庫。版本庫一般位於運行 Subversion 服務器的文件服務器上,向 Subversion 客戶端提供須要的數據。sql

工做副本:這是實際工做的地方。每個開發者在本身的電腦上都有屬於本身的工做副本。能夠經過Subversion客戶端將最新的版本從版本庫上取下來,在本地的副本上工做而不影響其餘人,若是對更改滿意就能夠將其提交到版本庫中。數據庫

1.2 SVN工做流程

1.搭建svn服務器:安裝服務器端軟件、建立項目倉庫、啓動倉庫服務apache

2.在我的開發電腦,安裝svn客戶端軟件windows

3.建立項目目錄,經過checkout檢出操做,與svn版本庫創建鏈接,下載全部的代碼服務器

4.平常開發,經過commit提交操做,將本地的修改,提交到svn版本庫svn

5.其餘人提交過代碼,能夠經過update更新操做,將版本庫中最新的代碼(被修改部分)更新到本地。工具

注意:svn服務器的地址 svn://IP , 由服務器搭建服務器的ip地址和相關目錄組成,由搭建者管理

1.3 SVN優點(強項)

1.多人協做開發(解決代碼合併覆蓋問題)

2.版本退回(將一個或多個文件恢復到舊版本)

3.查看修改歷史(日誌),方便把控開發進度

1.4 SVN工做原理

SVN工做原理解析圖

第二章 SVN服務器端經常使用操做之建立倉庫和創建鏈接

2.1 建立 SVN項目(倉庫)

建立svn版本庫命令:svnadmin create "倉庫地址"

在Windows中打開cmd輸入命令執行便可。

執行命令成功後,倉庫地址中建立好相應的倉庫文件夾。

Linux服務器上經過命令行就能建立,而Windows中有時候執行命令會出現錯誤。解決方式有:

1.將svn服務器端安裝目錄設置到環境變量中

2.將svnadmin.exe拖到命令行窗口或者書寫完整路徑,加上 create 「倉庫地址」 執行

2.2 啓動倉庫服務

使用SVN版本庫前要啓動SVN倉庫服務,命令是:svnserve -d -r "倉庫地址"

執行成功後,光標換行並持續閃爍,這叫「掛起」狀態,表示Svn倉庫服務已啓動,不能關掉執行命令的窗口,想要別的操做新窗口操做。

SVN使用的協議是SVN協議,協議地址格式:svn://localhost 指向 倉庫目錄

2.3 設置倉庫的匿名讀寫權限

SVN默認使用匿名用戶,只有讀(read)的權利,只能執行檢出和更新操做。

須要手動設置匿名用戶寫入權限,才能執行提交操做。

配置文件是SVN倉庫目錄中conf目錄下的svnserve.conf文件,在第19-20行有註釋文件,能夠取消註釋,最好本身寫一個,注意這裏不能再語句後寫註釋:anon-access=write

第三章 SVN客戶端經常使用操做

3.1 給倉庫提交程序

個人開發環境是爲Windows,相關操做以下:

1.在本身寫代碼的文件中建立一個工做副本(workspace),建立自定義文件名,進入目錄,鼠標右鍵->svn checkout,打開checkout界面,填寫SVN倉庫地址和工做副本地址提交便可。

2.檢出成果後,工做副本中就會出現.svn隱藏目錄,這是SVN對當前目錄下的文件進行版本控制的,至關於管理員,不能動裏面的內容(禁止修改,刪除)。

3.在工做副本中,開發相應的程序文件(test.html)選中文件,鼠標右鍵->TortoiseSVN ->Add 操做,表示將文件添加到svn版本控制範圍,將文件標記爲已添加狀態,再次選中文件,右鍵-> SVN Commit 打開提交界面,填寫版本說明(日誌),選中要提交的文件,ok便可。

4.成功後版本號自動加1,第一次提交的就是第一個版本。

3.2 經常使用操做指令

1.Checkout檢出指令:

從版本庫檢出倉庫項目文件,通常只在第一次從版本庫下載代碼時執行,通常在一個空目錄中執行。

2.Commit提交指令

將本地的更改提交到版本庫。根據實際狀況進行提交,通常在下班前至少提交一次。

3.Update更新指令:

從版本庫更新最新的文件,通常在上班後先執行一次,或者每次開發一個新的功能前執行一次。

4.Add添加指令:

將一個新增的文件標記爲已添加,會出如今提交列表並默認選中。

3.3 文件和目錄的提交

能夠對文件和目錄單個進行添加和提交操做,也能夠進行批量提交。

提交方式:在最頂層目錄 空白處右鍵->SVN Commit 打開提交界面,手動選中要提交的文件,點擊ok進行提交,提交成功版本號+1

注:提交列表中,只會出現新增的文件目錄或者修改過的文件目錄。

3.4 SVN圖標集

SVN客戶端文件圖標及說明

常規圖標:當本地文件與服務器端文件徹底同步時,系統顯示常規圖標

衝突圖標:若是兩個程序員同時修改同一個文件,系統在上傳時就會顯示衝突圖標

已刪除圖標:服務器文件已刪除,本地就會顯示刪除圖標

增長圖標:文件還未上傳可是已經添加到上傳的隊列中

無版本控制圖標:當前文件是新建的,還未上傳

修改圖標:若是本地文件有修改但未上傳就顯示修改圖標

只讀圖標:服務器端文件若是設置爲只讀,客戶端就顯示只讀圖標

鎖定圖標:若是服務器端文件已鎖定,本地就顯示鎖定圖標

忽略圖標:有的電腦圖標可能不顯示,若是某些文件與項目無關,能夠添加到忽略列表

第四章 SVN使用注意事項

4.1 查看日誌

查看日誌(版本說明):空白處右鍵-> TortoiseSVN ->show log 查看日誌

4.2 忽略文件

忽略文件:在開發過程當中,項目文件夾(工做副本)中,可能會出現一些和項目代碼沒有直接關係的文件,不必添加到svn版本庫中去。能夠對這些文件設置爲忽略文件。

設置方式:選中要忽略的文件 -> 右鍵 -> TortoiseSVN -> add to ignore list 添加到忽略列表,其中四個選項:

文件名.後綴 忽略當前目錄中的指定文件

*.後綴 忽略當前目錄中的指定後綴的全部文件

文件名.後綴(recursively) 忽略當前目錄以及子目錄中的指定文件

*.後綴(recursively) 忽略當前目錄以及子目錄中的指定後綴的全部文件

對某個文件設置爲忽略文件後,其不會出如今提交列表中。設置爲忽略文件以後,通常能夠經過反向操做,取消忽略的設置

選中要忽略的文件 -> 右鍵 -> TortoiseSVN -> remove from ignore list 從忽略列表移除

4.3 版本退回

回退版本:空白處右鍵 -> TortoiseSVN -> update to revision 更新至版本能夠直接輸入版本號,或者點擊show log去選中一個指定版本。

關於版本退回特別說明:

注意:版本回退功能,只是將本地工做副本中的內容,更新到了一個指定版本,svn版本庫中仍是有最新的代碼,除非提交版本退回文件。

版本回退功能,只用於獲取某一個歷史版本的代碼,而且備份用於其餘用途。

不要在版本回退後的歷史版本中直接進行開發。能夠先經過svn update指令更新到最新的代碼,再進行開發。

4.4 版本衝突

多我的同時對同一個文件作修改,而且修改在同一行。前後提交到版本庫時,第一我的提交成功,版本號+1,其餘人提交時,svn會提示必須先更新到最新版本再提交。若是其餘人在本地工做副本進行更新,svn會提示發生了衝突。

衝突的模擬:在本地檢出兩個工做副本,模擬兩我的同時開發。兩個工做副本先都更新最新的版本,而後前後更改代碼並提交。
兩個表現:一是發生衝突的文件中,包含了多個版本的代碼;二是目錄中發生衝突的文件多出來幾個不一樣後綴版本的文件

發生了版本衝突後無法提交文件,必須先解決衝忽然後再提交到版本庫。

處理版本衝突問題通常直接可以區分頭兒和小弟的。由於難且重要。

解決版本衝突的方式:

1.繼續提交本地的修改,使用svn resolve操做,修改發生衝突的文件中的代碼,保留指定的代碼(刪除衝突標記行)。選中發生衝突的文件,右鍵-> TortoiseSVN -> resolve 解決,打開解決衝突界面,選中要解決衝突的文件,點擊ok;將指定的文件設置爲已解決狀態,因衝突產生的多餘的文件都被自動刪除;繼續執行svn commit提交操做便可。

2.放棄本地的修改,使用svn revert操做 將指定文件還原成最新版本,選中發生衝突的文件,右鍵->TortoiseSVN -> revert 還原 打開還原界面,選中要還原的文件,點擊ok, 放棄本地的修改,並將指定文件變爲最新版本,適合用於少許代碼修改;

版本衝突只是發生在本地的工做副本的,版本庫中並無版本衝突,由於有衝突文件沒法提交。

4.5 配置多倉庫

在開發過程當中,一般可能同時開發多個項目,都是用svn來進行管理。每一個項目對應着對應的版本庫。

使用svn客戶端進行檢出操做時,須要使用到svn版本庫的地址svn://ip/目錄,這個地址在啓動svn倉庫服務後,指向了啓動服務時指定的目錄。一個地址只能指向一個目錄。

配置方式:

在啓動svn倉庫服務時,倉庫地址指向多個版本庫的共同的上級目錄(父級目錄)。也就建立倉庫時將svn://ip地址指向共同目錄
#建立項目1倉庫
svnadmin create "共同目錄/項目1"
#啓動SVNserve大目錄
svnserve -d -r "共同目錄"
#從新開一個新命令窗口,不須要啓動SVNserve目錄
svnadmin create "共同目錄/項目2"

命令說明:

1.對於已經在使用的項目1倉庫,須要將倉庫地址從新定位到svn://ip/項目1定位方式 空白處右鍵->TortoiseSVN -> relocate 從新定位點擊ok確認進行從新定位,以後能夠正常使用。

2.對於準備使用的項目2倉庫,檢出時直接使用svn://ip/項目2地址。

注意:檢出操做必須在一個空文件夾中進行。

4.6 權限控制

svn提供了一個可選的權限控制功能,能夠限制用戶的訪問權限。權限控制分爲兩部分:認證(Authentication)和受權(Authorization)

認證文件:鑑別用戶身份,能夠設置用戶名和密碼(passwd)

受權文件:判斷用戶是否具有某種操做(讀寫)的權限(authz)

注意:版本庫的配置文件,只對當前版本庫生效,每一個版本庫都有本身的配置文件。

權限控制設置步驟:去掉註釋,頂格,等於開啓相應權限,不能有任何無關字符
1.修改svnserve.conf,關閉匿名用戶的訪問權限:anon-access=none

2.修改svnserve.conf,開啓認證文件,開啓受權文件:password-db=passwd(開啓認證),authz-db=authz(開啓受權)。

3.修改passwd文件,設置用戶名和密碼

#格式:用戶名=密碼
ak=ak1234
aklman=aklman1234
ahmatbek=ahmatbek1234

4.修改authz文件,設置哪些用戶具備哪些權限:

第一種方式:給指定用戶直接受權;
#1.指定倉庫名稱,若是使用單倉庫,倉庫所在目錄設置爲[/];若是使用了多倉庫,倉庫所在目錄設置爲[項目1:/]
[項目1:/]
#2.格式:用戶名=權限
ak=rw
aklman=r
ahmatbek=rw
第二種方式:對用戶進行分組,對分組統一受權
#1.格式:分組名稱=用戶名1,用戶名2
T5=aklman,ahmatbek
T4=ak,xiaoming
#2.指定倉庫名稱,若是使用單倉庫,倉庫所在目錄設置爲[項目/];若是使用了多倉庫,倉庫所在目錄設置爲[項目1:/]
[項目1:/]
#3.給分組受權
@T5=rw
@T4=r

5.完成以上設置以後,從新在工做副本中,進行svn的相關操做,會提示須要先認證:

填寫正確的用戶名和密碼進行認證,能夠選擇記住認證信息,之後不須要進行重複認證,不然每一次都須要進行認證。

4.7 清除保存的認證信息

保存認證信息後,若是由於一些緣由好比修改了密碼,須要從新進行認證,須要先清除保存的認證信息才能打開認證界面。

清楚方式:空白處右鍵 -> TortoiseSVN -> settings設置 打開設置界面,在左側找到Saved Data點擊,在右方找到Authentication data ,點擊後面的清除按鈕進行清除。

第五章 SVN自動服務器與批量處理執行

5.1 爲何須要自動啓動服務

使用svn倉庫,須要先啓動倉庫服務,必須保持命令行窗口的掛起狀態,若是關閉窗口,則倉庫服務會中止。這種方式不太友好,更好的方式,將svn倉庫服務設置爲開機自啓動的服務。

5.2 建立自動建立服務

建立自啓動服務,經過如下命令實現:

#windows中,1.必須使用管理員身份打開命令行窗口;2.箭頭位置必須放置一個空格,不然建立會失敗
sc create svn binPath= "F:\Subversion\svnserve.exe -r F:\svncangku --service" start= auto
#Linux中,只啓動一次永久有效,除非關掉
sudo svnserve -d -r /home/data/svn/
--service 表示其爲服務項目,start= auto表示電腦開機就自動啓動該服務

建立成功以後,下次重啓電腦,svn倉庫服務會自動啓動(偶爾可能會自動啓動失敗,須要手動啓動),能夠在計算機的服務界面查看相關服務(右鍵計算機-> 管理->服務)。

5.3 批處理指令

1.net start svn 啓動svn服務

2.net stop svn 中止svn服務

3.sc delete svn 刪除svn服務(記住:svn若是須要刪除必須先中止)

能夠經過以上命令在cmd窗口中執行(這些命令也必須以管理員身份打開cmd窗口)

能夠將在cmd命令行執行的命令,保存到一個.bat後綴的文件中,這就是批處理文件;須要執行對應命令時,直接運行對應的批處理文件。如:開啓

net start svn
須要開啓svn服務時,直接以管理員身份運行svnstart.bat便可。

第六章 鉤子程序同步代碼

6.1 鉤子程序原理

當項目開發到必定階段,部署到另一臺服務器的apache下運行後。若是繼續對項目進行開發,將新的代碼提交到版本庫,另外服務器的apache下的代碼,須要執行svn更新操做,才能獲得最新的代碼。

爲此Svn提供了一個鉤子程序同步代碼的功能,能夠經過一些設置,每當svn版本庫中有更新,則在指定服務器apache項目目錄中自動執行svn update命令。

SVN之鉤子程序原理

6.2 使用同步鉤子(post-commit)程序

使用同步鉤子的步驟:

1.在服務器端apache下建立一個文件夾用於接收同步數據

2.在本地和服務器端同時檢出或者更新svn倉庫最新數據

3.打開服務器的項目1倉庫,找到hooks鉤子目錄,新建post-commit.bat批處理文件,而後輸出以下代碼

#SET SVN=」F:\Subversion\svn.exe」  設置svn指令目錄
#SET DIR=」F:\workspace\online」  設置須要同步的目錄
#SVN update %DIR% --username username --password password  使用update指令更新數據到同步目錄

SET SVN="F:\Subversion\svn.exe"
SET DIR="F:\workspace\online"
SVN update %DIR% --username aklman --password aklman1234

參考資料

版本控制筆記

相關文章
相關標籤/搜索