前言
在使用SVN的過程中往往會遭遇這樣的問題:Checkout至本地的文件往往不帶可執行權限或可寫權限,這是由於SVN的文件屬性設置導致的。現時網上對於SVN屬性相關的中文文章非常少,基本只描述了問題現象而沒有系統地講解其背後的原理,本文在此做個小結。
SVN文件屬性概述
SVN版本控制系統提供了多項文件屬性供用戶應用於不同的使用場景下(例如防衝突等),此外還提供了針對目錄操作的目錄屬性,本文不涉及該部分。SVN文件屬性的名稱均以“svn:”開頭。以SVN 1.9爲例,共支持如下文件屬性:
名稱 | 描述 |
---|---|
svn:keywords | 擴展關鍵字 |
svn:executable | 文件可執行權限 |
svn:eol-style | EOL(行尾結束字符) |
svn:mime-type | 文件MIME類型 |
svn:needs-lock | 文件鎖(一般用於防止在多人開發場景下的提交衝突與內容覆蓋) |
上述SVN文件屬性的詳細說明可通過svn ps --help命令獲取。
SVN文件屬性操作
SVN提供了一組命令供用戶對SVN文件屬性進行增刪改查操作,分別是:
命令 | 快捷命令 | 功能 |
---|---|---|
svn propdel | svn pd / svn pdel | 刪除屬性 |
svn propedit | svn pedit / svn pe | 編輯屬性 |
svn propget | svn pget / svn pg | 獲取指定屬性的屬性值 |
svn proplist | svn plist / svn pl | 顯示屬性 |
svn propset | svn pset / svn ps | 設置屬性 |
上述命令均可通過--help參數獲取詳細的使用說明。
svn propdel
SVN文件屬性刪除命令,基本格式爲
svn propdel PROPNAME [PATH...]
其中PROPNAME即需要刪除的SVN文件屬性名,[PATH...]即目標操作對象或文件。以常見的文件解鎖操作爲例,文件鎖定操作由svn:needs-lock屬性決定的,若需要清除該屬性,可執行如下命令
svn propdel svn:needs-lock main.c
svn propedit
SVN文件屬性編輯命令,基本格式爲
svn propedit PROPNAME TARGET...
以修改一個文件svn:keywords屬性值爲例,可執行如下命令
svn pedit svn:keywords main.c
執行該命令時,SVN將打開一個GNU nano文本編輯器界面供用戶修改屬性,總體的操作流程和Git基本一致。
svn propget
SVN文件屬性值獲取命令,基本格式爲
svn propget PROPNAME [TARGET[@REV]...]
以獲取一個文件的svn:keywords屬性值爲例,可執行如下命令
svn propget svn:keywords main.c
執行上述命令後,系統將回顯對應的屬性值。
svn proplist
SVN文件屬性列舉命令,該命令用於查看目標文件的所有屬性(但不顯示具體的屬性值),其基本格式爲
svn proplist [TARGET[@REV]...]
以查看某一文件的所有屬性值爲例,可執行如下命令
root@ubuntu:~# svn pl main.c
Properties on 'main.c':
svn:keywords
svn:needs-lock
svn propset
SVN文件屬性設置命令,該命令用於爲目標文件添加用戶所需的文件屬性,其基本格式爲
svn propset PROPNAME PROPVAL PATH...
以常見的爲目標文件添加可執行權限爲例,可執行如下命令
root@ubuntu:~# svn ps svn:executable on main.c
property 'svn:executable' set on 'main.c'