2008-09-11 74 views
39

如何在存儲庫中存儲文件權限?有幾個文件需要是隻讀的,以阻止第三方程序對其進行垃圾回收,但在檢出存儲庫後,它們將設置爲可讀寫。在Subversion版本庫中存儲文件權限

我看着谷歌和發現了一個blog post from 2005指出Subversion不存儲文件的權限。列出了修補程序和掛鉤腳本(只有一個url仍然存在)。三年後,Subversion仍然沒有存儲文件許可權,並且是唯一可以實現這一目標的方法嗎? (我從來沒有做過鉤,而使用的東西是原產於顛覆。)

+1

良好的老問題。但是,答案一直持續到今天。除+ x之外,無法將chmod更改爲SVN文件。 我在git中漫遊 – confiq 2010-11-28 16:14:08

+1

@confiq很可能在git中。實際上,您可以提交只修改權限的更改。不過,我不知道,如果你把那個承諾svn的:) – 2013-09-25 14:11:08

回答

9

一個可能的解決辦法是寫你與你的代碼和其餘檢查在腳本運行爲第一你的構建過程的一步。

此腳本運行您的代碼庫副本並設置某些文件的讀取權限。

理想情況下,腳本會從簡單的輸入文件讀取文件列表。 這可以使其他開發人員易於維護和輕鬆瞭解哪些文件被標記爲只讀。

+0

驚喜會發生什麼:顛覆似乎確實改變* *權限,當您提交:( – 2014-03-17 19:53:31

-6

考慮使用svn lock從寫入文件禁止他人。

0

鎖定無法解決此問題。鎖定會阻止他人編輯文件。這是一個第三方應用程序,作爲試圖寫入文件的構建過程的一部分運行 - 更改它 - 這打破了構建過程。因此,我們需要停止程序改變文件,只是將文件標記爲只讀文件。我們想在倉庫舉行的信息和整個簽入,樹枝進行等

0

Graham,svn不存儲權限。您唯一的選擇是將您的電話打包到腳本中的svn。腳本應該使用它的參數調用svn,然後設置權限。根據您的環境,您可能需要調用腳本svn並調整您的PATH以確保它被調用。

我非常喜歡morechilli的想法,將文件和權限列表簽入存儲庫本身。

0

我們爲我們創建了一個批處理文件。寧願在顛覆實際的支持,雖然...

13

有沒有本地的方式來存儲SVN文件的權限。

來自該博客帖子的asvnthe patch似乎已經啓動(並且託管在官方SVN存儲庫中),這是一件好事,但我不認爲他們在任何時候都會在覈心版本中進行這樣的元數據處理不久。

SVN已經有能力專門處理symbolic linksexecutables很長一段時間,但在Win32上都無法正常工作。我不認爲我的呼吸不爲其他非便攜式功能(儘管它不會太強,很難對現有的元數據系統之上實現的。)

我會考慮寫一個shell腳本來手動調整文件權限,然後將其放入存儲庫。

+0

asvn正式版(截至目前)似乎並不在工作目錄中處理大量被忽略的文件(它有非常嘈雜的輸出),這裏有一個補丁修復http://mail-archives.apache.org/mod_mbox/subversion-dev/201005.mbox/%3C4BE1A4F0。 [email protected]%3E;由於某些原因,它仍然沒有到主線回購 – Nickolay 2011-05-15 16:27:39

+0

上面的asvn鏈接已更改爲:[asvn](https://svn.apache.org/repos/ asf/subversion/trunk/contrib/client-side/asvn)在遵循以上這些線索之後,我發現了一些可能更好的替代方法:[http://fsvs.tigris.org/](http://fsvs.tigris .org /)並可能:[https://trac.dass-it.de/pub/wiki/dasscm](https://trac.dass-it.de/pub/wiki/dasscm) – 2014-04-10 01:38:03

36

SVN確實有能力存儲元數據(properties)以及一個文件。這些屬性基本上只是鍵/值對,但是有一些特殊的鍵,如'svn:executable',如果該屬性存在於文件中,Subversion會在檢出文件時爲該文件設置文件系統的可執行位。雖然我知道這不是你正在尋找的東西,但它可能就夠了(對我來說)。

行結尾還有其他一些屬性(svn:eol-style)和mime類型(svn:mime-type)。

+2

我意外地向上 - 因爲它已經投票了原始文件的鏈接。但我希望我可以收回,因爲這個答案似乎意味着可以用這種方式設置讀/寫文件權限。 – MarkHu 2012-07-05 22:33:26

1

@morechilli:

從我先前的職位的asvn包裝,並在OP的帖子在博客似乎做你所建議。雖然它將權限存儲在相應文件的存儲庫屬性中,而不是單個外部文件。

3

This是SVN補丁的更新鏈接,它正確處理unix樣式的文件權限。我已經在fedora12上進行了測試,並且似乎按預期工作:

我剛剛保存了它/ usr/bin/asvn並使用asvn而不是svn命令,如果我需要正確處理權限。

1

我建議使用mtree實用程序(FreeBSD默認使用它)生成權限映射,將地圖存儲在存儲庫中,並且如上所述,運行一個腳本,以便從地圖恢復適當的文件許可權構建過程的第一步。

3

很多答案都指出svn不存儲文件權限。這可能是真的,但我能解決一個dll文件沒有執行權限的問題簡單地通過下列步驟操作:

  1. 搭配chmod 755 badpermission.dll
  2. MV badpermission.dll ../
  3. SVN更新
  4. SVN RM badpermission.dll
  5. SVN提交badpermission.dll -m 「刪除DLL修復權限」
  6. MV ../badpermission.dll。
  7. SVN添加badpermission.dll
  8. SVN提交badpermission.dll -m 「添加DLL回修復權限」
  9. RM badpermission.dll
  10. SVN更新
  11. badpermission.dll回來與執行權限
4

由於這在以前的回覆中還沒有完全說明。我討厭復活殭屍線程。

由於增加了對SVN許可支持將不得不適應多種操作系統和權限類型,NFS,POSIX,ARWED和RACF

這將使得SVN臃腫,可能與衝突的許可類型,如NFS和POSIX,或發生衝突打開可能的漏洞/安全漏洞。

有幾個解決方法。預先提交,提交後提交,啓動提交是更常用的,並且是Subversion系統的組成部分。 但是,您可以使用您喜歡的任何編程語言來控制權限。

我實現的系統就是我所說的打包程序,它驗證工作副本的提交文件,然後解析元數據文件,其中列出了文件/文件夾所需的默認權限,以及對它們所做的任何更改慾望。

Owner, Group, Folders, Files 
default: <user> www-user 750 640 
/path/to/file: <user> non-www 770 770 
/path/to/file2: <user> <user> 700 700 

您還可以進一步擴展,這一點,讓事情,如自動移動,重命名它們,通過類型標籤的修訂,如α,β,發佈候選版本,釋放

至於支持客戶結帳的具有附加權限的存儲庫文件。您最好考慮創建包的安裝程序並將其作爲資源提供。

想象人們設置他們的倉庫在它的可執行文件設定根權限:WWW用戶4777