2

ここでこれを理解しようとしています。最新の Linux 3.0 の変更 (3.0.41) を、HTC ソース (3.0.8) に基づいて作業中のカーネル プロジェクトにマージしようとしています。ソースをダウンロードし、ベース ファイルをコミットし、linux-stable ツリーをリモートとして追加し、「git merge linux-stable/linux-3.0.y」とマージしようとしました。応答で、私は与えられます:

エラー: 追跡されていない作業ツリー ファイル 'Documentation/DocBook/dvb/dvbstb.pdf' は、マージによって上書きされます。中止しています

これは .gitignore のファイルです。そのファイルに git add -f を実行すると、.gitignore 内の次のファイルでエラーが発生します。これらのエラーなしでこれをきれいにマージする方法はありますか? マージするコミットが何千もあるため、コミットごとにコミットしたくありません。

4

1 に答える 1

0

まず、既存の git リポジトリとして HTC ソースを見つけることができれば、はるかに有利になります。手動で作成したツリーに適切な git 履歴がないと、必然的に競合が発生します。HTC ソースは事実上、バニラ Android からのブランチであり、これは (おそらく) バニラ Linux からのブランチですが、完全な履歴がなければ、共通の祖先を持たないため、git は効果的な双方向マージに勝るものはありません。適切な 3 者間マージを行うためです。したがって、これらの競合を処理できる経験豊富なカーネル プログラマでない限り、非常に苦労することになると思います。

いずれにせよ、完全な履歴を取得できない場合は、ツリーに共通のルートがないため、 How do I join two git repos without a common root, where all modified files are same?を参照する必要があります。.

この問題に関して、.gitignore3.0.8 ツリーでは無視されているが 3.0.41 の 3 つのツリーで追跡されているファイルがある.gitignore場合、各ツリーのファイル間に不一致があるように思われるため、それらを比較し、把握してみてください。その理由と、追跡する必要があるものと追跡しないものを決定します。 git blame .gitignore3.0.41 ツリーの がこれに役立つかもしれません。3.0.41 ツリーは、完全な履歴を持ち、内部的に一貫性があるため、2 つのリポジトリの中でより権威のあるものになるため.gitignore、最初のインポート コミットの前に 3.0.8 ツリーに移植してみることができます。また.gitignore、トップレベルだけでなく、ツリーのどこにでもファイルが存在する可能性があることに注意してください (Linux カーネルがこれを行うかどうかはわかりません)。

于 2012-08-25T09:46:10.147 に答える