12

玩家们

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

设置

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

钩子

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 中删除并重新添加了对项目的远程引用。
  • 我已从服务器上的“存储库”文件夹中删除了 DesktopConfiguration.git 项目,并尝试再次推送到它。
  • 我什至重新创建了我所有的 rsa 密钥(尽管身份验证似乎与我看到的问题没有任何关系)。

所有这些尝试都未能让我访问该项目。据我所知,在我失去对该项目的访问权期间,服务器或我的台式机上没有任何变化。

我欢迎您张开双臂提出任何见解!

4

4 回答 4

4

对于“拒绝读取访问”,我将检查服务器上的 gitosis 用户是否仍然具有对存储库的完全访问权限。你说你确定服务器上没有任何变化,但是你已经排除了很多其他的事情。仔细检查不会有什么坏处。

于 2010-08-12T08:01:10.843 回答
3

似乎signine在评论回复中得到了正确的答案。我遇到了同样的问题,并且(在一些哭泣和咬牙切齿之后)最终通过将所有存储库放在一个“可写”行上来解决问题。

在检查源代码时,可以看到 gitosis 使用 ConfigParser,它要求选项出现在一行上,或者如果您在下一行的开头留出空格,您可以换行。因此:

writable = WallpaperChanger RegexTester MovieAggregator FileRenamer

或者

writable = WallpaperChanger RegexTester
           MovieAggregator FileRenamer
于 2010-12-17T18:58:44.980 回答
1

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

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

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

于 2013-02-18T19:47:38.850 回答
0

我已经看到有一条线,例如

writable =

可以中断对所有存储库的访问。发生这种情况是因为我们的 gitosis.conf 是自动生成的,并且它遇到了一个组没有存储库的场景。

于 2011-08-01T17:10:42.823 回答