SVN的使用
2022-01-24由 AllInHere 發表于 畜牧業
svn合併衝突怎麼選擇
本篇文章對你有幫助的話,請轉發讓更多有需要幫助的人看到,謝謝
上一次講述了SVN的詳細安裝與簡介,這次講述SVN的使用
使用命令列模式訪問SVN伺服器
檢出
①首先進入自己的工作目錄,例如:D:\DevWorkSpace\SVNSpace
②執行svn checkout命令,命令格式如下
格式
③工作副本
執行checkout命令後進入MyERP目錄,看到裡面什麼都沒有。真的什麼都沒有嗎?不是的。檢出命令會在這一目錄下建立一個隱藏目錄。svn,用來儲存與伺服器互動的重要資訊,其中包括從伺服器端取回的最新版本資訊、檔案狀態、更新時間等。SVN正是以此為依據判斷當前目錄中檔案的狀態。所以這個隱藏目錄
千萬不要刪除或修改其中的內容
——完全無視它的存在吧。如果伺服器端儲存的檔案可以視為一個“正本”,那麼每個開發人員檢出到本地目錄的檔案可以視為“副本”,通常稱為工作副本。
提交
①進入D:\DevWorkSpace\SVNSpace\MyERP目錄
②建立一個檔案test。txt
③執行svn commit命令,執行結果是
說明一個檔案必須納入版本控制才可以提交到伺服器端。
④執行svn add命令,將test。txt納入版本控制
⑤再次執行svn commit命令
此時要求附加日誌資訊
⑥使用-m引數附加日誌資訊
原因是沒有許可權
⑦暫時先開啟匿名訪問許可權
[1]進入對應的版本庫目錄下的conf目錄:D:\DevRepository\Subversion\ERP\conf
[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:\DevRepository\Subversion\ERP\conf\svnserve。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:\DevRepository\Subversion下建立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自動彈出如下確認介面
⑥檔案變為紅色歎號標誌,自動生成的三個檔案被刪除。提交修改即可