2012-02-16 8 views
2

サブツリーをサブツリーのマージを行い、gitリポジトリに追加しました。サブプロジェクトにパッチを適用する必要がありますが、 "git apply -v patch_name.patch"を実行すると何も返されません。エラーメッセージはなく、ファイルも変更されません。gitサブツリーのマージにどのようにパッチを適用できますか?

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

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

私は新鮮なクローンの下でファイルにパッチを当てて、私のメインプロジェクトのサブプロジェクトディレクトリにあるファイルにコピーすることができたと思います。私はそれをする必要はないようだ。これの周りに良い方法がありますか?

+0

これで運がありましたか? – timB33

答えて

2

git applyマニュアルからの引用:パッチがサブモジュールへの変更が含まれてい

場合は次のようにgitが扱い これらの変更を適用します。

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

--indexが指定されていない場合は、サブモジュールは、パッチにコミットは無視され、 対応するサブディレクトリの唯一の有無を確認し、(可能ならば)更新されます。

つまり、サブモジュールに注意するためにgit applyには--indexを指定する必要があります。

変更を強制的に実行したい場合は、通常のpatchコマンドを使用することをお勧めしますが、権限の変更などを受けたり、サブツリーのgit checkout rev /path/to/dirを使用したりしないでください)。

関連する問題