Subversion使用與CVS相似的工作模型,也就是“拷貝-修改-合并”,但是有時候還是很有必要使用“鎖定-編輯-解鎖”模型,例如對于二進制文件,或者其他不太適合合并的文件。
屬性在《使用Subversion進行版本控制》這本書里也被稱為元數據,是附加到版本控制下的 文件之上的屬性,就像最后的修改日期是一個文件的屬性一樣,你可以為Subversion控制之下的文件和目錄設置自定義的屬性。關于屬性的詳細信息可以 看:http://www.subversion.org.cn/svnbook/1.2 /svn.advanced.locking.html#svn.advanced.locking.lock-communication。
在Subversion 里是通過內置的屬性“svn:needs-lock”實現“鎖定-編輯-解鎖”模型的,例如我們有一個word文件“介紹.doc”,大家很清楚Word 文件是二進制格式(據說以后都是XML的,但是可能也無法靈活的合并),不可能使用“拷貝-修改-合并”模型,所以我們要使用“鎖定-編輯-解鎖”模型。 你可以將它設置屬性“svn:needs-lock”,然后提交,之后其他人在更新這個文件的時候,就會得到一個只讀的文件,他們想修改這個文件必須首先 獲得鎖,獲得鎖的過程會將文件置為可寫,而其他人此時如果想得到鎖就會發現做不到,只有得到鎖的人放棄鎖定,別人才能得到鎖,繼續工作。下面分別講述了如 何使用svn命令行和TortoiseSVN設置鎖和使用鎖。
1) 設定“svn:needs-lock”屬性
使用命令行鎖定“介紹.doc”:
svn propset svn:needs-lock 'x' 介紹.doc
運行這個命令后,“介紹.doc”就已經是設置了“svn:needs-lock ”,但為了使之生效還要運行“svn commit”,之后其他用戶update的時候就會發現這個文件已經是只讀的了。需要注意的是我們設置的屬性值是“x”,實際上任意值都可以, Subversion會忽略其內容。
使用TortoiseSVN設定屬性也很簡單:
“介紹.doc”右鍵選中- >屬性->Subversion選項夾->properties->add,然后在彈出的窗口中的property name選擇“svn:needs-lock”,值任意,然后選擇OK。之后再提交“介紹.doc”即可。
2)獲取鎖
在設定了這個屬性之后,我們要想修改“介紹.doc”,就必須首先獲得鎖,使用命令行操作如下:
svn lock 介紹.doc
這樣“介紹.doc”就變成了可寫文件,你可以進行編輯修改了,這個時候如果有人和你一樣期望獲得這個文件的鎖就會得到錯誤的提示,表示文件已經被你鎖定了。
使用TortoiseSVN的操作依然簡單,“介紹.doc”右鍵選中-> TortoiseSVN -> Get Lock... ,然后輸入鎖定的注釋,選擇“OK”,既完成了鎖定。
3)釋放鎖
當你完成了修改,選擇提交后,默認就會釋放鎖,別人就可以重新獲得鎖。當然你也可以放棄修改,直接選擇釋放鎖,操作如下:
svn unlock 介紹.doc
這樣“介紹.doc”就重新變成只讀,別人就可以獲得鎖并進行修改了。
使用TortoiseSVN的操作為,“介紹.doc”右鍵選中-> TortoiseSVN -> Release Lock,然后選擇確認即可。