2012-06-12 65 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