4

リモート git リポジトリから自分のリポジトリにいくつかのサブディレクトリをマージしようとしています。リモート リポジトリとローカル リポジトリの両方にカーネル リポジトリ全体が含まれており、ワイヤレス関連のファイルのみに関心があります。「サブツリー マージ戦略の使用方法」の指示に従おうとしましたが、ほとんどのファイルがローカル リポジトリとリモート リポジトリの両方に存在するため、 git read-tree --prefix=dir-B/ -u Bproject/masterコマンドは失敗します。-mオプションと--prefix同じコマンド ラインで使用できませんでした。

このマージは、リモート ファイルを優先して競合を解決する必要があるリモート リポジトリ内のファイルに従って、関連するすべてのワイヤレス ディレクトリ/ファイルを実際に更新 (マージ/プル) する必要があります。

私の質問を一般的にするために、リポジトリ A と B があるとします。両方とも、フォルダ wireless_dir: A/wireless_dir、B/wireless_dir を持っているとします。私はリポジトリ B に取り組んでおり、マージの競合が発生したときに A/wireless_dir の変更が優先される A/wireless_dir から B/wireless_dir のすべてのファイルを更新したいと考えています。

4

2 に答える 2

1

Jeformi がコメントしたことから、フォルダーが別のリポジトリである状況が既にあるようです。その場合は、git pull.

ただし、探しているコミットに他のフォルダーの不要なファイルが含まれている場合、Git では、ここで説明されているように、ラウンド アバウトの方法でコミットを "unsqaush" できます: redhatmagazine

これを行う手順は次のとおりです(状況に合わせてもう少し一般化されています)。

<OLD_HEAD>1) HEAD の現在のコミットをメモしておきます。お楽しみに呼び出してみましょう。これはログから取得でき、次を使用して最新のコミットの sha1 を確認できます。

git log

2) レポ A からブランチに変更を取り込みます (これには、不要な変更が含まれます)。

git pull <repo A> <branch_name>

3) 今こそ使用する時<OLD_HEAD>です (非下品な方法で)...これはリセットによって行われます

git reset --mixed <OLD_HEAD>

4) 完了したすべての操作で、HEAD は元に戻り<OLD_HEAD>、インデックスも同様ですが、作業ディレクトリには、探していたレポ A からの変更と、ファイルの可能性があります。 wireless_dir フォルダーの外側。作業ディレクトリにあるこれらのファイルを対話的にインデックスにマージするには (必要な場合は wireless_dir のファイルのみ):

git add --patch <filename>

5) そして最後に:

git commit -m “Selectively merged my files”

注: ブランチを台無しにしたくない場合は、上記を試す前に新しいブランチを作成してください。

于 2011-04-05T22:56:47.407 に答える
0

これを行う最も簡単な方法は、ブランチ全体をマージし、そのフォルダーを git ツリーの外にコピーし、マージを元に戻すか中止してから、フォルダーをコピーして戻すことです。

ただし、変更のいずれかにそのフォルダー外の依存関係がある場合、問題が発生します。依存関係を取得するために、 cherry-pickそのフォルダー (から) に触れるすべてのコミット全体が必要になる場合があります。git log subdir

于 2011-04-06T00:00:34.653 に答える