EGit - 获取,合并,拉动麻烦

时间:2012-06-15 09:47:55

标签: windows linux eclipse git egit

好的,这是交易 我在我的Debian(lenny)远程服务器上安装了Git。 Git版本有1.5.6.5。我打算将它用作远程共享/备份存储库 我的开发机器正在运行Windows,我的Eclipse带有EGit。所以,这就是我所做的:

  • 为git创建共享用户。
  • 设置SSH(在Eclipse和服务器上),交换公钥等,一切顺利。
  • 我创建了远程仓库并使用 git --bare init 对其进行了初始化。
  • 在本地仓库中创建项目,成功完成了一些更改和提交。
  • 从本地仓库推送主分支到远程主站。到目前为止一切顺利。
  • (另外,在第三台机器上,我克隆了远程仓库(通过EGit导入),没有任何问题。)

当我删除项目中的几个文件提交,然后尝试从远程执行时,“奇怪”的内容开始了期望恢复已删除的项目,因为推送到远程的上一个快照具有所有文件。由于 pull 基本上是 fetch + merge ,所以似乎EGit有一些关于合并策略的已知问题。不过,我配置了fetch,导致了以下的获取规范:

refs/heads/master:refs/remotes/amrtest1/master

Fetch没问题,至少看起来是这样,在远程主分支的本地仓库中创建了新文件夹,我也注意到FETCH_HEAD也在那里。
使用签出的本地主分支,我尝试与远程主机合并...结果是:

  • 本地删除的文件已恢复。
  • 在Synchronize透视图中,我可以看到丢失的文件(在传出模式下?)
  • 在EGit的历史记录视图中,提取操作按时间顺序本地提交之前(删除文件后),这当然不正确。

我在这里做错了吗?基于所描述的过程,我对恢复状态的期望是否无效?如果是这样,那将是什么样的(恢复状态远程仓库,或者至少将其与现有本地正确合并)?

感谢。

1 个答案:

答案 0 :(得分:2)

是的,你的期望是错误的。事实上,在我掌握之前需要多次重读,你相信Git会以某种方式在心理上检测到你不想删除显式删除的文件并在合并操作期间恢复它们。如果你想要恢复文件,你应该恢复删除它们的提交,或者将文件从它们存在的版本复制到当前版本。

最重要的是,如果你对你所谓的“EGit的历史视图”是正确的,这可能意味着你已经设置拉动来执行 rebase 而不是 merge < / em>无论如何。在 rebase 中,大致假设自上次拉取以来的更改应该应用于当前版本的上游。对于其他人来说,这通常更清晰,但如果很多人在那段时间内更改相同或相关的代码,则可能会让人感到困惑或失败。