2010-07-13 27 views
1

我是新的mercurial用戶。我設置的ACL擴展加入到這一點我hgrc文件:Mercurial Acl Extension拒絕部分文件的拉動

[hooks] 
pretxnchangegroup.acl = python:hgext.acl.hook 

[acl] 
sources = serve pull push 

[acl.deny] 
** = mercurial 
與此代碼

所以上面我拒絕訪問所有文件到用戶的「善變」。我成功地測試了acl擴展,當我嘗試推送到我在上面放置代碼的中央存儲庫時,它完美地工作。正如所料,我收到消息,用戶訪問「mercurial」被拒絕。

現在的問題是我什麼時候開始從中央存儲庫拉我沒有任何限制,所以我可以拉任何東西沒有任何限制。我想要的是拒絕對某些文件的訪問權限,就像我嘗試push命令時所做的那樣。有什麼辦法可以做到這一點?

回答

1

與Subversion不同的是,Mercurial不允許對單個文件進行控制,並且有很好的理由。 DVCS模型將整個回放放在每個開發人員的機器上,因此,即使您在推送和拉動上限制文件,用戶仍然可以僅使用hg cat文件來獲取其內容。

而不是試圖在客戶端做到這一點,我會反而根據誰需要什麼和設置個人回購權限來打破您的回購協議。在Kiln堆棧交換Should I use more than one repository?上查看我的回答。您可以通過http(s)或SSH設置權限,或者如果您恰好使用Kiln,則可以通過我們的權限界面進行設置。

+0

感謝您的重播,但現在我不知道該怎麼辦。我有一個項目,我想限制對該項目上某些文件的特定用戶的訪問。有沒有什麼不同的方式來做到這一點,並保持這個項目的和平? – Danilo 2010-07-13 13:38:23

+0

您限制訪問什麼類型的文件?你將如何強制他們使用你的鉤子? – tghw 2010-07-13 14:27:07

+0

再次感謝您的回答。 我想限制訪問一些PHP腳本。但是有一個問題和你的第二個問題是一樣的。如何強制使用我的鉤子以及如何設計該鉤子以便能夠識別那些我想要限制的文件? – Danilo 2010-07-13 14:38:09

-3

我有一個解決辦法:

您的回購轉換爲混帳:

https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools#Mercurial

+0

Danilo正在尋找的是「通過filepath進行部分克隆」,這在git中也不可行:http:// stackoverflow。com/questions/2586824/partial-clone-with-git-and-mercurial – 2011-03-04 04:00:26

+0

它可能在git中:http://sitaramc.github.com/gitolite/doc/gitolite.conf.html#_basic_access_control – 2011-03-05 09:55:28

1

由於與tghw的意見出來了,這聽起來像你真正想要的是文件路徑部分克隆,這樣一個人就可以克隆或拉下特定的文件或目錄,但這在Mercurial(或git)中是不可能的。情況就是這樣,因爲每個修訂都由一個唯一的散列標識,其中包括所有文件更改的散列。如果您沒有所有文件,則沒有進行所有更改,並且無法驗證散列。

如果您確實需要隱藏某些人的某些文件的讀取訪問權限,則需要將其分割爲單獨的存儲庫。