2013-04-24 59 views
11

一年多來,我一直在使用GIT和目錄/文件權限。我有一箇中央存儲庫,多個開發人員使用ssh(起源設置爲ssh:// example/git/repository)向其中推送代碼。我已經設置了存儲庫如下:當用戶推送到GIT存儲庫時文件所有權/組更改

1)在中央儲存庫我的配置文件: [芯] repositoryformatversion = 0 FILEMODE =真 裸=真 sharedrepository = 0660

2)所有版本庫目錄權限設置爲770(rwxrwx ---) 3)./objects/XX和./objects/info中的所有文件都設置爲440(r - r -----) 4)所有其他文件設置爲660(rw-rw ----) 5)所有權設置爲root:group_name

(請注意,這是來自於此主題中頂級響應中的推薦設置):Making git push respect permissions?

所有訪問用戶均爲組「group_name」的成員。

問題是,如果user1推入存儲庫,某些文件的文件所有權設置爲user1:user1 - 表示該組已更改。一旦發生這種情況,沒有其他用戶可以從存儲庫中推送(或拉出),因爲他們沒有權限從存儲庫中的所需文件讀取,寫入或執行。

我已經閱讀了關於堆棧溢出和網上其他任何地方的問題的每一個線程,但我仍然遇到同樣的問題。

問題是,我不確定這個問題是GIT還是UNIX之一,我不確定如何解決它。當用戶推送到存儲庫時,如何阻止組更改?

+0

你是怎麼推的?你在做什麼用戶權限? – Makoto 2013-04-24 04:25:57

+0

推送使用:git push 我們正在推動ssh。每個用戶使用其UNIX用戶帳戶進入服務器。 例如,我是服務器上的用戶shiro。我用於SSH的登錄憑證是用戶shiro。用戶shiro是組shirogroup的一部分。該文件的所有權爲root:shirogroup。這回答了你的問題了嗎? – Shiro 2013-04-24 07:12:24

+0

我在我的服務器上有suphp - 這可能是什麼改變了我的文件權限,而不是GIT? – Shiro 2013-04-24 07:46:59

回答

16

它看起來像在初始化存儲庫之後更改了core.sharedRepository,而不是使用init --shared=group,它應該正確設置權限。這意味着sgid位不會正確設置在git存儲庫的目錄中。你將不得不手動修復這個東西(假設GNU find和xargs):

find . -print0 | xargs -0 chgrp group_name 

find . -type d -print0 | xargs -0 chmod g+s 
+0

你先生是王子。您在初始化存儲庫後更改了core.shareRepository並且您的修復確實可行,這是正確的。在過去的一年中,我一直在不同的時間與此鬥爭,所以我非常感激,終於有了它的工作! – Shiro 2013-04-25 06:13:29

+0

這是完全正確和有用的,但要添加一點:文件的組所有權將基於每個目錄的目錄組所有者(當設置爲g + s時)重置。這意味着您可以爲不同的目錄擁有多個組所有者,只要這是在每個目錄,每個存儲庫的基礎上設置的(並且所有g + s都已設置)。 – dmansfield 2015-03-19 18:04:59

相關問題