本篇文章對你有幫助的話,請轉發讓更多有需要幫助的人看到,謝謝
上一次講述了SVN的詳細安裝與簡介,這次講述SVN的使用
使用命令行模式訪問SVN伺服器
檢出
①首先進入自己的工作目錄,例如:D:DevWorkSpaceSVNSpace
②運行svn checkout命令,命令格式如下
格式

③工作副本
運行checkout命令後進入MyERP目錄,看到裡面什麼都沒有。真的什麼都沒有嗎?不是的。檢出命令會在這一目錄下創建一個隱藏目錄.svn,用來保存與伺服器交互的重要信息,其中包括從伺服器端取回的最新版本信息、文件狀態、更新時間等。SVN正是以此為依據判斷當前目錄中文件的狀態。所以這個隱藏目錄千萬不要刪除或修改其中的內容——完全無視它的存在吧。如果伺服器端保存的文件可以視為一個「正本」,那麼每個開發人員檢出到本地目錄的文件可以視為「副本」,通常稱為工作副本。
提交
①進入D:DevWorkSpaceSVNSpaceMyERP目錄
②創建一個文件test.txt
③執行svn commit命令,運行結果是

說明一個文件必須納入版本控制才可以提交到伺服器端。
④執行svn add命令,將test.txt納入版本控制

⑤再次執行svn commit命令

此時要求附加日誌信息
⑥使用-m參數附加日誌信息

原因是沒有許可權
⑦暫時先開啟匿名訪問許可權
[1]進入對應的版本庫目錄下的conf目錄:D:DevRepositorySubversionERPconf
[2]打開svnserve.conf
[3]將第19行的# anon-access = read改為anon-access = write,也就是去掉「# 」,將read改為write。注意前面不要留空格,一定要頂格寫。
[4]不需要重啟SVN服務,甚至命令行窗口都不需要重新打開。
⑧重新執行提交命令

說明提交成功了。
⑨其實svn commit命令最後可以不指定具體文件,此時表示提交當前工作副本中的所有修改。
更新
①將伺服器端文件檢出到一個新的目錄,模擬另外一個終端

②回到MyERP目錄,對test.txt文件修改後提交。
③進入TomERP目錄
④執行svn update命令

這樣我們就可以在TomERP目錄下看到MyERP目錄下提交的修改。
⑤思考:更新和檢出的相同點和不同點分別是什麼?

工作副本中文件的幾種狀態
①沒有修改,現行版本
本檔案在工作目錄中沒有被修改,而且自當前版本之後,其他終端也沒有任何該文件的修改被提交到伺服器,即當前工作副本的版本和伺服器端最新版本是一致的。對它執行svn commit和svn update都不會發生任何事。
②本地修改, 現行版本
這個文件被修改過,但這個修改還沒有提交到伺服器,而且自當前版本之後,其他終端也沒有任何該文件的修改被提交到伺服器,所以當前工作副本的版本和伺服器端最新版本仍然是一致的。由於有尚未送交回去的本地修改,所以對它的 svn commit會成功提交你的修改,而 svn update 則不會作任何事。
③沒有修改,過時版本
這個文件沒有修改,但是版本庫中有其他終端提交的修改。此時當前工作副本的版本比伺服器端的版本落後了,我們稱之為「過時」。對當前文件的 svn commit 不會發生任何事,而 svn update 會讓工作目錄中的文件更新至最新版本。
④本地修改,過時版本
伺服器端存在沒有更新到本地的修改,導致當前版本過時。如果這個文件在本地有未提交的修改,則無法提交,對它執行svn commit 會產生「out-of-date」錯誤。
此時應該先嘗試更新本地文件。更新時SVN會嘗試將伺服器端的更新與本地文件進行合併,合併的結果有兩種可能:一個是伺服器端和本地修改位於文件的不同位置,合併成功;另一個是伺服器端的修改正好和本地修改位於同一個位置,發生衝突。
將工作副本整體回復到某一個歷史版本
①假設當前版本為12,想要取回版本9
②執行svn update命令

③這裡需要注意的是,SVN版本號並不是對某一個文件進行編號,而是對應整個版本庫總體狀態的一個「快照」,取回某個版本不是取回版本號對應的某個文件,而是整個項目的一個快照。

4.6 將某個文件恢復到某個版本中的狀態,同時不涉及其他文件
①假設想要取回pp.txt在版本10時的狀態
②執行svn update命令

③綜合這兩個例子,我們可以認為版本號和文件名構成了一個橫縱坐標系,通過文件路徑和版本號定位其在某一個時刻的狀態。

