修改SVN中文件的可執行屬性
博文來自下面路徑,轉載請注明原出處:
http://bigwhite.blogbus.com/logs/74568031.html
修改SVN中文件的可執行屬性 - [開源世界]
Tag:開源世界 Subversion版權聲明:轉載時請以超鏈接形式標明文章原始出處和作者信息及本聲明
http://bigwhite.blogbus.com/logs/74568031.html
今天做了一些項目版本庫的搭建工作,主要是將相關模塊和庫目錄建立好,將Makefile編寫好,并添加到SVN庫中。
工作接近尾聲時,無意中發現提交到SVN庫中的文件居然都帶著可執行權限(以下稱x屬性),如:
-rwxr-xr-x 1 tonybai tonybai 203 2010-04-21 17:26 Makefile*
這著實讓人覺得別扭!Svn居然記錄了文件的權限信息,至少我以前還沒有關注過這點。
擺在面前有兩件問題要搞清楚:
1、我在本地建立的文本文件為何帶上了可執行的權限?
2、如何將SVN庫中文件的可執行權限屬性去掉?
我檢查了一下我的Ubuntu Shell設置,沒有顯式設置umask,但是在/etc/profile中Bash默認設置了"umask 022",這樣我新建的文件應該具有-rw-r--r--的權限屬性才對,為什么變成了-rwxr-xr-x了呢? 回想了一下,Makefile是我從其他項目的本地代碼目錄下Copy過來的,難道這個項目的代碼文件原本就攜帶了可執行權限嗎?打開那個本地目錄,ls -l查看了一下,果然所有文本文件都是帶有x權限的。在這個目錄下touch了一個新文件,居然也是攜帶x權限的!回到“主文件夾”,又嘗試touch了一個文件,這個文件卻不帶有x權限!難道與分區有關系?那個項目的本地代碼是放在Windows的FAT32分區下的,這個分區是在Ubuntu啟動后通過點擊分區磁盤符后才mount上的。這個問題我沒有繼續深挖,但原因八九不離十就是Ubuntu在掛接這些分區時傳遞并采用的umask的值與Bash默認配置的值不同。
事已至此,那如何“亡羊補牢”將SVN庫中存儲的文件的x屬性去掉呢? SVN手冊給了我們一些線索!手冊中談到通過設置svn:executable可以保持文件的x屬性,例如:如果想給SVN庫中的某個文件加上x屬性,可使用:
svn propset svn:executable on test.c
執行結果提示:設置屬性 “svn:executable” 于 “test.c”
查看一下文件屬性:
-rwxr-xr-x 1 tonybai tonybai 50 2010-09-08 15:44 test.c*
本地文件已經被加上了x屬性,svn status查看一下,發現svn認為test.c已經發生了改變。svn commit后,test.c就會被加上executable屬性,之后你無論在哪里checkout文件test.c,你都會發現test.c有著x權限。
如何刪除x權限呢?沒有細致查看手冊之前,我猜想應該執行: "svn propset svn:executable off test.c",結果svn給出提示:
svn: 警告: 使用 “svn propdel” 關閉屬性 svn:executable;
設置屬性為 “off” 不會關閉它。
svn提示我使用svn propdel,再查看一下手冊,的確svn propdel是用于刪除各種prop的正確命令,執行:svn propdel svn:executable test.c
提示:刪除屬性 “svn:executable” 于 “test.c”。
使用ls -l查看,test.c的x屬性已經被刪除,如果想刪除svn server端的x屬性,還需進行一次svn commit。