2009-09-05 60 views
32

我正在貢獻一個在Github上託管的相當小的開源項目。爲了讓其他人可以利用我的工作,我已經在Github上創建了自己的分支。儘管Github選擇了術語,但我不希望完全偏離主要項目。但是,我並不期望或希望我的所有工作都被接納到主要的存儲庫中。但是,其中的一些已經被合併到主要的存儲庫中,我預計這會繼續。我遇到的問題是如何最好地將我們的兩棵樹保持在可以輕鬆共享代碼的狀態。開源項目上git倉庫的最佳實踐

某些情況下,我還是會遇到包括:

  • 我承諾稍後接受 到主存儲庫中的代碼。當我將來從此存儲庫中取出 時, 我的提交被複制到我的 存儲庫中。
  • 我將永遠不會被接受的代碼提交到主存儲庫中。當我將來從這個存儲庫中取出時,這兩棵樹已經發散並且修復很困難。
  • 另一個人過來並將他們的工作基於我的存儲庫。因此,我應該儘可能避免更改我推送的提交,例如使用git rebase。
  • 我希望將代碼提交給主存儲庫。理想情況下,我的更改應該可以輕鬆轉換爲可以直接並乾淨地應用於主存儲庫的修補程序(理想情況下使用git format-patch)。

據我可以告訴有兩個,或者可能三種方式來處理這個問題,沒有一個工作特別好:

  • 通常基於關閉的頭部運行git變基,以保持我的變化上游存儲庫。通過這種方式,我可以消除重複的提交,但通常必須重寫歷史記錄,從而導致希望從我的工作中獲得工作的人員出現問題。
  • 經常將上游存儲庫更改合併到我的。這在我的最後工作正常,但似乎並不容易將我的代碼提交到上游存儲庫。
  • 使用這些的一些組合,並可能git櫻桃採摘保持秩序。

其他人在這種情況下做了什麼?我知道我的情況類似於各種內核貢獻者和Linus主要存儲庫之間的關係,所以希望有很好的方法來處理這個問題。儘管我對git相當陌生,所以還沒有掌握所有的細節。最後,特別是由於Github,我的術語可能不完全一致或不正確。隨時糾正我。

+0

請注意,即使你(力量)推動你的基礎改變,其他人也可以輕鬆拉動rebase來更新。這只是另一個歷史不斷被改寫的研討會。最重要的是,你需要更小心一點,因爲強制推動能夠消除所有的東西:) – rubenvb 2018-01-30 07:27:59

回答

17

一些提示我已經從一個類似的情況得知:

  • 對上游作者的作品遠程跟蹤分支。
  • 每隔一段時間將此跟蹤分支更改爲主分支。
  • 爲您正在處理的每個主題創建一個新分支。這些分支通常應該僅限於本地。當你從上游變成主人時,重新標記你的主題分支來反映這些變化。
  • 當你完成了一些主題工作,合併到主。通過這種方式,從您的工作中獲得工作的人不會看到過多的重寫歷史,因爲重整發生在您當地的主題分支中。
  • 提交更改:您的主分支將基本上是一系列提交,其中一些與上游相同,其他都是您的。後者可以作爲補丁發送,如果你想。

當然,您選擇的分支名稱和遙控器是您自己的。我不確定這些場景是否詳盡,但它們涵蓋了我的大部分障礙。

+0

在我問這個問題的時候,我已經獲得了很多Git的經驗,並且已經大約解決了這個問題作爲最好的答案。關鍵在於將開發中的變化保持爲本地提交。絕對是一個非常好的提示。謝謝。 – orangejulius 2009-09-17 05:06:09

+0

你有沒有在多臺計算機上工作過主題分支?如果是這樣,你做了什麼? – 2009-10-13 02:18:43

+1

不,我沒有在跨計算機的主題分支上工作,但它不是「跨計算機」部分是困難的。這就是「跨越人羣」。您可以輕鬆地將主題分支推送到服務器,這樣_you_就可以使用它。 – sykora 2009-10-13 02:36:06