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