我几个月来一直在使用git和gitosis,我真的很喜欢这两个。不幸的是,我在使用gitosis访问我的一个项目时遇到了问题。
我在运行Debian的托管服务器帐户上设置了我的git和gitosis安装。我还设置了四台带有单独rsa密钥的计算机(两台Ubuntu,两台Windows),并成功设置每台计算机以访问gitosis安装。一切都顺利进行了一段时间。但是,最近,我无法以任何方式访问我的“DesktopConfiguration”项目(推,拉,克隆)。我最初在我的一台Linux机器上创建了DesktopConfiguration项目,将其推送到gitosis服务器,并将其克隆到我的一台Windows机器上。直到最近(过去两周左右)我才能访问它。以下是我的gitosis.conf文件和我收到的错误消息(无论我是尝试使用我的Windows或Linux盒子推送,拉取还是克隆,错误消息都是相同的):
[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组中)。以下是我迄今为止尝试的一些事项:
所有这些尝试都未能允许我访问该项目。据我所知,在我失去对该项目的访问权限时,服务器或我的桌面计算机上没有任何变化。
我欢迎你张开双臂的任何见解!
答案 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是自动生成的,它进入了一个组没有存储库的场景。