單一版本庫許可權配置
匿名訪問:前已述及
授權訪問
①要設置授權訪問就需要創建用戶,並為用戶設定許可權
②打開授權訪問的配置
[1]打開D:DevRepositorySubversionERPconfsvnserve.conf
[2]將第19行anon-access = write注釋掉:# anon-access = write
表明該版本庫不接受匿名訪問
[3]將第20行# auth-access = write注釋打開:auth-access = write
表明該版本庫使用授權訪問
[4]將第27行注釋打開:password-db = passwd
表明使用同目錄下的passwd文件保存用戶信息
[5]將第36行注釋打開:authz-db = authz
表明使用同目錄下的authz文件保存許可權信息
[6]打開passwd文件創建用戶

[7]打開authz文件:#後面注釋的是例子
<1>創建用戶組

<2>指定路徑,給用戶和用戶組授權

<3>許可權的繼承性:父目錄設置的許可權,對子目錄同樣有效——除非子目錄進行了更為具體的設定

這個例子表示當前版本庫下的subDir目錄只有userOther有讀寫許可權,其它用戶無任何許可權
多版本庫共享配置
在版本庫根目錄D:DevRepositorySubversion下創建commConf目錄
將未修改的authz和passwd文件拷貝到commConf目錄下
修改需要設置許可權的版本庫的svnserve.conf文件
①password-db = ../../commConf/passwd
②authz-db = ../../commConf/authz
6.4 在password中創建用戶

在authz中針對不同版本庫為不同用戶授予許可權
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
[ERP:/]
userERP = rw
* =
[OA:/]
userOA = rw
* =
[CRM:/]
userCRM = rw
* =
查看工作副本信息
使用svn info命令
執行效果如下

7.3 對某一個文件使用svn info命令

