EGit: 无法推送,无法拉取

12
我正在使用EGit,并向我的本地git存储库提交了更改。 我想将此更改推送到远程。 在执行此操作时,会弹出一个对话框屏幕,显示{{link1:"rejected-master-master-non-fast-forward"}}。该链接问题的答案指出,我必须先进行拉取。 在执行拉取时,会抛出EGit异常:
org.eclipse.jgit.api.errors.TransportException: Nothing to fetch.
    at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:139)
    at org.eclipse.jgit.api.PullCommand.call(PullCommand.java:253)
    at org.eclipse.egit.core.op.PullOperation$1.run(PullOperation.java:97)
    at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344)
    at org.eclipse.egit.core.op.PullOperation.execute(PullOperation.java:128)
    at org.eclipse.egit.ui.internal.pull.PullOperationUI.execute(PullOperationUI.java:139)
    at org.eclipse.egit.ui.internal.pull.PullOperationUI$1.runInWorkspace(PullOperationUI.java:114)
    at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Caused by: org.eclipse.jgit.errors.TransportException: Nothing to fetch.
    at org.eclipse.jgit.transport.Transport.fetch(Transport.java:1087)
    at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:130)
    ... 8 more

我好像卡住了,谁能帮我解决一下?
更新
我的代码库中的.git/config文件包含(远程URL隐藏):
[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
  ignorecase = true
[branch "master"]
  remote = origin
  merge = refs/heads/master
[remote "origin"]
    url = <URL_HIDDEN>

我正在使用 Eclipse Git Team Provider 3.4.1.201406201815

3个回答

29

仓库的配置似乎缺少 [remote "origin"] 部分中的这行代码:

fetch = +refs/heads/*:refs/remotes/origin/*

它告诉 Git 获取以 refs/heads/ 开头的所有引用(所有分支),并将它们存储在本地的 refs/remotes/origin/ 下。例如,远程仓库中的 refs/heads/master 将会在本地变成 refs/remotes/origin/master(或简写为 origin/master)。

你可以添加这行代码尝试一下是否可以使 pull 命令正常工作?

另外,了解一下你最初是如何创建/克隆此仓库的方式也会很有趣。


谢谢,这个有效。这行代码实际上是做什么的(我猜它定义了远程和本地repo之间的拉取规则)? 我不太记得我是以哪种方式创建repo的,但我知道[remote "origin"]部分是空的,我手动添加了url属性。 - MRalwasser
太好了!我已经在答案中添加了解释。嗯,我真的很想知道你是如何得到一个空的远程部分的。 - robinst
在 [remote "origin"] 下,我有正确的 URL 行,但是没有 fetch 行。无论如何,您的答案在硬重置后解决了问题。谢谢! - tozCSS
@robinst - 我知道这个问题/评论已经很久了 - 但是昨天我也遇到了同样的问题。我在Eclipse中创建了克隆,然后出现了这个问题。当我在命令行Git外部克隆时,它没有出现这个问题。 - adbdkb

4
我在使用egit时遇到了同样的问题,无法拉取更改。但是之前的答案帮了很大忙。现在,有两种方法可以更新配置文件。
  1. 直接在文件中进行更新:转到本地存储库位置/.git/,打开config文件并添加:

    [remote "origin"]

    url = YOUR_REPO_URL

    push = ALREADY_FILLED_VALUE

    fetch = +refs/heads/:refs/remotes/origin/

  2. 使用eclipse更新配置:转到Windows->Preferences->Team->Git->Configuration,现在在Repository Settings选项卡下查看->remote->origin。 问题在于没有fetch的关键字。 现在点击:Add Entry并提供以下值:

Key : remote.origin.fetch

Value : +refs/heads/:refs/remotes/origin/

现在我们完成了。


0

我曾经遇到过同样的问题,从远程仓库拉取时出现错误(org.eclipse.jgit.api.errors.transportexception)

这是我所做的:

  1. 将源更改为我的分支账户并进行拉取。
  2. 将源更改回实际值并进行拉取。

不太清楚egit的问题,但这两个简单的步骤解决了我的问题,希望能帮到你。


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