在Eclipse中使用原始项目时,如何处理项目分支?

时间:2018-10-27 17:14:30

标签: eclipse git github egit

我试图在GitHub上为项目“ original / QWERTY”创建拉取请求,因此我将存储库分叉到“ Mark / QWERTY”。在Eclipse中,我已经为“原始/ QWERTY”设置了存储库,并且该项目在我的工作区中,名为QWERTY。

现在,如果我创建一个指向“ Mark / QWERTY”的新存储库,那么我将有两个名称相同的项目,而我和Eclipse都不喜欢它。

我认为应该可以在存储库下有一个分支或另一个remote并在它们之间切换,而不要有两个副本(我的意思是只存储差异)。问题在于它们是GitHub上的不同项目,所以我不确定该怎么做。

设置两个GitHub项目以使用EGit在Eclipse中创建从我的叉子到原始项目的拉取请求的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

分叉存储库的通常工作流程是拥有一个本地存储库,该存储库具有一个工作目录,该目录配置为从多个远程存储库中提取和推送到多个远程存储库。

使用此设置,您可以在源自不同远程存储库的分支之间进行切换。

GitHub的Fork a repo文档解释了使用CLI Git时的设置。大多数情况也应适用于其他地方托管的存储库。

使用EGit文档,应该可以将这些说明转换为EGit中的相应操作。

此处介绍了如何使用EGit管理多个遥控器:https://wiki.eclipse.org/EGit/User_Guide#Remote_Repositories

答案 1 :(得分:1)

使用来自Rudiger的commentanswer的信息以及我对分支机构的反复试验,我做了自己的步骤。 This picture也有助于术语。

首先,以任意顺序执行以下两项操作:

  • 在github网站上分叉原始项目,所以现在您有了原始文件和fork。它们具有相同的代码和分支。
  • 在github上创建一个指向原始存储库的本地存储库。假设您决定仅选择master分支。
    • 远程处理:您将得到一个新的远程设备,我将其称为origin(默认)。如果尚未完成配置,则配置它,默认规范为+refs/heads/*:refs/remotes/origin/*。该参考规范将 all 的repo分支映射到同名的Remote Tracking分支。如果您只想获取master分支,请使用+refs/heads/master:refs/remotes/origin/master
    • 分支:您将获得一个名为“ origin/master”的“远程跟踪”分支和一个名为“ master”的本地分支,其配置为“远程:原始”和“上游分支:refs / heads / master”。您将在本地master下工作,因为它是当前唯一的分支。

现在,您希望能够按入您的叉子,以便创建PR。您可以并且确实已经从原著中撤出,可以继续从其他人的作品中获取更新。

  • 右键单击“ Remotes”并创建一个新的遥控器,我将其命名为fork(无论您需要什么名称)。配置其推送。
    • URI与origin远程URI指向原始叉的方式相同。
    • ref映射映射分支。如果尚未完成,请转到“高级”,然后单击“添加所有分支规范”。您应该获得规格refs/heads/*:refs/heads/*。使用此规范很容易,但是您可以将其更改为所需的任何内容。
  • 创建一个本地分支(右键单击->切换到->新分支),其源是名为master的本地分支,并且该分支的名称适合其用途。它可以是master分支,也可以是可以修复错误的新分支,因此bug 123。您没有远程跟踪分支,因为这些分支用于提取。如果您还从fork中拉出,则需要在远程fork中进行配置,并获得一个远程分支。
  • 现在您正在本地分支机构bug 123上(您可以在其旁边看到一个对号)。修复代码中的错误,并在Git Staging视图中,您应该看到文件已更改,并且标题为<Repository name> [bug 123] 。确保要提交/推送到正确的分支!暂存所需的内容并提交(将更改添加到本地分支bug123)并推送(如果您使用默认规范,则在github存储库上创建一个名为bug 123的分支)。
  • 现在转到原始文件或fork的GitHub回购页面,UI会告诉您可以创建PR。 GitHub将在那里指导您。

一旦PR合并到GitHubm上原始文档的master分支中,您将要从master获取。

  • 右键单击远程origin或其获取的“ subdir”,然后选择获取。将会获取远程分支 all 中的所有更改,因为我们使用的获取规范会映射所有分支(我们使用*字符)。

就是这样。继续切换到基于更新的master映射到您的fork的本地分支,修复错误,提交并推送,创建PR,等待合并到原始文件,从原始文件中提取和提取。