查看目錄或文件日誌信息
使用svn log命令
[注意:使用這個命令的前提是設置匿名訪問為none,即:anon-access = none,否則會出現「svn: E220001: 條目不可讀」錯誤]
在Eclipse中安裝SVN客戶端插件
Eclipse插件應用市場
在Eclipse中訪問Eclipse Marketplace Client可以搜索Subversion,下載插件,按提示安裝即可。
使用壓縮包
如果不能聯網可以使用下載好的插件壓縮包
eclipse_svn_site-1.10.5.zip,這個壓縮包是從http://subclipse.tigris.org/網站(subclipse是這款Eclipse插件的名稱)上下載的。安裝方法是:
①解壓
eclipse_svn_site-1.10.5.zip中的features和plugins這兩個目錄
②將features和plugins複製到Eclipse安裝目錄
/dropins/eclipse_svn_site-1.10.5下
③重啟Eclipse
④進入Eclipse依次打開Window→Preferences→Team→SVN,看到如下界面即說明SVN插件安裝成功
創建資源庫位置
①切換到透視圖SVN資源庫研究
②創建資源庫位置
此時可以查看版本庫中的文件及目錄結構
檢出
①檢出分兩種情況
<1>從伺服器端獲取到的是一些零散的文件,不能作為項目檢出
此時會彈出一個新建項目嚮導,之所以會這樣是因為我們需要創建一個項目來保存從伺服器端取回的文件
<2>從伺服器端獲取到的是一個完整的項目,例如
此時必須作為項目檢出
項目從伺服器檢出後,會成為一個工作副本,根目錄下會自動創建.svn隱藏目錄
提交
①新創建文件後,文件圖標上會以「?」標識,表示該文件尚未納入版本控制
②在新創建的文件上點右鍵→Team→添加至版本控制,這樣文件圖標上會顯示「+」,表示當前文件已納入版本控制,但還未提交至伺服器。
③在要提交的文件上點右鍵→Team→提交…會提交文件,在彈出的對話框中可以不填寫日誌。文件提交後,圖標會變為「金色的圓柱體」表示當前文件的版本和伺服器端一致。
④文件修改後圖標會變為「*」,表示當前文件或目錄包含未提交的修改。
更新
①更新整個項目時可以在項目上點右鍵→Team→更新
②更新某個具體的文件時,可以在文件上點右鍵→Team→更新
共享項目
①在Eclipse中創建的新項目想要發布到SVN伺服器端,可以通過「共享」項目實現
②在項目上點右鍵→Team→Share Project…→選擇一種版本控制工具
選擇一個資源庫位置
切換到Team Synchronizing透視圖,選擇項目中要提交的內容,通常是項目中的全部內容
恢復歷史版本
①在需要回復的文件上點右鍵→Team→顯示資源歷史記錄→得到如下界面
②選擇某一個歷史記錄點右鍵→獲取內容。文件就會恢復到指定版本的狀態,同時圖標變為「*」。
③獲取歷史記錄時,如果出現如下錯誤提示
可以通過將對應版本庫中的svnserve.conf文件中的anon-access設置為none解決。
解決衝突
①什麼情況下會發生衝突
<1>兩個開發人員,Harry和Sally,分別從伺服器端下載了文件A。
<2>Harry修改之後,A變成了A』,Sally修改之後,A變成了A』』。
<3>Harry先一步提交,使伺服器端文件的版本也變成了A』
<4>Sally本地的文件A』』已經過時了,此時她已無法提交文件,伺服器會要求她先進行一次更新操作。
<5>此時Sally的更新操作有兩種可能
(1)Sally所做的修改與Harry不是同一個位置,更新操作嘗試合併文件成功。
(2)Sally所做的修改與Harry恰好是同一個位置,更新操作嘗試合併文件失敗,發生衝突。
<6>發生衝突後,本地工作副本會發生如下變化
(1)文件A中的內容發生如下改變
public static void main(String[] args) {
System.out.println(“Edit By Command!”);
System.out.println(“Edit By Command!”);
<<<<<<< .mine
System.out.println(“Edit By Eclipse!”);
=======
System.out.println(“Edit By Command!New Edit”);
>>>>>>> .r14
System.out.println(“Edit By Command!”);
System.out.println(“Edit By Command!”);
}
其中,從<<<<<<< .mine到=======之間是發生衝突時本地副本的內容。從=======到>>>>>>> .r14是發生衝突時伺服器端的最新內容。注意這裡r後面的數字是發生衝突時伺服器端的版本號,有可能是任何整數值,r14隻是一個例子。
同時文件圖標變成一個「黃色的!」。
(2)與衝突文件同目錄下新增文件,擴展名為.mine,其內容是發生衝突時本地副本的文件內容。
(3)與衝突文件同目錄下新增文件,擴展名為.r小版本號,例如MyCRM.java.r13,其內容是衝突發生之前,伺服器端的文件內容,可以作為解決衝突的參照。
(4)與衝突文件同目錄下新增文件,擴展名為.r大版本號,例如MyCRM.java.r14,其內容是衝突發生時,伺服器端的文件內容。
②解決衝突
(1)在衝突文件上點右鍵→Team→編輯衝突…→出現如下界面
以對比的方式將本地內容與衝突內容顯示出來,其中左側為本地內容,右側為衝突內容。其中本地內容是可以修改的。
(2)根據需要和實際情況將本地內容更正——這個過程很可能需要牽涉衝突的兩位開發人員進行必要的溝通——機器與程序目前還不能完全取代人工智慧。更正後文件圖標會變成一個「四角形」,同時衝突文件內的<<<<<<< .mine、=======以及>>>>>>> .r14等標記都會被去掉。
(3)在衝突文件上點右鍵→Team→標記為解決
此時.mine文件和.r版本號文件都會被自動刪除,衝突文件的圖標變為「*」,表示可以提交。
(4)提交文件,文件圖標變為「金色圓柱體」。
使用SVN獨立客戶端:TortoiseSVN
TortoiseSVN簡介
TortoiseSVN是一個Windows下的版本控制系統Apache™ Subversion®的客戶端工具。
TortoiseSVN的優良特性
①外殼集成
TortoiseSVN 無縫地整合進 Windows 的外殼(例如資源管理器)。
②重載圖標
每個版本控制的文件和目錄的狀態使用小的重載圖標表示,可以讓你立刻看出工作副本的狀態。
③圖形用戶界面
當你列出文件或文件夾的更改時,你可以點擊任意版本查看提交注釋。也可以看到更改過的文件列表 – 只要雙擊文件就可以查看更改內容。
提交對話框列出了本次提交將要包括的條目,每一個條目有一個複選框,所以你可以選擇包括哪些條目。未版本控制的文件也會被列出,以防你忘記添加新文件。
④Subversion 命令的簡便訪問
所有的 Subversion 命令存在於資源管理器的右鍵菜單,TortoiseSVN 在那裡添加子菜單。
TortoiseSVN 的歷史
2002年,Tim Kemp 發現 Subversion 是一個非常好的版本管理系統,但是缺乏一個好的圖形界面客戶端程序。做一個與 Windows 外殼整合的 Subversion 客戶端程序的想法是受一個叫 TortoiseCVS 的 CVS客戶端程序所啟發的。Tim 研究了 TortoiseCVS 的源碼並以此為 TortoiseSVN 的基礎。他開始運作這個項目,註冊了域名 tortoisesvn.org 並且將源碼放在了網上。
就在同時, Stefan Küng 正在尋找一個好用的並且免費的版本控制系統。他找到了 Subversion 和TortoiseSVN 的源碼。因為 TortoiseSVN 還不能使用,他加入了項目並開始編碼。很快,他就重寫了現有的大部分代碼並開始添加命令和功能,到了某個時段,最初的代碼已經都被改寫了。
由於 Subversion 變得越來越穩定,它吸引了越來越多用戶,他們同時也開始使用 TortoiseSVN 作為Subversion 的客戶端程序。用戶數量快速增長(並且每天還在增長)。這時候,Lübbe Onken 提出幫助項目提供精美的圖標和 TortoiseSVN 的標誌。現在他負責照看網站和管理多語言翻譯。
TortoiseSVN安裝
①下載安裝程序:
http://tortoisesvn.net/downloads.html
Win32位:
TortoiseSVN-1.8.7.25475-win32-svn-1.8.9.msi
Win64位:
TortoiseSVN-1.8.7.25475-x64-svn-1.8.9.msi
Win32位語言包:
LanguagePack_1.8.7.25475-win32-zh_CN.msi
Win64位語言包:
LanguagePack_1.8.7.25475-x64-zh_CN.msi
②以Win32位為例
中文語言包安裝
在任意目錄下點右鍵→TortoiseSVN→settings
檢出
10.5.1 創建一個目錄用來存放檢出得到的文件,例如MyCRM
10.5.2 進入目錄MyCRM,點右鍵
10.5.3 可以看到檢出得到的文件
此時文件圖標上沒有任何標識。可能你會想到通過重啟電腦的方式解決這一問題——其實不用這麼麻煩。文件圖標是受外殼程序控制的,我們只需要重啟外殼程序——explorer.exe就可以了。打開任務管理器,選中explorer.exe進程,結束進程,然後新建進程explorer.exe就可以了。
如果一切順利的話,你會看到文件圖標變成了這樣:
TortoiseSVN圖標含義

