SVN 使用簡介及個人總結
SVN 如何來進行多人協作開發? 在實際工作中,通常是一個小組或者一個團隊一起開發同一個專案,不同的人開發不同的功能模組,有一個公共的地方存放專案程式碼。 如果多個人同時對同一個檔案做了修改,比如按照分工,兩個人分別做文章模組的增刪改查功能,需要操作同一個檔案article控制器,如果大家同時完成工作並提交程式碼,會出現一個程式碼覆蓋的問題。
解決辦法: ①合理分配工作任務 ②合理分配工作時間 以上兩種思路都有一定的侷限性。 今天要學習的svn就是用來解決多人協作開發的問題。
一、SVN概述 1、什麼是SVN SVN是Subversion的簡稱,是一個開放原始碼的版本控制系統,是用於多個人共同開發同一個專案,共用資源的目的。
所謂的版本控制,就是記錄專案程式碼資料夾和檔案的每一次改動,併為每次改動編上序號,也叫做版本號,用於儲存、追蹤資料夾和檔案的修改歷史。
通過版本控制軟體,我們可以對專案程式碼的修改歷史進行檢視,或者直接把程式碼恢復到以前的一個版本程式碼。 2、同類型產品 vss版本控制軟體:visual source safe,微軟公司開發的基於Windows平臺的版本控制軟體,入門簡單,微軟不再對VSS提供技術支援。 cvs版本控制軟體:出現比較早的版本控制軟體,由於穩定性不是很好,現在基本被替代。 svn版本控制軟體:簡單、入門容易、國內使用量多,目前主流的版本控制軟體。 git版本控制軟體:也是使用量比較多的一個版本控制軟體 3、使用SVN的好處 ①協作開發 ②版本回退 ③檢視專案程式碼修改歷史(領導可以掌控專案的開發進度) 4、SVN執行流程(理解) ①搭建svn伺服器,安裝svn伺服器端軟體 ②在svn伺服器建立專案資料夾(在svn中叫做倉庫) ③在開發電腦上安裝svn客戶端軟體 ④和svn伺服器建立聯絡(checkout檢出操作) 檢出操作完成了兩件事:一和伺服器建立聯絡 二從svn伺服器的倉庫下載程式碼 ⑤開發經理寫初始版本的核心程式碼 ⑥通過提交操作(commit)把程式碼提交到svn倉庫 ⑦開發經理會把svn伺服器倉庫的地址給到程式設計師,這個地址是svn協議的地址 svn://ip地址或者svn://localhost ⑧程式設計師在自己電腦安裝svn客戶端軟體 ⑨程式設計師通過svn的地址從svn倉庫下載程式碼 ⑩開發自己的功能模組的程式碼,需要把程式碼提交到svn倉庫 ⑪開發經理從svn倉庫更新程式碼(update),檢視程式碼。 以上流程涉及了三個svn操作:checkout檢出,commit提交, update更新。
二、SVN軟體的下載和安裝 1、服務端與客戶端軟體的下載 服務端軟體(Subversion) 客戶端軟體(TortoiseSVN) ①服務端軟體下載地址:https://www.collab.net/downloads/subversion 注:服務端軟體下載需要先註冊登入
下載之後得到下列軟體之一:
下載之後得到下列軟體之一:
2、安裝服務端軟體
安裝軟體,以64位軟體為例:
①雙擊軟體開啟以下介面。
②點選Next下一步,兩次Next之後開啟以下介面。
建議:路徑中儘量避免出現空格和中文字元,在以後使用命令時有可能引出問題
③確認安裝路徑,點選Install安裝,進入以下介面,等待進度完成。
④安裝進度完成自動進入以下介面,點選Finish完成安裝即可,介面關閉。
3、安裝客戶端軟體(重要)
安裝軟體,以64位軟體為例:
①雙擊軟體開啟以下介面。
②點選Next下一步,兩次Next之後進入以下介面。
③確認安裝路徑,點選Next下一步,繼續點選Install安裝,進入以下介面,等待進度完成。
④安裝進度完成自動進入以下介面,點選Finish完成安裝即可,介面關閉。
⑤客戶端軟體安裝完成,在桌面右鍵選單可以看到 svn checkout選項和TortoiseSVN選項,如果沒有出現,可能需要重啟電腦。
4、中文語言包的安裝下載
下載地址:
我們選擇下載簡體中文語言包,下載對應的32位或64位安裝軟體。 下載之後得到下列軟體之一: 雙擊軟體,點選next下一步,就會自動安裝完成。 安裝完成之後,一般會自動應用中文,如果沒有自動使用中文,需要開啟設定頁面進行設定: 桌面或空白處 右鍵選單->TortoiseSVN->settings 開啟設定頁面如下: 根據圖示可修改軟體使用的語言包。 注意:如果要解除安裝軟體重新安裝,需要通過軟體管家或者控制面板的程式與功能,完整的解除安裝軟體。直接刪除安裝目錄的方式不可行。
三、服務端建立倉庫與建立連線 1、建立一個SVN專案(倉庫)服務端通常使用命令列模式操作。 建立svn倉庫命令:svnadmin create“倉庫地址”示例:svnadmin create“F:\svncangku\blog” 這裡先在F盤新建svncangku目錄,然後開啟命令列視窗執行命令建立blog倉庫。
注意事項: ①倉庫地址建議加上雙引號,避免路徑中有空格產生錯誤。 ②如果直接使用svnadmin 命令報錯,提示“不是一個內部或外部命令”,有兩種解決方式: 第一是直接執行svnadmin.exe可執行檔案,第二配置環境變數。 ③svnadmin 命令本身對應一個可執行檔案svnadmin.exe,可以拖拽到命令列直接執行。 svnadmin.exe可執行檔案在svn服務端軟體安裝目錄中。其位置及執行方式參考下圖: 2、啟動倉庫服務 要使用svn倉庫,必須先啟動svn倉庫服務。比如使用apache也需要先啟動apache服務。 如果在以後的使用中,出現以下錯誤,就是由於svn服務沒有開啟。 在命令列模式下執行以下命令啟動倉庫服務:svnserve -d[啟動模式] -r[倉庫地址] “倉庫地址” 示例:svnserve -d -r“F:\svncangku\blog” 執行完成之後:會發現游標換行,持續閃爍,這代表執行成功 注意:啟動倉庫服務之後,這個命令列視窗需要保持開啟(掛起)狀態。 如果關閉視窗,倉庫服務也會關閉。如果要執行其他命令,再重新開啟一個新的命令列視窗。 在啟動倉庫服務之後,會有一個svn協議的地址svn://localhost或者svn://IP地址,指向我們啟動服務時使用的倉庫地址。示例:svn://localhost -> F:\svncangku\blog 。 這類似於使用apache時,http://localhost指向一個目錄。 後續使用svn倉庫時,我們需要使用svn://localhost這個svn協議的地址代表倉庫地址。 四、客戶端使用svn(重點) 1、從svn倉庫檢出程式碼在工作目錄(這裡為F:\workspace\blog),在空白處右鍵選單->SVN checkout開啟檢出介面
點選ok檢出
第一次檢出成功,會在工作目錄中出現一個.svn的隱藏目錄注:這個目錄充當svn軟體管理當前目錄下的檔案和資料夾的一個“管理員”角色 不要輕易刪除或者修改裡面的東西 2、給svn倉庫提交第一個程式檔案 ①首先在工作目錄新建程式檔案 ②選中檔案,右鍵TortoiseSVN -> add操作,點選把要提交的檔案,新增到svn的提交列表 ③再次選中檔案,右鍵點選SVN commit操作 ④在開啟的提交頁面中填寫相關資訊 ④點選ok完成提交 3、設定倉庫的寫許可權 在第一次向倉庫提交操作時,會提示沒有操作許可權 說明:倉庫建立後,預設只有讀許可權,沒有寫許可權(沒有提交的許可權) 在倉庫目錄中conf目錄下:svnserve.conf主配置檔案 開啟這個檔案: 給匿名使用者設定寫許可權 重新完成提交操作 3、常用指令 Checkout檢出指令:第一次和svn倉庫取得聯絡時,下載倉庫中所有的程式碼到本地,一般只需要執行一次。 Commit提交指令:每次修改了檔案後,都要執行一次提交操作。按照需要每隔一段時間執行一次。 Update更新指令:把倉庫的最新部分程式碼更新到本地。每次提交之前或者每次開始工作之前需要執行。 Add新增指令:把要提交的檔案新增到提交列表(針對新增的檔案)。 4、檔案和目錄的提交 通常要提交的是多個檔案和目錄的整體 提交方式: ①按照提交第一個檔案的方式,一個一個提交(操作麻煩) ②在工作目錄空白處右鍵->svn commit 開啟提交頁面,手動選中要提交的檔案,進行提交
點選ok進行提交:
③對於新增的目錄下的新增的檔案,不能直接執行add操作和commit操作,右鍵選單沒有相關選項,解決辦法:到上一級目錄:通過批量提交的方式,在空白處右鍵svn commit進行提交 點選ok進行提交 5、svn圖示集 1)常規圖示:當本地檔案與伺服器端檔案完全同步時,系統顯示常規圖示 2)衝突圖示:如果兩個程式設計師同時修改同一個檔案,系統在上傳時就會顯示衝突圖示 3)已刪除圖示:伺服器檔案已刪除,本地就會顯示刪除圖示 4)增加圖示:檔案還未上傳但是已經新增到上傳的佇列中 5)無版本控制圖示:當前檔案是新建的,還未上傳 6)修改圖示:如果本地檔案有修改但未上傳就顯示修改圖示 7)只讀圖示:伺服器端檔案如果設定為只讀,客戶端就顯示只讀圖示 8)鎖定圖示:如果伺服器端檔案已鎖定,本地就顯示鎖定圖示 9)忽略圖示:有的電腦圖示可能不顯示,如果某些檔案與專案無關,可以新增到忽略列表
常用的: 常規圖示、衝突圖示、增加圖示、修改圖示 說明:這些圖示只是一個輔助功能,用作參考。
五、SVN使用細節 目錄關係:
1、SVN中的儲存機制(瞭解) Svn中有一種特有的儲存機制,叫差異儲存,每個版本只儲存與上一個版本有差異的地方。
在svn倉庫中看不到原始的程式碼檔案就是因為差異儲存的原因。 在倉庫目錄blog下的db目錄中,有存放每個版本的具體資訊的目錄:revprops和 revs
比如記錄日誌資訊的目錄中:
2、忽略檔案 有的時候,我們在工作目錄中存放了一些與專案程式碼沒有直接關係的參考檔案,這些檔案不需要提交到svn倉庫進行管理,所以可以設定為忽略檔案,避免它們出現在提交列表中,干擾我們的操作。 操作方式:右鍵->TortoiseSVN -> add to ignore list新增到忽略列表, 有四個選項:
設計.psd 選中這一項忽略當前檔案 *.psd 選中這一項忽略當前目錄下字尾為.psd的所有檔案 設計.psd(recursively) recursively是遞迴的意思,忽略掉所有目錄中的該名稱的檔案 *.psd(recursively) 忽略所有目錄中的.psd字尾的檔案
反向操作(取消忽略):右鍵->TortoiseSVN -> remove from ignore list從忽略列表移除 3、版本回退(重點) 檢視專案程式碼的提交歷史日誌資訊:右鍵->TortoiseSVN -> show log
版本回退的操作方式: 右鍵 -> TortoiseSVN -> update to revision
可以手動設定版本號:選中Revision,在輸入框填寫版本號 也可以點選Show log 選中一個版本,自動填入版本號 設定好要回退的版本號,點選ok進行版本回退。 回退到歷史版本後,右鍵 -> SVN Update可以回到最新版本。 注意:版本回退功能僅用於檢視歷史版本程式碼或者獲取歷史版本程式碼,不能回退到歷史版本後直接在歷史版本基礎上繼續開發。 版本回退之後,如果在歷史版本中修改檔案程式碼,然後提交,會提示錯誤,檔案過期,需要先更新到最新版本再提交。更新時又可能會引起衝突。 比如: 在版本3基礎上,先修改一下Application.class.php,寫一些程式碼並提交
提交:
提交後版本為4號
通過版本回退功能,回到3號版本
然後重新修改Application.class.php
直接進行提交操作
點選ok提示我們要更新程式碼
更新之後,會有衝突的提示:
總結:在版本回退之後,不要在歷史版本中修改程式碼。要先更新到最新版本,然後寫程式碼後再提交。 4、版本衝突 版本衝突:如果多個人對同一個檔案做了修改,然後同時提交,後提交的人會發生程式碼覆蓋的問題,這在svn中就叫“版本衝突”。 發生版本衝突,本質還是因為後提交的人,其提交程式碼時程式碼的版本不是最新的,也就是其在一個歷史版本提交了程式碼,引起了版本衝突。 這個衝突不是直接發生在svn倉庫,是發生在提交者本地的程式碼。svn提示後提交的人需要先更新svn倉庫中的最新版本程式碼,然後其本地的程式碼就會有衝突提示。 衝突的表現: ①檔案上出現衝突圖示,檔案下方出現一些新的檔案
②檔案中的程式碼有變化,裡面有多個版本的程式碼 程式碼中衝突的部分會出現很多標記,每個標記之間的程式碼分別是不同版本的程式碼。
說明:這裡變化的這部分程式碼是發生衝突的程式碼,如果檔案中有其他不受衝突影響的程式碼,會正常的顯示,我們要處理的只是其中發生衝突的部分。強調:發生衝突之後,一定要解決衝突,再提交。 處理衝突的方式: **①根據需要,處理檔案中的程式碼,保留最終需要留下並提交的程式碼
②選中衝突的檔案,右鍵->TortoiseSVN -> resolve解決衝突,這個操作是標記檔案,表示這個衝突已經被處理,程式碼可以直接提交了。操作之後會自動把衝突產生的多餘檔案刪除。**
注:衝突是發生在客戶端本地的,版本回退也是在本地回退,svn倉庫中的程式碼是不受影響的,各個版本在svn倉庫中都還是存在的。 衝突處理完成,進行提交操作。
提交成功:
5、配置多倉庫 在工作中,通常我們要同時開發多個專案,比如一個blog部落格,一個shop商城,都需要使用svn來管理,這裡需要新建一個倉庫shop
在工作目錄shop中直接進行檢出checkout操作,發現得到的是blog倉庫的程式碼,並不是shop倉庫的程式碼 即使重新開啟一次倉庫服務,想把svn://localhost 繫結到shop倉庫,實際上沒有生效。 解決辦法: 配置多倉庫 重新開啟倉庫服務,把倉庫地址改為多個倉庫的共同上級目錄,會把svn://localhost指向該上級目錄,
在需要使用倉庫時比如檢出操作時,在svn://localhost後面加上/倉庫名稱: 比如svn://localhost/shop 在工作目錄shop中重新checkout:
結果:正確檢出了shop倉庫
在原來的blog工作目錄,直接使用update等操作時會提示錯誤:
原因是blog倉庫的檢出地址還是原來的svn://localhost,需要改變為svn://localhost/blog 操作方式:右鍵->TortoiseSVN -> relocate重新定位倉庫地址
點選之後
修改路徑為svn://localhost/blog
重新執行update等操作就可以成功了
6、許可權控制 我們之前通過給匿名使用者設定寫許可權來使用svn,這種方式在實際工作中是不安全的。 svn提供了一個許可權控制功能,可以限制使用者對倉庫的讀寫許可權。 許可權控制分為認證(Authentication)和授權(Authorization) 認證檔案:鑑別使用者身份,可以設定使用者名稱和密碼(passwd) 授權檔案:判斷使用者是否具備某種操作的許可權(authz)
設定許可權控制的步驟: 開啟該倉庫主配置檔案svnserve.conf,關閉匿名使用者的訪問許可權 開啟認證檔案 開啟授權檔案 開啟passwd檔案,設定使用者名稱和密碼
開啟authz檔案,設定哪些使用者具有哪些許可權 ①直接給指定的使用者設定許可權 重新在工作目錄中進行操作比如更新操作: 會彈出以下許可權認證介面
輸入使用者名稱和密碼,可以選擇儲存認證資訊(即記住使用者名稱和密碼),如果認證成功,以後就不用再次認證。否則,每一次操作都需要進行認證。 ②對使用者進行分組,然後對分組設定許可權
設定完成之後,配置都會立即生效 7、清除儲存的認證資訊 儲存認證資訊後,不會再次彈出認證介面,如果需要更改認證資訊(使用者名稱和密碼),則需要先清除svn儲存的認證資訊 在svn的設定頁面 (右鍵->TortoiseSVN->settings)
點選clear選擇指定的使用者資訊進行清除或者clearAll可以清除所有 然後重新執行update等操作就可以喚起使用者名稱密碼輸入介面
六、SVN自啟動服務與批處理指令 1、為什麼需要自啟動服務 開啟倉庫服務,我們是要保持命令列黑視窗的掛起狀態,這種方式不友好,如果不小心關閉了這個視窗,整個svn服務就關閉了。更友好的方式,是把svn倉庫服務設定成自啟動的服務。 2、建立自啟動服務
示例:sc create svn binPath= “F:\Subversion\svnserve.exe -r F:\svncangku –service” start= auto
–service 說明其為服務專案 start= auto說明電腦開機就自動啟動該服務 執行:**①必須使用管理員身份開啟命令列視窗 ② 圖示指定位置必須放置一個空格,否則建立會失敗。**
成功之後,可以右鍵我的電腦-管理,開啟計算機管理頁面來檢視服務 點選“服務”,查詢建立服務時使用的服務名稱比如svn
第一次需要手動啟動,以後重啟電腦之後可以自動啟動 3、批處理指令 服務的啟動停止可以通過執行命令來實現: net start svn 啟動svn服務 net stop svn 停止svn服務 sc delete svn 刪除svn服務(記住:svn如果需要刪除必須先停止) 這些命令都需要在管理員許可權下來執行 為了方便,可以把這些指令分別儲存到一個檔案當中,比如start.bat stop.bat 然後以管理員的身份執行這些檔案,可以達到和執行命令相同的效果
七、鉤子程式同步程式碼 1、鉤子程式原理 每次向svn倉庫提交程式碼之後,需要在apache下來更新一次最新的程式碼,這樣比較麻煩,有一種自動同步程式碼的解決方案—使用鉤子程式 原理:每次想svn倉庫提交程式碼,這個鉤子程式會檢測到這次改動,自動在apache下執行一次svn的update操作更新程式碼。
2、使用同步鉤子(post-commit)程式 ① 在伺服器端apache建立一個資料夾接收同步資料,比如建立F:\workspace\online目錄 ② 在本地和伺服器端同時檢出svn倉庫最新資料 ③開啟伺服器的Blog倉庫,找到hooks鉤子目錄,新建一個post-commit.bat批處理檔案,然後輸出如下程式碼(需要根據實際情況修改裡面的內容) SET SVN=”F:\Subversion\svn.exe” 設定svn指令目錄 SET DIR=”F:\workspace\online” 設定需要同步的目錄 SVN update %DIR% [–username a –password b] 使用update指令更新資料到同步目錄 比如:
設定完成,可以測試一下: 在工作目錄blog新增一個檔案並提交 在線上目錄online下發現,新增的檔案自動更新下來了。