EGit:发出快进拉动〜如何在 EGit 中配置远程存储库的提取

EGit: Issuing a fast-forward pull ~ How to configure fetch for a remote repository in EGit

所以让我设置我的场景。我在 Spring 工具套件 (Eclipse 4.5.1) 中使用 EGit 4.1.1。我和精通技术的同事从远程 URL 克隆了相同的 git 存储库。我的技术娴熟的同事更喜欢命令行,他使用 VIM 进行文件修改,然后发出命令

git add .
git commit -m "Modified file"
git push

现在更改在远程存储库中。现在,我不太喜欢 CLI,更喜欢 GUI,我在 Eclipse 中使用 EGit。要接收更改,我右键单击项目(我最初使用 EGit 克隆的项目),转到团队 -> 拉,我被告知有“Nothing to fetch”。为了理智起见,我打开了 "Git Reflog" 视图,发现我同事的更改没有列出,我开始摸不着头脑。

所以我转到命令行并发出命令 git pull,瞧!它让我的同事更改:

remote: Counting objects: 27, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 14 (delta 4), reused 0 (delta 0)
Unpacking objects: 100% (14/14), done.
From git://hostname.domain.com/git-repo
 * branch            master     -> FETCH_HEAD
Updating 123ae12..68cd2f0
Fast-forward

更好的是,我回到 Eclipse,我在 "Git Reflog" 视图中看到了变化,列为

Commit   Commit Message     Date         Reflog Message
---------------------------------------------------------------
68cd2f0  Modified File      2015-12-23   pull: Fast-forward

所以,我觉得这里告诉我的内容让我相信有一个我不熟悉的 Git 概念 - 我可能只是想念它。所以...


编辑:为了解决 VonC 的回答,我添加了这个信息,它既是更多信息,也是这个问题的解决方案。

在命令行中,当我 运行(来自存储库)cat ./.git/.gitconfig 时,我得到以下输出:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
[remote "origin"]
        url = git://hostname.domain.com/git-repo.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

但是,当我进入 Eclipse 并查看获取配置时,它是空白的。

首先,reflog 在 获取之前不会向您显示任何内容(在命令行或 Eclipse 中):它记录来自 local 仅限克隆。

其次,check your .gitconfig to see how the remote origin is configured (also seen here).
你需要有一行来获取:

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

默认情况下,命令行 git fetch 将使用当前分支:

refs/heads/<head>:refs/heads/<branch>

添加到 VonC 的答案中,这意味着 我在使用 E[= 时最初为 git 存储库配置遥控器时错过了一个步骤 80=] 来配置它。因为我没有为 repo 配置 fetch,Eclipse 给我错误 "Nothing to fetch" - 也许它应该给我一个更有意义的错误,比如 "Fetch not configured for this repository. To configure, you must..." 也许我稍后会修复它,因为 E Git 是开源的。

要在 Eclipse (EGit) 中解决此问题,请执行以下操作:

  1. 确保Git 存储库 视图已打开。
  2. Select 特定的 git 仓库,并扩展它直到 remotes 中的特定远程被扩展:
  3. 右键单击 incoming 来源并选择 Configure Fetch
  4. 在对话框中,如果您看到根本没有配置提取,请在 Ref Mappings 窗格旁边 select Add
  5. 在对话框中,对于 Source,键入 refs/heads/*(尽管有 "Not found in remote repository" 消息。Select Next
  6. 对于目的地,确保填写refs/remotes/origin/*(可能auto-populate)。确保选中 即使数据可能丢失也更新本地存储库。单击 完成
  7. 现在,在您的 Configure Fetch 对话框中,您将看到新的 ref 映射:+refs/heads/*:refs/remotes/origin/*。这与 .gitconfig 文件中的内容相匹配。
  8. 现在,如果您打算稍后获取,请单击保存,或者如果您希望更新本地存储库,请单击保存并获取

我不完全确定为什么 EGit 没有自动执行此操作,也许这是另一天的问题。