●圖標1:一個新檢出的工作副本使用綠色的對勾做重載。表示Subversion狀態正常。
●圖標2:在你開始編輯一個文件後,狀態就變成了已修改,而圖標重載變成了紅色感嘆號。通過這種方式,你可以很容易地看出哪些文件從你上次更新工作副本後被修改過,需要被提交。
●圖標3:如果在更新的過程中出現了衝突,圖標會變成黃色感嘆號。
●圖標4:如果你給一個文件設置了svn:needs-lock屬性,Subversion會讓此文件只讀,直到你獲得文件鎖。具有這個重載圖標的文件來表示你必須在編輯之前先得到鎖。
●圖標5:如果你擁有了一個文件的鎖,並且Subversion狀態是正常,這個重載圖標就提醒你如果不使用該文件的話應該釋放鎖,允許別人提交對該文件的修改。
●圖標6:這個圖標表示當前文件夾下的某些文件或文件夾已經被調度從版本控制中刪除,或是該文件夾下某個受版本控制的文件丟失了。
●圖標7:加號告訴你有一個文件或目錄已經被調度加入版本控制。
●圖標8:橫條告訴你有一個文件或目錄被版本控制系統所忽略。這個圖標重載是可選的。
●圖標9:這個圖標說明文件和目錄未被版本控制,但是也沒有被忽略。這個圖標重載是可選的。
10.6 納入版本控制
①新建文件abc.txt
②在文件上點右鍵
③添加後文件圖標發生變化
10.7 提交
①使用TortoiseSVN可以提交具體某一個文件,或某一個目錄下的所有改變。方法就是在想要提交的項目下點右鍵,然後SVN Commit…,就可以看到如下界面
②日誌內容如果不填,TortoiseSVN會提交一個空字元串作為日誌信息。
③提交後顯示信息如下
④沒有納入版本控制的文件默認是不在提交範圍內的,直接在新創建的文件上點右鍵只能看到add操作的選項,如前所述。但在新創建的文件所在目錄點右鍵選擇SVN commit…,可以看到如下界面
將文件newFile.txt選中
同樣可以提交文件,TortoiseSVN會幫我們自動將newFile.txt納入版本控制
10.8 更新
在要更新的文件或目錄上點右鍵→SVN Update
10.9 回復歷史版本
①查看歷史版本內容
[1]首先需要把對應版本庫的匿名訪問許可權設置為none:anon-access = none
[2]在要查看歷史版本的文件上點右鍵→TortoiseSVN→Show log
[3]在感興趣的歷史版本上點右鍵,可以與當前工作副本進行比較,或直接打開。
②在要回復歷史版本的文件上點右鍵→Update to revision
填上想要回到的版本即可
10.10 解決衝突
①文件發生衝突時的狀態和在Eclipse中一樣,這裡就不贅述了。
②在衝突的文件上點右鍵→Edit Conflicts
③有「嘆號」的行是發生衝突的行
④在衝突行點右鍵
可以選擇四種操作:
[1]使用我的
[2]使用他們的
[3]把我的放在他們的前面
[4]把他們的放在我的前面
⑤在衝突解決後,直接保存——這時TortoiseSVN自動彈出如下確認界面
⑥文件變為紅色嘆號標誌,自動生成的三個文件被刪除。提交修改即可
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/274916.html
微信掃一掃
支付寶掃一掃