我正在运行 Debian 系统,最近使用 DEB 包安装了 gitolite。
这是我的问题:
我试图克隆 gitolite-admin.git 存储库(用于为您希望 gitolite 为您管理的所有存储库配置 gitolite 安装)。
我的第一次尝试完全按照说明进行:
git clone gitolite@server:gitolite-admin
我收到以下错误:
fatal: 'gitolite-admin' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
注意:如果我用 gitolite-admin.git 替换 gitolite-admin,也会发生同样的事情,
但是,当我执行以下操作时:
git clone gitolite@server:~/repositories/gitolite-admin.git
此行成功将存储库克隆到我的本地工作站。
现在,我可以毫无问题地将额外的文本添加到文件路径,但是文档告诉我这是不正确的。
以下链接(http://sitaramc.github.com/gitolite/doc/3-faq-tips-etc.html) 指出“在 git clone 中的 repo 名称开头添加 repositories/”是一个常见错误。它还指出“实际上 gitolite 会在内部添加 $REPO_BASE,因此您不应该做同样的事情!”
我的 .gitolite.rc 文件包含 $REPO_BASE 的以下行:
[Located in /home/gitolite/.gitolite.rc]
$REPO_BASE="repositories";
我的问题是,我的配置有什么问题,导致 $REPO_BASE 不能添加到我的 git clone 前面?
如果您需要任何进一步的信息,请留下评论说明您需要什么信息,我会很乐意为您效劳。
其他说明:
- git 版本:1.7.2.3
- gitolite 版本:1.5.4-2~bp(这是来自 lenny-backports,因为我使用的是 Debian Lenny,而 gitolite 不是 Lenny 的标准配置)
- Debian 的安装会创建用户“gitolite”来管理 gitolite 存储库。
答案1
能够访问gitolite@server:~/repositories/gitolite-admin.git
,但不能gitolite@server:gitolite-admin
访问,表示您没有“通过”Gitolite,而只是使用基于 SSH 的普通访问 gitolite 用户。
如果ssh gitolite@server echo normal access
结果为normal access
,则您使用的密钥不限于通过 Gitolite。如果您通过 Gitolite,则会看到类似 的内容bad command: echo normal access
。
如果您拥有一个用于通过 SSH 进入 gitolite 用户本身的密钥,并且尝试使用该密钥以 Gitolite 用户身份进行身份验证,则可能会发生这种情况。gitolite 中将存在一个“正常访问”密钥,.ssh/authorized_keys
没有任何特殊前缀。配置为通过 Gitolite 的密钥的行将以 开头command="/path/to/gl-auth-command gitolite-username",…
。
如果你需要对 gitolite 用户和 Gitolite 进行正常的基于 SSH 的访问,那么你应该为这些目的设置单独的密钥,以便你可以IdentityFile
在.ssh/config
文件中指定要使用哪个密钥(IdentitiesOnly
如果你发现远程控制使用了“错误”的密钥,只是因为你已经在ssh 代理)。
例如:
使用您的某个“默认”键(其中一个远程控制的默认值(例如~/.ssh/id_rsa
)或您通常在您的ssh 代理)访问 Gitolite(即你在活动中拥有公钥keydir/your-gitolite-user-name.pub
)。
生成~/.ssh/gitolite-user
用于直接登录 gitolite 用户。用于ssh -i ~/.ssh/gitolite-user gitolite@server
登录。或者,添加自定义条目到~/.ssh/config
:
Host gitolite-user
User gitolite
HostName server
IdentityFile ~/.ssh/gitolite-user
IdentitiesOnly yes
因此您只需ssh gitolite-user
登录即可。
答案2
我遇到了同样的错误:
fatal: 'gitolite-admin' does not appear to be a git repository
该 repo 已经正常运行,但按照 gitolite 恐慌部分的建议,使用服务器上的克隆回滚后,repo 中的几个文件的所有者为 root,而不是 gitolite3。
gitolite-admin.git# ls -l
total 48
drwx------ 2 gitolite3 gitolite3 4096 Mar 27 2012 branches
-rw-r--r-- 1 gitolite3 gitolite3 6 Mar 27 2012 COMMIT_EDITMSG
-rw------- 1 gitolite3 gitolite3 119 Jul 12 2013 config
-rw-r--r-- 1 gitolite3 gitolite3 73 Aug 25 2013 description
-rw-r--r-- 1 gitolite3 gitolite3 128 Aug 23 20:44 gl-conf
-rw------- 1 root root 23 Aug 26 13:45 HEAD
drwx------ 2 gitolite3 gitolite3 4096 Aug 25 2013 hooks
-rw------- 1 root root 605 Aug 26 13:45 index
drwx------ 2 gitolite3 gitolite3 4096 Mar 27 2012 info
drwxr-xr-x 3 gitolite3 gitolite3 4096 Mar 27 2012 logs
drwx------ 83 gitolite3 gitolite3 4096 Aug 26 14:01 objects
drwx------ 4 gitolite3 gitolite3 4096 Mar 27 2012 refs
解决方法是将所有权改回 gitolite3。
gitolite-admin.git# chown -R gitolite3:gitolite3 *