2010-05-17 82 views
6
Ubuntu: Jaunty 
Mercurial: 1.3.1 
Access: ssh (users john and bob) 
File permission: -rw-rw---- 1 john john 129276 May 17 13:28 dirstate 
User: bob 
Command: 'hg st' 
Response: 

**abort: Permission denied: /our/respository/.hg/dirstate** 

很顯然mercurial不能讓bob看到狀態,因爲它需要讀取的文件屬於我。如何設置權限,以便兩個用戶可以在同一個hg存儲庫上工作?

因此,我更改權限以允許bob讀取文件,並且一切都很好,直到我下一次嘗試做某件事情,從而將情況逆轉。現在他擁有該文件,我無法閱讀它。

所以我建立了一個「提交者」組,並且john和bob都屬於這個組,但是隻要有一個提交或其他提交,它仍然具有所有權和權限的mercurial fiddles。

此外,無論何時我們中的一個人或其他人向存儲庫添加文件,文件都由提交者獨佔。這對我來說很好,因爲我對chmod非常熟悉,但是當我忽視授予他許可時,它會出現一個重要的問題。我想我們只需要一個post-commit鉤子;但只是包括這種症狀...

我們如何配置它,使同一組中的兩個不同的登錄可以通過ssh提交到同一個存儲庫?

回答

1

長期粘性位解決方案也無法正常工作。

工作原理是將chmod/chgrp命令放入bash腳本並教授設計者如何運行它。

#!/bin/bash 
chgrp -R foo /foo/development/templates 
chgrp -R foo /foo/development/media 
chgrp -R foo /foo/development/static 

chmod -R g+w /foo/development/templates 
chmod -R g+w /foo/development/media 
chmod -R g+w /foo/development/static 
3

使用unix組:請參閱文件系統方法here

13

您需要在所有相關目錄中設置「組粘滯位」。該權限位表示,在這些目錄中創建的任何文件或目錄都應具有父目錄組的所有權,而不是創建用戶的主組。

您可以右鍵轉到你的整個回購(hg root)的頂層和運行這些命令設置的東西:

chgrp -R committers . 
chmod -R ug+=rwX . 
find . -type d -print0 | xargs -0 chmod 2775 # or 2770 if other can't read 

,首先命令給出組所有權回committers的所有文件和目錄。第二個命令確保所有者和組成員可以讀寫所有文件和目錄,並且可以下載所有目錄。第三個命令僅列出目錄(省略文件),然後在其上設置棒組位。完成之後,目錄的權限將如下所示:rwxrwsr-x

您只需執行一次操作,如果在創建回購前執行此操作,則根本不需要使用查找,因爲粘性組位將被所有目錄繼承。 CVS和svn在過去的日子裏都是這樣做的。

+1

你說得對。祕密就在於它的粘性......「chmod g + s .hg .hg/store .hg/store/data」似乎讓事情變得「如此之好」。 – 2010-05-18 01:48:23

+0

是的,這將修復添加的任何新文件。其餘的東西只是爲了修復已經創建的文件。 – 2010-05-18 13:32:40

相關問題