windows - Egit - 获取、 merge 、 pull 麻烦

标签 windows linux eclipse git egit

好的,协议(protocol)如下。
我在 Debian (lenny) 远程服务器上安装了 Git。 Git版本有1.5.6.5。我打算将其用作远程共享/备份存储库。
我的开发机器运行的是 Windows,其中包含 EGit 的 Eclipse。所以,这就是我所做的:

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

当我从项目中删除几个文件,提交,然后尝试从远程 pull 时,“奇怪”的事情就开始了,期望恢复已删除的项目,因为推送到远程的最后一个快照包含所有文件。由于 pull 本质上是 fetch + merge ,似乎 EGit 在 merge 策略方面存在一些已知问题。尽管如此,我还是配置了 fetch,导致了以下 fetch 规范:

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

Fetch 一切顺利,至少看起来是这样,在远程主分支的本地存储库中创建了新文件夹,并且我注意到 FETCH_HEAD 也在那里。
通过 checkout 本地主分支,我尝试与远程主分支 merge ...结果是:

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

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

谢谢。

最佳答案

是的,你的期望是错误的。事实上,我重新阅读了几次之后才明白,您相信 Git 会以某种方式在心理上检测到您不想删除已显式删除的文件,并在 merge 操作期间恢复它们。如果您想要恢复这些文件,您应该恢复删除它们的提交,或者将文件从它们存在的版本复制到当前版本。

最重要的是,如果您所说的“EGit 历史 View ”是正确的,这可能意味着您已设置 pull 来执行rebase而不是merge 无论如何。在rebase中,粗略地假设自上次 pull 以来的更改应该像针对上游的当前版本一样应用。这对于其他人来说通常更容易理解,但如果许多人同时更改相同或相关的代码,则可能会令人困惑或彻底失败。

关于windows - Egit - 获取、 merge 、 pull 麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11048335/

相关文章:

node.js - 如何使用 bash 查看 process.env 的内容?

android - Facebook sdk key 哈希太短

windows - 将另一个批处理文件复制到“启动”文件夹中?

windows - 运行在特定的CPU上,而不是一个goroutine?

linux - 我如何检查该平台是 ubuntu 上的笔记本电脑还是台式机?

php - 从 php 调用 C 程序并读取程序输出

linux - bash 脚本的选项(对此全新)

java - spring boot如何使项目在eclipse中的服务器上运行

java - Android,播放音频剪辑的多个 ImageButtons

eclipse - Eclipse IDE for Java 中的 Ant 构建错误