2012-08-16 53 views
2

試圖在此處弄清楚這一點。嘗試將最新的linux 3.0更改(3.0.41)合併到我正在基於HTC源代碼(3.0.8)開發的內核項目中。我下載了源文件,提交了基本文件,將linux-stable樹添加爲遠程文件,並嘗試將它與'git merge linux-stable/linux-3.0.y'合併。在答覆中,我給出了:將Linux更改合併到Android內核項目

錯誤:未經記錄的工作樹文件'Documentation/DocBook/dvb/dvbstb.pdf'將被合併覆蓋。正在中止

哪個是.gitignore中的文件。如果我git添加-f該文件,它只是與.gitignore中的下一個文件的錯誤。有沒有辦法讓我乾淨地合併這些沒有這些錯誤?我不想通過提交進行提交,因爲會有數千個提交進行合併。

+0

將文件添加到'.gitignore'之後,您是否運行過'git rm --cached'? – Christopher 2012-08-16 12:33:27

+0

該源實際上帶有.gitignore。 git rm --cached什麼都不做,只是帶來了一些標誌。你的意思是git rm。 --cached? – user1602600 2012-08-16 18:57:44

+0

文件本身。詳細信息在這裏:http://stackoverflow.com/a/4858141/877115 – Christopher 2012-08-16 20:03:09

回答

0

首先,如果您可以找到HTC源代碼作爲現有的git存儲庫,那麼您將會得到更好。在手動構建的樹中缺少適當的git歷史記錄不可避免地會導致衝突。 HTC的源代碼實際上是一個關於vanilla Android的分支,這大概是一個關於vanilla Linux的分支,但是如果沒有完整的歷史,git可以嘗試比有效的雙向合併更好的嘗試,因爲它沒有共同的祖先爲了做一個適當的三路合併。所以除非你是一位能夠處理這些衝突的有經驗的內核程序員,否則我希望你會遇到很大的困難。

無論如何,如果獲得完整的歷史是不可能的,你的樹木將不會有一個共同的根,所以你需要諮詢How do I join two git repos without a common root, where all modified files are the same?

關於.gitignore問題,如果你有在3.0.8樹被忽略,但跟蹤在3.0.41三個文件,然後它聽起來就像你有.gitignore文件之間的不匹配在每個樹,所以你應該比較他們試圖弄清楚爲什麼,並決定應該跟蹤什麼,什麼不應該。 3.0.41樹中的git blame .gitignore可能對此有所幫助。 3.0.41樹將是這兩個存儲庫中更權威的,因爲它具有完整的歷史記錄並且內部將保持自我一致,因此您可以在初次導入提交之前將其.gitignore移植到3.0.8樹中。另外請注意,樹中的任何位置都可能存在.gitignore文件,而不只是在頂層(如果Linux內核這樣做,我不知道)。