版本控制工具就是記錄項目代碼文件夾和文件的每個改動,併爲每次改動編上序號(也叫版本號),用於存儲,跟蹤文件夾和文件的修改歷史的工具。經過版本控制,能夠恢復文件的舊版本並查看歷史-誰在什麼時間如何進行的修改。html
目前主流的版本控制工具:Git和VSN。本學習筆記是SVN學習筆記,由於我在的公司就用這個。linux
SVN是Subversion的簡稱,是一個開放源代碼的版本控制系統,是用於多我的共同開發同一個項目,共用資源的目的。程序員
版本庫:Subversion使用集中的數據庫,它包含了全部的版本控制文件及其完整歷史。這個數據庫就是版本庫。版本庫一般位於運行 Subversion 服務器的文件服務器上,向 Subversion 客戶端提供須要的數據。sql
工做副本:這是實際工做的地方。每個開發者在本身的電腦上都有屬於本身的工做副本。能夠經過Subversion客戶端將最新的版本從版本庫上取下來,在本地的副本上工做而不影響其餘人,若是對更改滿意就能夠將其提交到版本庫中。數據庫
1.搭建svn服務器:安裝服務器端軟件、建立項目倉庫、啓動倉庫服務apache
2.在我的開發電腦,安裝svn客戶端軟件windows
3.建立項目目錄,經過checkout檢出操做,與svn版本庫創建鏈接,下載全部的代碼服務器
4.平常開發,經過commit提交操做,將本地的修改,提交到svn版本庫svn
5.其餘人提交過代碼,能夠經過update更新操做,將版本庫中最新的代碼(被修改部分)更新到本地。工具
注意:svn服務器的地址 svn://IP , 由服務器搭建服務器的ip地址和相關目錄組成,由搭建者管理
1.多人協做開發(解決代碼合併覆蓋問題)
2.版本退回(將一個或多個文件恢復到舊版本)
3.查看修改歷史(日誌),方便把控開發進度
建立svn版本庫命令:svnadmin create "倉庫地址"
在Windows中打開cmd輸入命令執行便可。
執行命令成功後,倉庫地址中建立好相應的倉庫文件夾。
Linux服務器上經過命令行就能建立,而Windows中有時候執行命令會出現錯誤。解決方式有:
1.將svn服務器端安裝目錄設置到環境變量中2.將svnadmin.exe拖到命令行窗口或者書寫完整路徑,加上 create 「倉庫地址」 執行
使用SVN版本庫前要啓動SVN倉庫服務,命令是:svnserve -d -r "倉庫地址"
執行成功後,光標換行並持續閃爍,這叫「掛起」狀態,表示Svn倉庫服務已啓動,不能關掉執行命令的窗口,想要別的操做新窗口操做。
SVN使用的協議是SVN協議,協議地址格式:svn://localhost 指向 倉庫目錄
SVN默認使用匿名用戶,只有讀(read)的權利,只能執行檢出和更新操做。
須要手動設置匿名用戶寫入權限,才能執行提交操做。
配置文件是SVN倉庫目錄中conf目錄下的svnserve.conf文件,在第19-20行有註釋文件,能夠取消註釋,最好本身寫一個,注意這裏不能再語句後寫註釋:anon-access=write
個人開發環境是爲Windows,相關操做以下:1.在本身寫代碼的文件中建立一個工做副本(workspace),建立自定義文件名,進入目錄,鼠標右鍵->svn checkout,打開checkout界面,填寫SVN倉庫地址和工做副本地址提交便可。
2.檢出成果後,工做副本中就會出現.svn隱藏目錄,這是SVN對當前目錄下的文件進行版本控制的,至關於管理員,不能動裏面的內容(禁止修改,刪除)。
3.在工做副本中,開發相應的程序文件(test.html)選中文件,鼠標右鍵->TortoiseSVN ->Add 操做,表示將文件添加到svn版本控制範圍,將文件標記爲已添加狀態,再次選中文件,右鍵-> SVN Commit 打開提交界面,填寫版本說明(日誌),選中要提交的文件,ok便可。
4.成功後版本號自動加1,第一次提交的就是第一個版本。
1.Checkout檢出指令:
從版本庫檢出倉庫項目文件,通常只在第一次從版本庫下載代碼時執行,通常在一個空目錄中執行。
2.Commit提交指令
將本地的更改提交到版本庫。根據實際狀況進行提交,通常在下班前至少提交一次。
3.Update更新指令:
從版本庫更新最新的文件,通常在上班後先執行一次,或者每次開發一個新的功能前執行一次。
4.Add添加指令:
將一個新增的文件標記爲已添加,會出如今提交列表並默認選中。
能夠對文件和目錄單個進行添加和提交操做,也能夠進行批量提交。
提交方式:在最頂層目錄 空白處右鍵->SVN Commit 打開提交界面,手動選中要提交的文件,點擊ok進行提交,提交成功版本號+1注:提交列表中,只會出現新增的文件目錄或者修改過的文件目錄。
常規圖標:當本地文件與服務器端文件徹底同步時,系統顯示常規圖標衝突圖標:若是兩個程序員同時修改同一個文件,系統在上傳時就會顯示衝突圖標
已刪除圖標:服務器文件已刪除,本地就會顯示刪除圖標
增長圖標:文件還未上傳可是已經添加到上傳的隊列中
無版本控制圖標:當前文件是新建的,還未上傳
修改圖標:若是本地文件有修改但未上傳就顯示修改圖標
只讀圖標:服務器端文件若是設置爲只讀,客戶端就顯示只讀圖標
鎖定圖標:若是服務器端文件已鎖定,本地就顯示鎖定圖標
忽略圖標:有的電腦圖標可能不顯示,若是某些文件與項目無關,能夠添加到忽略列表
查看日誌(版本說明):空白處右鍵-> TortoiseSVN ->show log 查看日誌
忽略文件:在開發過程當中,項目文件夾(工做副本)中,可能會出現一些和項目代碼沒有直接關係的文件,不必添加到svn版本庫中去。能夠對這些文件設置爲忽略文件。
設置方式:選中要忽略的文件 -> 右鍵 -> TortoiseSVN -> add to ignore list 添加到忽略列表,其中四個選項:文件名.後綴 忽略當前目錄中的指定文件
*.後綴 忽略當前目錄中的指定後綴的全部文件
文件名.後綴(recursively) 忽略當前目錄以及子目錄中的指定文件
*.後綴(recursively) 忽略當前目錄以及子目錄中的指定後綴的全部文件
對某個文件設置爲忽略文件後,其不會出如今提交列表中。設置爲忽略文件以後,通常能夠經過反向操做,取消忽略的設置
選中要忽略的文件 -> 右鍵 -> TortoiseSVN -> remove from ignore list 從忽略列表移除
回退版本:空白處右鍵 -> TortoiseSVN -> update to revision 更新至版本能夠直接輸入版本號,或者點擊show log去選中一個指定版本。
關於版本退回特別說明:
注意:版本回退功能,只是將本地工做副本中的內容,更新到了一個指定版本,svn版本庫中仍是有最新的代碼,除非提交版本退回文件。版本回退功能,只用於獲取某一個歷史版本的代碼,而且備份用於其餘用途。
不要在版本回退後的歷史版本中直接進行開發。能夠先經過svn update指令更新到最新的代碼,再進行開發。
多我的同時對同一個文件作修改,而且修改在同一行。前後提交到版本庫時,第一我的提交成功,版本號+1,其餘人提交時,svn會提示必須先更新到最新版本再提交。若是其餘人在本地工做副本進行更新,svn會提示發生了衝突。
衝突的模擬:在本地檢出兩個工做副本,模擬兩我的同時開發。兩個工做副本先都更新最新的版本,而後前後更改代碼並提交。
兩個表現:一是發生衝突的文件中,包含了多個版本的代碼;二是目錄中發生衝突的文件多出來幾個不一樣後綴版本的文件
發生了版本衝突後無法提交文件,必須先解決衝忽然後再提交到版本庫。
處理版本衝突問題通常直接可以區分頭兒和小弟的。由於難且重要。
解決版本衝突的方式:
1.繼續提交本地的修改,使用svn resolve操做,修改發生衝突的文件中的代碼,保留指定的代碼(刪除衝突標記行)。選中發生衝突的文件,右鍵-> TortoiseSVN -> resolve 解決,打開解決衝突界面,選中要解決衝突的文件,點擊ok;將指定的文件設置爲已解決狀態,因衝突產生的多餘的文件都被自動刪除;繼續執行svn commit提交操做便可。2.放棄本地的修改,使用svn revert操做 將指定文件還原成最新版本,選中發生衝突的文件,右鍵->TortoiseSVN -> revert 還原 打開還原界面,選中要還原的文件,點擊ok, 放棄本地的修改,並將指定文件變爲最新版本,適合用於少許代碼修改;
版本衝突只是發生在本地的工做副本的,版本庫中並無版本衝突,由於有衝突文件沒法提交。
在開發過程當中,一般可能同時開發多個項目,都是用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地址。
注意:檢出操做必須在一個空文件夾中進行。
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的相關操做,會提示須要先認證:
填寫正確的用戶名和密碼進行認證,能夠選擇記住認證信息,之後不須要進行重複認證,不然每一次都須要進行認證。
保存認證信息後,若是由於一些緣由好比修改了密碼,須要從新進行認證,須要先清除保存的認證信息才能打開認證界面。
清楚方式:空白處右鍵 -> TortoiseSVN -> settings設置 打開設置界面,在左側找到Saved Data點擊,在右方找到Authentication data ,點擊後面的清除按鈕進行清除。
使用svn倉庫,須要先啓動倉庫服務,必須保持命令行窗口的掛起狀態,若是關閉窗口,則倉庫服務會中止。這種方式不太友好,更好的方式,將svn倉庫服務設置爲開機自啓動的服務。
建立自啓動服務,經過如下命令實現:
#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倉庫服務會自動啓動(偶爾可能會自動啓動失敗,須要手動啓動),能夠在計算機的服務界面查看相關服務(右鍵計算機-> 管理->服務)。
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便可。
當項目開發到必定階段,部署到另一臺服務器的apache下運行後。若是繼續對項目進行開發,將新的代碼提交到版本庫,另外服務器的apache下的代碼,須要執行svn更新操做,才能獲得最新的代碼。爲此Svn提供了一個鉤子程序同步代碼的功能,能夠經過一些設置,每當svn版本庫中有更新,則在指定服務器apache項目目錄中自動執行svn update命令。
使用同步鉤子的步驟:
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