使用EGit和Bitbucket无法推送代码

11

我一直在尝试使用EGit和Bitbucket启动一个项目,但是我无法将项目推送到服务器上的仓库。这是我遵循的步骤(我会尽可能具体地说明,以便其他人可以将其用作教程模式;即使对我没有用,它也可能适用于其他人):

1)我使用此教程在Ubuntu 12.10上安装了Git。

2)按照GitHub的此教程操作。

  • 在Eclipse中启动新的C++项目
  • 在窗口 > 首选项 > 一般 > 网络连接 > SSH2 > 密钥管理选项卡下,生成了一个新的RSA密钥,并将其添加到我在Bitbucket上存储库的部署密钥列表中。
  • 右键单击eclipse项目:Team > 共享项目; Team > 添加到索引 ; Team > 提交
  • 窗口 > 显示视图 > 其他 > Git > Git Repositories
  • 右键单击Remotes > 创建远程 > 勾选“配置推送”,并输入我的项目名称
  • 添加Push URL:ssh://git@bitbucket.org/myuser/myrepository.git,协议:ssh; 端口:空白; 用户:git; 密码:空白
  • 在Ref映射下点击高级按钮,并选择“master”版本。如果此步骤成功,则表示已正确配置Bitbucket和EGit中的RSA密钥。否则,将显示连接错误。

所有事情都完成了。但是,当我按“推送”按钮时,我会收到以下错误:

ssh://git@bitbucket.org/myuser/myrepository.git: push not permitted

我尝试了所有可能的配置:切换到新的工作空间,更新Eclipse,创建新的仓库,重新安装Git... 有什么建议吗?


1
我认为这是因为您在BitBucket中将公钥存储在“部署密钥”中(其描述为:“使用部署密钥获得对此仓库的只读访问权限...”<-请注意只读一词)。 因此,请通过单击您的头像和“管理帐户”将密钥存储在“SSH密钥”中。 - Olivier J.
我的观点是:我已经使用SourceTree一段时间了,而不是EGit。如果你从未尝试过Eclipse之外的客户端,请试试。http://www.sourcetreeapp.com/ - Rudolf Real
6个回答

11

好的,我终于找到了一种使用方法。

只需要更改认证模式就行了。如果使用HTTPS链接而不是SSH链接,一切都可以完美地工作。看起来SSH只能以只读模式工作。

SSH/HTTPS selection

当然,身份验证方法是不同的:您需要输入密码,存储在Bitbucket中的SSH密钥已不再必要。

对于那些遇到EGit问题的人,我建议按照eugener的方式自动配置EGit。然后,您只需选择HTTPS作为身份验证模式即可推送存储的提交。


我的个人经验证实了Emiliosg所说的,即我在使用SSH连接到BitBucket时遇到了很多困难,我仍然无法让它正常工作,但使用HTTPS却非常容易。 - I Like to Code
谢谢,这真是让人头疼。我找到了一种更简短的方法,在 Egit 配置中只需将 ssh:// 替换为 https:// 即可,无需克隆。 - Rudolf Real

3

在Eclipse中配置远程Git仓库有一种更简单的方法:

  1. 在BitBucket上创建一个空仓库
  2. 复制仓库的URL
  3. 使用"Git Repositories"视图将仓库克隆到您的计算机上。
  4. 将项目共享到新克隆的仓库中。

由于仓库已经被克隆,远程设置已经自动配置。这意味着您可以立即进行推送操作。


我可以轻松地克隆存储库。在克隆后,一切都会自动配置,但它仍然会出现错误:无法连接到任何URI:ssh://git@bitbucket.org/myuser/myrepository.git(ssh://git@bitbucket.org/myuser/myrepository.git: push not permitted) - EmilioSG
你是否尝试使用与创建仓库时不同的用户ID进行连接?如果是这种情况,你可能没有该账户的“写入”权限。 - Eugene Ryzhikov
你可以尝试另一种方式,即使用Eclipse的SSH首选项创建新的SSH密钥,然后将其应用于你的BitBucket账户。 - Eugene Ryzhikov
这正是我正在使用的。我使用的用户是“git”,因为我正在使用SSH,所以不需要密码。 - EmilioSG

0

我使用Bitbucket这种方式:

  1. 在Bitbucket中创建一个存储库
  2. 使用https URL克隆空存储库
  3. 使用Team -> Share选项将项目连接到存储库,并选择您克隆存储库的位置
  4. 索引(暂存)您的项目文件
  5. 提交并推送

0

0
在这个特定的情况下,我同意原始问题下Olivier J.评论中的解决方案。
但是我遇到了类似的问题,但是它是由其他原因引起的。我解决了它,以下是发生的事情:
  1. 我一直在使用 Bitbucket(A)上的一些私有存储库,使用某个用户帐户和某个公钥(X)来访问它。我已经将密钥 X 加载到我的 pageant Putty 密钥链中。

  2. 然后我创建了一个新的公共存储库(B),也在 Bitbucket 上,使用不同的用户帐户和另一个公钥(Y)。我也将这个密钥添加到了 pageant 中。

  3. 当我尝试访问存储库 B 时,显然使用的是公钥 X 而不是 Y,因为对于 SSH 客户端,这两个连接是相同的 - 在同一主机(bitbucket.org)上的相同用户(git)!并且首先使用密钥 X,因为..它是先加载的吗?或者可能是因为它的名称按字母顺序排列在前面?我不确定,但结果是...

  4. 只要存储库是公共的,并且任何有效的 Bitbucket 用户密钥都足以获得此类访问权限,就可以使用 X 对 B 进行只读访问!

  5. ..但写入(推送)需要使用密钥 Y,而 SSH 没有使用它。

所以一般的提示是:解决通过SSH访问时出现的奇怪只读Git错误,请仔细检查SSH实际使用的私钥
我通过每次只在pageant中加载一个密钥 - X或Y - 来解决了这个问题,但我希望能够更加智能地解决它 - 如果您知道如何解决,请在评论中告诉我!

0

嗨,马克,我只是在.gitconfig文件中的[user]下配置了姓名和电子邮件。 - EmilioSG

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