3

サブツリーのマージを実行して、サブプロジェクトを git リポジトリに追加しました。サブプロジェクトにパッチを適用する必要がありますが、「git apply -v patch_name.patch」を実行しても何も返されません。エラー メッセージは表示されず、ファイルも変更されません。

サブプロジェクトを個別に (つまり、サブディレクトリ /tmp に) 複製し、それをメイン プロジェクトの下のサブプロジェクト ディレクトリにあるものと比較してみました。ディレクトリは同じです。

/tmp の下でクローンに対してパッチを実行すると、期待どおりに適用されます。この問題は、サブプロジェクト ディレクトリがサブツリー マージの結果であるという事実に関連しているようです。

新しいクローンの下にあるファイルにパッチを適用してから、メイン プロジェクトの下のサブプロジェクト ディレクトリにあるファイルにコピーすることができると思います。そんなことしなくていいみたいです。これを回避するより良い方法はありますか?

4

1 に答える 1

2

git applyマニュアルからの引用:

パッチにサブモジュールへの変更が含まれている場合、git apply はこれらの変更を次のように扱います。

--index が (明示的または暗黙的に) 指定されている場合、パッチを適用するには、サブモジュールのコミットがインデックスと正確に一致する必要があります。サブモジュールのいずれかがチェックアウトされている場合、これらのチェックアウトは完全に無視されます。つまり、最新またはクリーンである必要はなく、更新されません。

--index が指定されていない場合、パッチ内のサブモジュールのコミットは無視され、対応するサブディレクトリの有無のみがチェックされ、(可能であれば) 更新されます。

--indexつまり、サブモジュールに注意をgit apply払う必要があります。

変更を「強制的に実行」したい場合は、通常のpatchコマンドを使用することを検討できますが、アクセス許可の変更などは取得されないかgit checkout rev /path/to/dir、サブツリー (または提案する手動コピー) で a を使用します。

于 2012-02-16T18:15:24.130 に答える