20

尝试在 Archlinux 上配置 gitosis 时遇到一些问题

http://wiki.archlinux.org/index.php/Setting_Up_Git_ACL_Using_gitosis

我参考了这篇wiki文章并成功安装了gitosis。

$ sudo pacman -U gitosis-git-20090525-1-i686.pkg.tar.gz
$ sudo -H -u gitosis gitosis-init < /tmp/id_rsa.pub

并修改 /srv/gitosis/.ssh/authorized_keys 以包含我本地用户的 id_rsa.pub。

但是当我git clone以本地用户身份运行时,

$ git clone gitosis@host:gitosis-admin.git

它说

在 /home/wyx/gitosis-admin/.git/ gitosis@10.132.140.73 中初始化空的 Git 存储库
密码:*****
致命:'gitosis-admin.git' 似乎不是
致命的 git 存储库:远端意外挂断

所以 git clone 操作失败。我想知道为什么它会尝试在我的本地用户目录(/home/wyx)中初始化一个空的 git 存储库?既然我已经在 .ssh/authorized_keys 中添加了本地用户的 id_rsa.pub,为什么还要输入密码呢?

4

11 回答 11

20

创建了一个空存储库,因为这正是 git 的工作方式:它必须先初始化一个存储库,然后才能开始将远程对象拉入其中。不幸的是,这意味着您必须在再次尝试克隆之前手动删除空仓库。

至于克隆失败的原因,看起来您对远程存储库路径使用了错误的语法;git clone不使用 scp 语法。实际上,如果您不指定克隆协议,我相信它假定使用 git 协议而不是 ssh,这可能就是它要求您输入密码的原因。试试这个:

$ git clone ssh://gitosis@host/~/gitosis-admin.git
于 2009-05-25T14:57:45.930 回答
8

我也遇到了同样的问题“致命:'/gitosis-admin.git' 似乎不是一个有效的存储库。” 我搜索了很多问题并最终找到了解决方案。

实际上,gitosis 用户的默认地址是“/srv/gitosis”:就像我的设置有 ubuntu 服务器 10.04。

当我们编写“git clone gitosis@server.com:gitosis-admin.git”时,它会在 /srv/gitosis 中搜索 gitosis-admin.git 存储库。因此,当我进入 /srv/gitosis 内部时,我发现其中还有一个名为 repositories 的存储库,它由 gitosis-admin.git 存储库组成。

所以实际上默认情况下 gitosis-admin.git 不在默认位置。所以我必须修改命令路径,然后它工作正常。

我将存储库克隆到我的本地计算机上。我将命令用作:

“git clone gitosis@server.com:repositories/gitosis-admin.git”对我来说效果很好。

请参阅您的情况下的 gitosis-admin 目录,希望您能够解决您的问题。

于 2011-09-27T06:15:59.333 回答
6

这就是为我解决问题的方法(在 Ubuntu 上):

git clone gitosis@ns.home:/srv/gitosis/repositories/gitosis-admin.git
于 2011-10-22T05:02:22.213 回答
4

Gitosis 创建它自己的authorized_keys文件。如果您已经拥有该文件,请将其删除并允许 gitosis-init 重新创建它。完成后,不要弄乱文件。

于 2010-08-08T14:41:09.433 回答
2

我在ubuntu上遇到了同样的问题,

它与git clone ssh://git@serverName/absolutePath/gitosis-admin.git

于 2012-02-13T20:52:36.017 回答
2

我解决了一个类似的问题。这可能与您的情况不完全一样,但您可以尝试重新应用我所做的相同故障排除。

我意识到,当我为新用户推送密钥时,我得到了这个堆栈跟踪,这是 gitosis 的钩子无法处理新密钥的症状。

