2012-06-12 63 views
7

我正在一个项目上工作,我有一个中央git回购。这个项目是一个骨架,成为许多叉子的基线。Git Tracking Upstream

是否有可能配置我的本地工作仓库的叉子跟踪项目的中心作为起源和追踪骨架的主作为一个单独的分支名为上游追踪骨架的主人,以樱桃挑选骨架的变化?

我猜我希望我的工作流程是这样的:

创建骨架>>从叉子叉2 >>骷髅骨架中取不同>>叉1个取不同的骨架

有没有更好的处理做我所描述的?

回答

7

阅读的“Step 3: Configure remotes” GitHub的“叉回购”页面(我知道你没有提到GitHub上,但它仍然是相关的)

  • origin是前叉的远程地址,即当地克隆可以从拉/推到
  • upstream是你原来的回购Skeleton的远程地址(你可以用git remote add upstream https://..../Skeleton.git它添加)

所以上游是不是一个分支。

但是你可以定义一个本地分支这将对上游分支从上游回购远程跟踪分支主,与git branch

git branch --set-upstream upstream_master upstream/master 

但是,你并不需要一个本地分支,特别是如果你将永远不会做出新的承诺:你可以直接比较你的主人upstream/master,在git fetch upstream之后,从upstream/master挑选你需要的东西。

+0

这就是我想要做的事情的提示这个问题。在git remote add upstream/srv/repos/git/skeleton.git之后,命令'git branch --set-upstream upstream_master upstream/master'不会直接工作。这是为什么?我意外纠正了尝试排除故障的问题。我并不完全想在我的主工作树上运行'git fetch upstream',但使用它进行故障排除然后允许我将远程跟踪分支添加到上游/主设备。我想这是因为直到那时远程分支上游/主站才在我的回购站中。 'remote add'后直接加入 –

+0

?您首先需要一个'git fetch upstream',以便获取远程跟踪分支'upstream/master'并将其放入您的本地仓库。 'git fetch'不会修改任何本地文件。 – VonC

1

根据你的描述,你应该变基上时,它改变了骨架的叉子,使用

$ git rebase upstream 

这将如下

initially: 
1 - 2 - 3 <- upstream 
     \- 4 <- fork 

upstream changes: 
1 - 2 - 3 - 5 - 6 <- upstream 
     \- 4 <- fork 

after rebase: 
1 - 2 - 3 - 5 - 6 <- upstream 
       \- 4 <- fork 

换句话说变换的情况下,你的叉子将看起来好像它是从skeletton的最新版本中分离出来的。

这种方法的缺点是它改变了叉子的历史......如果你不想这样做,你可以将上游合并到叉子中(无需挑选我认为的)。

+0

如果在fork之后和rebase之前在上游移除文件,当git对这些文件应用更改时会发生什么? –

+0

如果您没有修改这些文件,它们会在重新绑定时被删除。如果您修改了它们,则会产生冲突,需要手动解决。 – Sjlver