SVN與TortoiseSVN實戰:文件加鎖詳解

硬廣:《SVN與TortoiseSVN實戰》系列已經寫了八篇,本篇是完結篇,整個系列結合TortoiseSVN對SVN中容易被忽視的部分進行了詳解,以技巧性爲主。html

本篇詳解使用TortoiseSVN對文件進行加鎖和解鎖的技巧,其中涉及到了以前介紹的SVN屬性知識,關於屬性能夠翻看《SVN與TortoiseSVN實戰:屬性的奇技淫巧(一)》、《SVN與TortoiseSVN實戰:屬性的奇技淫巧(二)》。svn

加鎖與解鎖的操做對於項目中的二進制文件,如圖片、聲音、動態庫等不可合併文件是很是有用的,可讓這些文件防止產生惱人的衝突,但TortoiseSVN中的Get lock的其實並不能知足須要,並不能在編輯前得到對文件的獨佔訪問,這也是本文要結合屬性來詳解文件加鎖的緣由。post

本篇內容概要:學習

一、版本控制系統的加鎖策略:樂觀加鎖、嚴格加鎖;ui

二、使用TortoiseSVN獲取鎖和釋放鎖;3d

三、使用屬性,將文件設置爲只讀;版本控制

四、關於鎖的建議;htm

一、版本控制系統的加鎖策略:樂觀加鎖、嚴格加鎖blog


爲了不多我的同一時間對同一個文件改動的相互覆蓋,版本控制系統就必須有一套衝突處理機制。圖片

對於解決衝突,有兩種處理辦法:樂觀加鎖和嚴格加鎖。

嚴格加鎖:全部簽出的文件都是隻讀的,任何對文件的修改必需要得到文件的鎖,若是其餘人沒有擁有該文件的鎖,那麼版本控制系統就會受權給你文件的鎖,並將文件設置爲可編輯的。

樂觀加鎖:全部簽出的文件都是可讀寫的,對文件的修改沒必要得到文件的鎖,當你修改完文件簽入時,會首先要求你更新本地文件,版本控制系統不會覆蓋你的本地修改,而是會讓你本身合併衝突後簽入。

SVN使用的是樂觀加鎖策略,而像TFS一類的版本控制系統容許你對加鎖策略進行選擇。

相比於嚴格加鎖,樂觀加鎖可能會有較高的產生衝突的機率,但容許團隊成員任什麼時候間對文件進行編輯,擁有極大的協做效率。

對於像不可合併的二進制文件或想在某些文件和目錄上採起嚴格加鎖策略,SVN也提供了嚴格加鎖的辦法,就是對文件的加鎖解鎖操做。

 

二、使用TortoiseSVN獲取鎖和釋放鎖;


SVN默認狀況下,全部的文件都沒有鎖定,只要有提交權限的人均可以在任什麼時候候提交任何的文件。其餘人會定時更新他們的工做目錄,在庫中的改變的東西都會與本地合併。

若是你對一個文件得到鎖定,那麼只有你能夠提交這個文件。其餘用戶的提交都會被拒絕,直到你釋放了這個鎖。

獲取鎖:

選擇你想要獲取鎖定的文件,而後右鍵菜單點擊TortoiseSVN Get lock,將會彈出鎖定窗口:

一個良好的習慣是每次獲取鎖定時,在紅色標註位置輸入獲取鎖的緣由。

釋放鎖:

有兩種狀況會釋放鎖:

一、選擇你想要釋放鎖定的文件,而後右鍵菜單點擊TortoiseSVN Release lock;

二、TortoiseSVN爲了確保你不會忘記釋放鎖,在提交對話框中,老是會顯示鎖定的文件,並老是默認被選中。若是你繼續提交,選中的文件中的鎖就被移除了,就算你從沒有修改過。能夠在鎖定文件的目錄上使用Commit,打開提交對話框驗證一下。

若是你不但願釋放文件的鎖,就必須取消選中它。

問題是什麼?

若是實際操做過,使用過TortoiseSVN 的 Get lock來加鎖,就會發現並不如你所預期的,對文件實現了嚴格加鎖,本篇也就沒必要要寫了。

問題在哪?使用TortoiseSVN 的 Get lock鎖定文件後,其餘用戶並不知道你對這個文件已經鎖定,即時他們簽出最新的版本,依然可以對文件在本地進行修改,文件依然是可讀寫的狀態。

這是一個在其餘成員電腦上已經Get lock的文件,能夠看到與其餘文件在狀態上沒有任何區別:

這樣實際上是沒有意義的,別人依然會對你鎖定的文件進行修改,只有當他們在簽入時纔會發現文件已經被鎖定:

這種加鎖操做下,團隊成員須要按期的檢查文件的鎖定狀態,可使用TortoiseSVN的check for modifications:

 

三、使用屬性,將文件設置爲只讀;


之因此存在被鎖定後其餘成員依然能夠在本地修改,是由於SVN所採起的是樂觀加鎖的策略。

若是咱們想對某個文件或某個目錄採起嚴格加鎖策略,更明確的說是:全部文件默認爲只讀,在文件修改前須要先獲取鎖,只有其餘人不擁有鎖時才能夠鎖定文件並修改。

要實現嚴格加鎖,就須要使用SVN的svn:needs-lock屬性。

在想要採起嚴格加鎖的文件或目錄上點擊右鍵,使用TortoiseSVN Properties屬性菜單,點擊News新建屬性,選擇Needs-lock:

設置爲Locking required,簽入屬性修改操做,能夠發現文件的圖標狀態改變了,並變爲只讀:

當設置了svn:needs-lock屬性時,實際上對文件就採起嚴格加鎖策略,對文件的任何修改都必須先使用TortoiseSVN 的 Get lock鎖定文件。

 

四、關於鎖的建議


對於項目中的二進制文件,如圖片、聲音、動態庫等,能夠在目錄上統一設置svn:needs-lock屬性,避免在這些文件上產生衝突,浪費解決衝突的時間。

 

結語:本系列一共九篇,對SVN中的技巧基本上進行了全面的介紹,但願對你們有所幫助。若是想要系統的學習SVN,能夠閱讀《版本控制之道》這本書,本系列所講的內容與書中的內容並不徹底重複,更側重於實戰性和技巧性的內容,最後但願你們在項目開發中能正確、合理運用SVN。

相關文章
相關標籤/搜索