Gitosis错误:在先前可访问的存储库上接收“读取访问被拒绝”

时间:2010-08-08 19:34:55

标签: git gitosis access-denied

球员

我几个月来一直在使用git和gitosis,我真的很喜欢这两个。不幸的是,我在使用gitosis访问我的一个项目时遇到了问题。

设置

我在运行Debian的托管服务器帐户上设置了我的git和gitosis安装。我还设置了四台带有单独rsa密钥的计算机(两台Ubuntu,两台Windows),并成功设置每台计算机以访问gitosis安装。一切都顺利进行了一段时间。但是,最近,我无法以任何方式访问我的“DesktopConfiguration”项目(推,拉,克隆)。我最初在我的一台Linux机器上创建了DesktopConfiguration项目,将其推送到gitosis服务器,并将其克隆到我的一台Windows机器上。直到最近(过去两周左右)我才能访问它。以下是我的gitosis.conf文件和我收到的错误消息(无论我是尝试使用我的Windows或Linux盒子推送,拉取还是克隆,错误消息都是相同的):

The Hook

gitosis.conf的

[gitosis]  
loglevel = DEBUG  

[group gitosis-admin]  
writable = gitosis-admin  
members = windows-desktop linux-desktop linux-laptop work-laptop  

[group main-projects]  
writable = WallpaperChanger  
writable = RegexTester  
writable = MovieAggregator  
writable = FileRenamer  
writable = GlutenFreeShoppingAssistant  
writable = Libraries  
writable = DesktopConfiguration  
writable = RssFeedReader  
members = windows-desktop linux-desktop linux-laptop work-laptop  

错误消息

C:\Documents and Settings\myname\Desktop\Desktop Config Test>git clone git@myserver:DesktopConfiguration.git  
Initialized empty Git repository in C:/Documents and Settings/myname/Desktop/Desktop Config Test/DesktopConfiguration/.git/  
DEBUG:gitosis.serve.main:Got command "git-upload-pack 'DesktopConfiguration.git'"  
DEBUG:gitosis.access.haveAccess:Access check for 'work-laptop' as 'writable' on 'DesktopConfiguration.git'...  
DEBUG:gitosis.access.haveAccess:Stripping .git suffix from 'DesktopConfiguration.git', new value 'DesktopConfiguration'  
DEBUG:gitosis.group.getMembership:found 'work-laptop' in 'main-projects'  
DEBUG:gitosis.group.getMembership:found 'work-laptop' in 'gitosis-admin'  
DEBUG:gitosis.access.haveAccess:Access check for 'work-laptop' as 'writeable' on 'DesktopConfiguration.git'...  
DEBUG:gitosis.access.haveAccess:Stripping .git suffix from 'DesktopConfiguration.git', new value 'DesktopConfiguration'  
DEBUG:gitosis.group.getMembership:found 'work-laptop' in 'main-projects'  
DEBUG:gitosis.group.getMembership:found 'work-laptop' in 'gitosis-admin'  
DEBUG:gitosis.access.haveAccess:Access check for 'work-laptop' as 'readonly' on 'DesktopConfiguration.git'...  
DEBUG:gitosis.access.haveAccess:Stripping .git suffix from 'DesktopConfiguration.git', new value 'DesktopConfiguration'  
DEBUG:gitosis.group.getMembership:found 'work-laptop' in 'main-projects'  
DEBUG:gitosis.group.getMembership:found 'work-laptop' in 'gitosis-admin'  
ERROR:gitosis.serve.main:Repository read access denied  
fatal: The remote end hung up unexpectedly  

故事

根据我在gitosis的经验以及我在网上找到的大多数问题和答案,错误消息看起来与尝试推送到gitosis时收到的错误消息完全没有先将项目添加到您的机器组有权访问。不幸的是,在我的情况下,这似乎并不正确。 (除非我遗漏了什么!)

电线

我不确定这是否会提供更多信息,但这里是来自更新后挂钩的调试消息:

INFO:gitosis.run_hook:Running hook post-update  
DEBUG:gitosis.gitdaemon:Global default is 'deny'  
DEBUG:gitosis.gitdaemon:Walking '.', seeing ['RegexTester.git', 'gitosis-admin.git', 'Libraries.git', 'GlutenFreeShoppingAssistant.git', 'MovieAggregator.git', 'DesktopConfiguration.git', 'WallpaperChanger.git', 'RssFeedReader.git', 'FileRenamer.git']  
DEBUG:gitosis.gitdaemon:Deny 'RegexTester'  
DEBUG:gitosis.gitdaemon:Deny 'gitosis-admin'  
DEBUG:gitosis.gitdaemon:Deny 'Libraries'  
DEBUG:gitosis.gitdaemon:Deny 'GlutenFreeShoppingAssistant'  
DEBUG:gitosis.gitdaemon:Deny 'MovieAggregator'  
DEBUG:gitosis.gitdaemon:Deny 'DesktopConfiguration'  
DEBUG:gitosis.gitdaemon:Deny 'WallpaperChanger'  
DEBUG:gitosis.gitdaemon:Deny 'RssFeedReader'  
DEBUG:gitosis.gitdaemon:Deny 'FileRenamer'  
INFO:gitosis.run_hook:Done.  

关闭

我仍然可以在我的所有机器上访问(推送,拉取,克隆)服务器上的所有其他项目(在gitosis-admin和main-projects组中)。以下是我迄今为止尝试的一些事项:

  • 我多次检查了所有文件夹,文件和配置设置的拼写。
  • 在确保更新后的挂钩具有正确的执行权限后,我已从gitosis.conf文件中删除并重新添加了DesktopConfiguration项目。
  • 我在DesktopConfiguration之后向gitosis添加了另一个项目,它运行正常。
  • 我已在本地计算机上的git中删除并重新添加了对项目的远程引用。
  • 我从服务器上的'repositories'文件夹中删除了DesktopConfiguration.git项目,并尝试再次推送到该文件夹​​。
  • 我甚至重新创建了所有的rsa密钥(虽然身份验证似乎与我所看到的问题无关)。

所有这些尝试都未能允许我访问该项目。据我所知,在我失去对该项目的访问权限时,服务器或我的桌面计算机上没有任何变化。

The Sting

我欢迎你张开双臂的任何见解!

4 个答案:

答案 0 :(得分:4)

对于'read access denied',我将检查服务器上的gitosis用户是否仍具有对存储库的完全访问权限。你说你确定服务器上没有任何改变,但你已经排除了很多其他的东西。双重检查不会有害。

答案 1 :(得分:3)

在评论回复中似乎有正确的意思。我遇到了同样的问题,并且(在一些嚎叫和咬牙切齿之后)最终通过将所有存储库放在一条“可写”线上来解决问题。

在检查源时,可以看到gitosis使用ConfigParser,它需要在一行上显示选项,或者如果在下一行的开头留出空格,则可以断行。因此:

writable = WallpaperChanger RegexTester MovieAggregator FileRenamer

writable = WallpaperChanger RegexTester
           MovieAggregator FileRenamer

答案 2 :(得分:1)

我有类似的问题,问题很简单:

我错误地使用相同的公钥创建了 2个不同的密钥文件,结果是服务器将我识别为此新用户(对某个回购没有权利)而不是我自己(对此回购的读/写访问权限)。

这让我摸不着头脑,所以我想我会分享。

答案 3 :(得分:0)

我看到有一行如

writable =

可以破坏对所有存储库的访问。之所以发生这种情况,是因为我们的gitosis.conf是自动生成的,它进入了一个组没有存储库的场景。