我的一般做法是有兩個分支,upstream
和master
。創建您的資源庫(將在master
分支中啓動您),檢入您使用的上游代碼的最新副本,然後使用git branch upstream
創建upsteram
分支。另外,創建一個標籤,指出您已導入的上游版本,如git tag wordpress-1.0
。我通常使用輕量級標籤(沒有任何註釋,基本上是指向修訂版的指針)。
[wordpress-1.0] Key: [tag]
v branch
* <- upstream * commit
^- master
現在,當你仍然在master
分支,複製更改並檢查這些在現在你有兩個分支,upstream
其中包含原始上游源,並master
其中包含你的變化,歷史記錄顯示您對upstream
所做的更改。
[wordpress-1.0]
v
* <- upstream
\
+--* <- master
使所有在master
分支的修改。
[wordpress-1.0]
v
* <- upstream
\
+--*--*--* <- master
當上遊代碼的新版本的時候,看看你的upstream
分支(git checkout upstream
),清除一切,但.git
目錄,並在新的上游版本複製。使用git add -A
可以對上游版本中的所有更改進行處理,提交併對其進行標記。
[wordpress-1.0]
| [wordpress-1.1]
v v
*--* <- upstream
\
+--*--*--* <- master
現在,檢出master
,併合並您的上游更改。此時,您可以選擇如何合併,如採用新的上游版本,採用您的版本,或者採用合併的更改,就像您在正常合併中一樣。
[wordpress-1.0]
| [wordpress-1.1]
v v
*--*--------+ <- upstream
\ \
+--*--*--*--* <- master
因此,所有的更改發生在master
,和所有上游版本正是致力於爲的是upstream
。這會讓你更容易地看到你的代碼與上游版本的區別,這將有助於跟蹤你已經與上游版本合併了哪些更改,等等。
[wordpress-1.0]
| [wordpress-1.1]
| | [wordpress-2.0]
v v v
*--*--------+--*-+ <- upstream
\ \ \
+--*--*--*--*----*--* <- master
希望這有助於,讓我知道如果您有任何進一步的問題。
我會對此建議,因爲重新佈局可能會導致很多問題。它失去了歷史(你不能回到以前實際部署的版本,也不能告訴你什麼時候進行了合併),並且讓工作分支一直重新分配,這使得你很難與之協作其他人,因爲現在他們還需要重新設計他們所做的一切。對於尚未與其他任何人共享的變化或者已知易變的變化,重新制作是最適合的變化,而不是在每次有新版本發佈時在上游對整個歷史進行重新設計。 – 2010-09-29 21:29:47
如果溝通失敗,重新激活可能會導致問題,但完全可以管理。如果您不保留對提交的引用,則歷史記錄將丟失 - 只需標記已部署的版本即可,並且不會丟失任何內容。 – dahlbyk 2010-09-30 05:18:05
在我們的案例中,rebasing似乎是一個很好的解決方案,因爲我們只將源代碼作爲壓縮包共享。沒有其他使用最終產品的開發人員像我們一樣對核心進行更改,因此不需要與其他人共享。 – 2010-10-01 16:59:47