在Eclipse中使用Egit如何同步主分支和远程仓库的主分支?

7

我创建了一个本地的git仓库,并使用以下命令将更改推送到我创建的gitosis远程仓库:

git init my_git
git remote add origin git@server:my_git
... various adds and commits
git push origin master:refs/heads/master

现在,我在Eclipse本地编辑并提交更改,在提交时,使用qgit查看到我的master分支移动到该版本。但是,它也向我显示origin/master处于先前的版本。命令行上的git status显示一切都是最新的。
$ git status
# On branch master
nothing to commit (working directory clean)

我可以通过以下方式看到不同版本之间的差异:

git diff origin/master

如果我在命令行中执行“git push”命令,那么qgit会显示“origin/master”分支现在与我的“master”分支处于同一位置。
我不知道如何配置eclipse中的“remote/push”或“remote/configure push to upstream”对话框,以执行与命令行“git push”相同的操作,将“origin/master”移动到与“master”相同的级别。
我总是必须使用命令行推送才能使“origin/master”达到与“master”相同的位置。
问题1:有人可以告诉我如何在eclipse中完成这个操作吗?
问题2:命令行版本的“git push”执行了什么操作而eclipse版本没有执行?
问题3:我的假设是“master”是本地HEAD指针,“origin/master”是远程服务器对当前HEAD的视图,这是正确的吗?

当你从Eclipse推送时,gitolite存储库中的master分支是否会更新? - Mark Longair
是的,看起来它已经更新了。我从Eclipse进行了推送,然后在其他地方克隆了gitolite存储库,我所做的更改都在我的新克隆中。origin/master仍然设置为以前的版本,这告诉我推送正在工作,并且origin/master不是远程服务器的HEAD。新克隆具有最新版本的“master”、“origin/master”,但也具有以前版本的“origin/origin/master”。 - Mark Fisher
1
你在新克隆中有一个 origin/origin/master 表明你可能不小心将 origin/master(而不仅仅是 master)推送到了 gitolite 存储库中的匹配名称。 - Mark Longair
谢谢,看起来我已经做了这个,现在我已经删除了远程origin/origin/master,并编辑了我的推送,只做'master'。 - Mark Fisher
2个回答

2
根据 egit文档 中的相关部分,您可以:
  • 点击 "添加所有分支规范" 按钮,将所有本地分支推送到与远程存储库中同名的分支上,或者
  • (更加安全的选项)只选择 "源参考" 和 "目标参考" 下的 master ,仅推送您的 master 分支。
origin/master 远程跟踪分支通常是通过 git fetch 更新的(这是 git pull 的一部分),但使用命令行 git 时,远程跟踪分支也会在成功推送到被跟踪的远程存储库中的分支时更新。可能是因为 Egit 基于纯 Java 实现之一的 git ,即 JGit,而不是基于命令行工具,所以无法以相同的方式更新 origin/master。如果是这种情况,您可以执行 获取操作 来更新 origin/master
更新:似乎这是 EGit 中已知的一个 bug(而不是基础 JGit),这里是 bug 报告:

太好了,fetch起到了作用。我想我明白为什么现在必须要本地移动origin/master了,这是一个特性还是一个bug呢?如果我刚刚推送了更改,我本地应该知道远程主分支在哪里,事实上我必须在第二步中询问它,这似乎很奇怪,而命令行正在做我更自然地期望发生的事情。 - Mark Fisher
是的,我也期望如此,并且我会称之为一个 bug。事实上,我刚在错误跟踪器中找到了这个问题:https://bugs.eclipse.org/bugs/show_bug.cgi?id=317411 - Mark Longair

1
一个更新,我之前使用的是Eclipse Helios,现在已经升级到Indigo,并且安装了最新版本的EGit,修复似乎已经生效,因为我不再需要在推送后进行拉取操作了。

嗯,我使用Kepler,并在本地repo“L1”上拥有远程裸repo“R1”,该repo位于另一个磁盘分区上。此外,我在U盘上制作了R的裸克隆“P”。在另一台计算机上,我从P中克隆了“R2”,然后使用repo“L2”将项目从R2检出到Eclipse中。它基本上用于通过U盘在两台计算机之间交换更改,并在两台计算机上备份裸repo。它看起来像这样: - Cromax

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