GIT克隆和第一次GIT推送问题

4
我有两个问题。我使用Ubuntu 10.10,并已安装带有gitolite工具的git服务器。一切都运行得很好。gitolite的gl-setup命令创建了2个存储库:gitolite-admin和testing。
1) 问题1
我的默认gitolite管理员用户称为“git”,已经创建好了。
首先,我必须克隆gitolite-admin存储库,进行一些更改,例如在conf/gitolite.conf中添加一些新存储库和新用户(我添加了root用户,并且我之前创建了私钥/公钥,并将公钥添加到keydir文件夹中),然后我必须添加/提交并推送更改回来。
信息:我的~git/.ssh/authorized_keys文件很好,以command=开头,只有一个值-我最初创建的git用户的公钥。
未能生效:
git@vs1:~/$ git clone git@<<SERVER_IP>>:gitolite-admin.git
Initialized empty Git repository in /home/git/ga/gitolite-admin/.git/
git@<<SERVER_IP>>'s password:
fatal: 'gitolite-admin.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

完成:

touch ~/.ssh/config

关于IT技术的翻译:

host gitolite
     user git
     hostname <<SERVER_IP>>
     identityfile ~/.ssh/git.pub

git@vs1:~/$ git clone gitolite:gitolite-admin
Initialized empty Git repository in /home/git/ga/gitolite-admin/.git/
Enter passphrase for key '/home/git/.ssh/git.pub':
Enter passphrase for key '/home/git/.ssh/git.pub':
Enter passphrase for key '/home/git/.ssh/git.pub':
git@89.35.160.243's password:
remote: Counting objects: 23, done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 23 (delta 4), reused 0 (delta 0)
Receiving objects: 100% (23/23), done.
Resolving deltas: 100% (4/4), done.

为什么第一种方法完全不起作用?所有的教程都说它应该没有任何问题。我不得不使用第二种方法,在~/.ssh/config文件中创建主机配置。这有点令人沮丧。仓库路径是/home/git/repositories,ssh默认端口为22。

2) 问题2

在同一台服务器上使用root用户,在/var/www/example.com/www中创建了一个空文件夹。我运行了git init,然后添加了一个文件(.gitignore),运行git add -A和git commit -m“...”。

然后我创建了远程路径origin:

git remote add origin git@<<SERVER_IP>>:myrepo.git

我运行了git push origin master,得到了以下结果:

fatal: 'myrepo.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

我尝试了各种方法来进行更改,例如将整个存储库路径放入其中(即使我在任何地方都没有看到过,因此这是不正确的),结果出现了以下错误:

Counting objects: 3, done.
Writing objects: 100% (3/3), 243 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: ENV GL_RC not set
remote: BEGIN failed--compilation aborted at hooks/update line 20.
remote: error: hook declined to update refs/heads/master
To git@<<SERVER_IP>>:/home/git/repositories/myrepo.git
 ! [remote rejected] master -> master (hook declined)
error: failed to push some refs to 'git@<<SERVER_IP>>:/home/git/repositories/myrepo.git'

我做错了什么?这个基本任务让我感到非常沮丧,因为我遇到了不寻常的困难。我在使用SVN方面有很丰富的经验,但这是我第一次使用GIT。

非常感谢您的帮助!

1个回答

1

注意1/: 如果identityfile是默认名称(id_rsa.pubid_rsa),那么这可能有效。但由于不是这种情况,所以必须使用config文件。

注意2/ 您已经创建了一个git repo,但您是否让gitolite知道它的存在?
应该在gitolite-admin repo的配置文件中声明新的repo

如果您正在使用root进行ssh推送,那么这意味着该用户拥有自己的~/.ssh/id_rsa(.pub)密钥,并且这些密钥已注册到Gitolite。

关于repo路径的注意事项:永远不要使用repo的完整本地路径作为推送/拉取地址:这将完全规避Gitolite。


经过无数的评论后,似乎:

  • 所有远程地址都应该以git@somehostname:arepo.git开头:您希望用户在somehostname上以“git”(负责git和gitolite的帐户)身份执行git命令。
    这意味着“myuser”的公钥需要在somehostname:~git/.ssh/authorized_keys上注册。

  • 每当SSH连接不按您的方式进行时,您可以从这些ssh调试提示开始查找。
    例如:ssh -vvv git:somehostname可以很好地说明正在发生什么

  • 如果您想避免使用config文件,则需要使用这些公共/私有密钥的标准命名约定(~myuser/.ssh/id_rsa~myuser/.ssh/id_rsa.pub


1
好的,但这很奇怪,所有教程(几乎)甚至他们的文档都没有提到创建那个~/.ssh/config文件对于用户git是必要的。现在我清理了所有安装并重新安装了一切。我重新创建了用户“git”,没有密码,因为我认为这是可以的,因为我们使用私钥/公钥登录到ssh(还使用那个~/.ssh/authorized_keys文件)。现在,当我尝试克隆gitolite-admin repo时,它会因为它一直请求我的密码(而不是使用公钥)而失败。 - Valentin Tudor
2)是的,该仓库之前已经被创建,它位于存储库文件夹中,并且用户root已被添加到该仓库并赋予了RW+权限。 - Valentin Tudor
@ValentinTudor 2) 那个错误信息 (fatal: 'myrepo.git' does not appear to be a git repository) 意味着你的 pubkey (用于 root) 绕过了 gitolite 直接进入 shell (再次参考 http://sitaramc.github.com/gitolite/sts.html#ssh_troubleshooting_common_ssh_problems_)。 - VonC
我看了你指出的这些文档。所以这是最后一个问题。假设我在同一台机器上有一个名为“myuser”的用户,该机器既是服务器又是客户端。我创建了名为“myrepo”的新存储库,将用户添加到存储库中 - 一切正常。但是当我执行cd somedir、git init、<<add_edit_stuff>>、git remote add origin myuser@somehostname:myrepo.git和git push origin master时,它失败了。所以它绕过了gitolite,要求我输入myuser@somehostname的密码(这是不应该的,因为我已经安装了相同名称的公钥)。我做错了什么?我需要再次处理配置文件吗? - Valentin Tudor
我必须提到用户"myuser"已成功分配到仓库"myrepo"(具有RW+权限),公钥myuser.pub已复制并推送回keydir文件夹,在尝试git init和将第一个文件推送到新创建的仓库之前。 - Valentin Tudor
显示剩余10条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接