2014-10-27 70 views
3

我剛剛開始使用git(多年後使用svn),所以我可能缺乏一些基礎知識。git - 跟蹤或從多個遙控器拉

我正在使用Raspberry Pi進行項目。碰巧,我正在使用它的一個設備似乎在內核中有一個錯誤的驅動程序,所以我正在嘗試調試它。

我已經開始使用官方RPi內核,從here。這個內核並不完全是最新的,儘管它並不太落後。我需要使用這個內核,因爲根據文檔,它包含一些特定於樹莓派的驅動程序等。

但是,由於我試圖解決一些問題,我想我應該從最新的內核開始,也就是我正在研究的驅動程序的wireless-testing回購。

因此,我想要做的是將所有已經提交給無線測試回購的提交應用到RPi回購中。

如果可能的話,如果我可以將從無線測試中提交的提交限制爲僅影響特定目錄樹的提交,那麼這將是理想的,因爲我懷疑這會減少兩個回收之間某種衝突的可能性我正在拉。

最後,我希望能夠繼續跟蹤RPi回購,以便能夠從那裏拉動變化。

實現此目標的最佳工作流程是什麼?

回答

0

您可以將它們分別作爲遙控器和git fetch分別添加。

如果它們在同一分支上,則需要進行合併/重新綁定並解決任何合併衝突。

如果你需要結合兩個分支的信息,在兩個拉到你想要的分支(與樹莓派驅動程序的東西),做混帳合併或git rebase(區別是一個長話題話題)並根據需要解決任何合併衝突。

參見:

http://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows

git branch, fork, fetch, merge, rebase and clone, what are the differences?

+0

謝謝!可以預見的是,拉時有很多衝突。有什麼辦法可以只提取影響工作副本中特定目錄的提交? – harmic 2014-10-27 11:47:48

0

做一個簡單的抓取和合並導致了很多矛盾,其中沒有影響我想司機調試。如問題所示,我真的想限制我正在合併的那些提交給那些影響這個特定驅動程序的提交。

我找到了一種方法來做到這一點。關鍵是git cherry-pick命令。

首先添加上游回購作爲遠程,並獲取從它:

git remote add wireless-testing git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git 
git fetch wireless-testing 

現在我有兩個遙控器,origin(RPI的內核回購我原先克隆)和wireless-testing,更上游回購,我想要從中改變。

下一頁檢查出你想從(在我的情況下,RPI RPI-3.17.y分支)開始,並掀起了新的本地分行根據它的起源的分支:現在

git checkout rpi-3.17.y 
git checkout -b rtlfix 

,以得到無線測試回購的提交,這是未來我的分支的名單,但只考慮犯下了影響特定的目錄樹:

git log wireless-testing/master ^HEAD -- drivers/net/wireless/rtlwifi 

這意味着「顯示日誌提交的開始當先無線測試/主設備,當你到達當前局域網主管時停止牧場,只考慮目錄drivers/net/wireless/rtlwifi下的文件/目錄「。

已經證實,確實是你想要的清單,你可以繼續使用摘櫻桃命令應用它:

git rev-list --reverse wireless-testing/master ^HEAD -- drivers/net/wireless/rtlwifi | git cherry-pick --stdin 

的第一個命令輸出以相反的順序提交的名單,他們是管道進入櫻桃挑選命令,然後應用給定的提交。

這種方法有一些注意事項。其中一個特別的情況是,如果您採取的任何提交都依賴於其他未提交的提交所做的更改,那麼最終將導致無法編譯和/或工作的軟件。然後您可能需要引入其他提交來解決這些問題。