2011-08-13 37 views
4

我有以下目錄結構的Mercurial庫:水銀目錄訪問規則

/ 
/system 
/applications 
/applications/client1 
/applications/client2 
/applications/client3 

我服務於回購了Apache的子域通過HTTP(非SSL還),並想限制推送權限,拉並承諾當然。一般我不想讓一些用戶看到目錄,也沒有目錄的歷史!

  1. 是否有機會限制對mercurial存儲庫中目錄的訪問。
  2. 我如何才能訪問客戶端1文件夾僅適用於客戶端1,客戶端2僅適用於基於Linux的系統上的客戶端2? 注意:如果沒有必要,我不想將存儲庫拆分成子存儲庫!
  3. 如果這不是沒有子倉庫的工作,有人可以告訴我如何在這種情況下與我的目錄結構的子倉庫。

我失去了:(

+0

文件夾之間是否存在任何依賴關係?例如,「client1」中的文件是否知道除此之外還有一個「client2」文件夾,並直接引用這些文件?任何目錄之間都存在什麼樣的這種依賴關係? –

回答

5

既然你擁有的一切在1個庫,那麼沒有

TL;博士:庫是始終完整,如果你可以克隆它,你可以看到一切,有沒有辦法來限制訪問的內容在本地克隆,只到一箇中央服務器託管的克隆。


一位機智善變的服務器可以處理授權兩方法:

  1. 它可以限制訪問存儲庫
  2. 它可以使用掛鉤,以防止與內容推說是不允許用戶修改

第一類會使整個存儲庫中讀取 - 只有或不可用。但是,如果用戶具有讀取訪問權限,他將能夠克隆和查看整個存儲庫,歷史記錄和文件。

但是,您可以阻止同一用戶通過禁止推送來修改中央副本。這意味着用戶可以用他自己的私人克隆做任何他想做的事情,但他無法將這些變化推回中央克隆。

另一種類型將允許您控制更改允許發生的更細的位置。但是,請注意,用戶將能夠克隆和查看整個存儲庫。

此外,用戶還可以用他自己的個人克隆做他想做的任何事情。但是,儘管這種類型的授權並不完全禁止推送到中央存儲庫,但掛鉤會查看被推送的變更集,並且如果您決定不允許該用戶將更改推送到「客戶端2」內容,他試圖推動的任何這樣的變更集將被中止。

換句話說,用戶可以修改他的私有克隆,包括更改「client2」中的內容,但是如果他用「client2」更改提交更改集,他將無法推回到中央存儲庫。然後,他必須在他的推動才能通過之前剝離或以其他方式擺脫這些變化集。

因此,要總結:

  1. 您可以完全克隆禁止用戶,這會使整個倉庫無法給他
  2. 您可以禁止推動,但允許克隆
  3. 你可以使用鉤分析傳入的更改集,並阻止用戶不允許修改的內容更改
  4. 無論如何,如果用戶能夠創建一個克隆,該克隆總是在用戶計算機上完成並且不受限制。你不能在限制那個克隆的訪問,你所能做的只是點1,禁止用戶從克隆開始。
1

您可以使用ACL Extension,默認情況下,它現在與Mercurial一起分發。該擴展可以限制每個目錄的所有汞行動,而不需要訴諸使用子庫。

此外,你可以限制訪問每個分支每個文件夾