2017-10-16 25 views
0

我有一個有幾個成員的團隊,我們的工作基於另一個GIT repo,我們不允許推送。我們稱之爲repoA。Git跟蹤外部/公共/遠程分支,同時合併到本地服務器

我們建立了自己的GIT服務器,回購最初是從repoA克隆的。我們稱之爲克隆回購庫。

我們的團隊致力於repoB,但repoA不斷髮展。維護repoA的團隊不關心我們的工作,也不希望我們的代碼「污染」他們的,但我們希望獲得他們的變化並將他們合併到我們的repoB中。所謂的「合併」可能有點奇怪:我們將repoA的大部分變化合併到我們的repoB中,但是保持一些代碼不變,比如我們爲自己的需求而改變的方法。

而且我還希望可以在'歷史樹'中看到合併,例如Git GUI的[Repository] ​​ - > [Visualize All Branch History]或者Tortoise Git的[Show Log],這樣我就可以清楚地知道,從哪一天起,我從repoA到我的repoB做了一個「同步」。如果我可以在Git GUI和TortoiseGit的歷史地圖中顯示「合併線」,會更好。

我知道這樣做,例如一些「醜陋」的方式:

  • 拉repoA的主人是我自己的主人,但我所有的團隊承諾,推動 到名爲「local_main」分支。總是將repoA的主人拉到我的 本地主,然後創建一個臨時分支'pick_change',然後 切換到'local_main'併合並'pick_change',然後在本地刪除分支 'pick_change',並將'local_main'推送到我的GIT服務器。

用這種方式,我可以:

  • 挑選有用的代碼到我的分支。
  • 保持代碼,我不想在那裏,不改變原產地/主
  • 清楚地看到一個「分支合併」曲線從主分支在Git的GUI或TortoiseGit的提交歷史圖表, 讓我的 「local_main」分支我知道有一個從 origin/master到我的'local_main'這個提交的合併。

但是,他們的任何'優雅'的方式呢?

我認爲這應該是一個非常普遍的需求,例如創建一個基於公共Linux項目的私有Linux核心,更改一些代碼,但仍然希望保持其他部分與公共Linux項目保持同步,並且清楚地顯示了在這個這個今天我們的項目與那個Linux核心版本一致的歷史。

這本書'ProGit'只是提供了一些概念,但似乎沒有詳細的解決方案。或者任何人都可以讓我知道我應該參考哪一章節?

+0

正常程序將獲取回購A,檢出回購B和合並回購A,對吧?可視化Git歷史記錄的工具(如GitHub的網絡圖)應顯示合併。 – timakro

回答

0

分行

  1. RepoA的master
  2. RepoB的pick_change
  3. RepoB的local_main,RepoB的
  4. 特性分支。

角色

  1. RepoB所有者,
  2. pick_change所有者,
  3. local_main所有者,
  4. 工人RepoB的。

master RepoA像A-B-C-D-E-F一樣。假設您的項目起始於C,因此RepoB所有者從C創建了local_mainpick_change

由於master繼續這樣C-D-E-F-G-H,您的團隊需要EG,所以pick_change所有者櫻桃挑選EGpick_change,並將它推到你的中央回購。 pick_change現在就像C-E'-G'

local_main所有者在必要時創建主題分支,例如dev_20171016,來自local_main的某個提交。然後工人下載dev_20171016並開始工作。他們將他們的提交上傳到dev_20171016。他們不允許直接更改local_mainpick_change,他們不需要關心RepoA的master。他們可以獲取local_mainpick_change並將其合併到他們的本地分支機構進行測試。不允許推送與local_mainpick_change合併的本地分行。

準備就緒後,將local_main所有者合併pick_changedev_20171016local_main--no-ff,推動local_main到你的中央回購。

由於RepoA不適用您的提交或更改,當您挑選提交至pick_change時,衝突很可能會出現。這可能很煩人。 pick_change所有者和local_main所有者最好啓用git rerere

相關問題