remote: Traceback (most recent call last):
remote:   File "/usr/local/bin/gitosis-run-hook", line 9, in <module>
remote:     load_entry_point('gitosis==0.2', 'console_scripts', 'gitosis-run-hook')()
remote:   File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/app.py", line 24, in run
remote:     return app.main()
remote:   File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/app.py", line 38, in main
remote:     self.handle_args(parser, cfg, options, args)
remote:   File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/run_hook.py", line 81, in handle_args
remote:     post_update(cfg, git_dir)
remote:   File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/run_hook.py", line 45, in post_update
remote:     config=cfg,
remote:   File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/gitdaemon.py", line 95, in set_export_ok
remote:     for (dirpath, repo, name) in walk_repos(config):
remote:   File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/gitdaemon.py", line 72, in walk_repos
remote:     assert ext == '.git'
remote: AssertionError

该错误仅显示ONCE,因此我天真地将其视为暂时失败。

实际上,Gitosis 仅适用于我的密钥,但不适用于我试图支持的任何用户。在~/.ssh/authorized_keys我找不到我以为我刚刚添加的用户的公钥中。这就是为什么我的朋友每次尝试克隆时都被要求输入密码的原因。

我通过将这两行添加到 Gitosis 配置中添加了调试gitosis.conf

[gitosis]
loglevel=DEBUG 

我不得不继续在 gitosis.conf 文件中添加和删除用户,以便再次触发挂钩。我的调试日志显示

remote: DEBUG:gitosis.gitdaemon:Deny 'syncShare'
remote: DEBUG:gitosis.gitdaemon:Walking 'legacy.d', seeing ['buildtools', 'QA_Dashboard']
remote: DEBUG:gitosis.gitdaemon:Walking 'legacy.d/buildtools', seeing ['.git', 'conf', 'scripts'] 
remote: Traceback (most recent call last): 
etc ...

啊哈!当钩子在存储库中执行“遍历”时,它找到了一个.git目录,legacy.d/buildtools而这正是assert ext == '.git'发生的地方。

我曾使用服务器存储来自其他存储库的简单克隆。注意,一个普通的克隆,而不是镜像或裸存储库。像每个克隆一样,它包含 .git 目录。

Gitosis 中的钩子不知道如何处理 .git 目录。它认为它是一个空名称的存储库并中止。一旦我消灭了那个克隆,一切都会恢复正常。

于 2014-01-03T17:37:32.927 回答
1

通常不需要编辑authorized_keys。

我曾经遇到过授权问题,即使我之前放置了我的公钥,gitosis 服务器也会不断询问我的密码。当我尝试提交并将更改推送到 gitosis 时,我意识到 gitosis 给了我一个警告“WARNING:gitosis.ssh:Unsafe SSH username in keyfile:'myuser@myserver.pub'”。

更改密钥文件和密钥文件名称中的 user@host 部分解决了我的问题。不知何故gitosis不喜欢以前的。

于 2012-05-15T18:13:48.453 回答
0

我终于让它像这样工作了

git clone ssh://git@host:1337/home/git/repositories/gitosis-admin.git

1337 端口 ssh 正在使用的位置。

于 2011-10-18T18:29:13.950 回答
0

同样的问题,就我而言,我在 .ssh/ 中有错误的授权密钥。我一定是在某个时候搞砸了...

于 2012-05-22T21:59:28.437 回答
0

搬到新的 Ubuntu 机器并自己遇到这个问题后,我在这里看到了几个答案,这些答案让我朝着正确的方向前进,即为每个存储库使用.git文件的绝对路径。

尝试了一下,我注意到相对于 git 用户主目录的路径也有效,它缩短了如下内容:

git@host:/var/git/repositories/project.git

向下

git@host:repositories/project.git

再玩一点,我尝试将项目文件从存储库移动到 git 的主目录;现在只需要项目:

git@host:project.git

这有点hacky,但我怀疑会造成任何伤害。很高兴知道发生了什么变化,因为我在另一个 Ubuntu(旧)上托管 gitosis 并且能够使用上面的最后一个符号将项目放在存储库目录中。

于 2012-06-24T22:13:24.467 回答
0

要更深入地了解身份验证问题,请收集详细的调试日志详细信息:通过使用

ssh -vvv gitosis@gitosis_host

直接手动连接技巧(最重要/一般来说,实际上使用最精确/直接的上下文引用;在这种情况下:实际的 ssh 机制而不是工具距离 - 因此必然不太精确 - git 处理!)。

于 2018-01-10T14:36:49.133 回答