0

私は巨大なプロジェクトに取り組んでおり、実際にはその特定のディレクトリのみが必要です。したがって、私のプロジェクトは次のようになります。

project
 |- a/
 |- b/
 \- foo

ただし、上流のプロジェクトは次のようになります。

project
 |- a/
 |- b/
 |- c/
 |- foo
 \- bar

だから私は私の.gitignoreに持っています:

c/
bar

ただし、現在、アップストリームをマスターにリベースしようとしており、バー、c/*、または .gitignore 内のものに適用されるパッチ/ハンクを自動的にスキップするように git に指示できるようにしたいと考えています。ただし、foo と bar のハンクを変更する単一のパッチは、foo にのみ適用され、bar では無視されることに注意する必要があります (パッチ全体を無視しないでください)。

これを行う方法はありますか?

4

2 に答える 2

1

Git は、ファイルやディレクトリではなく、「コミット オブジェクト」で動作します。各コミット オブジェクトには、以前のコミット ID とそのコミットの変更のハッシュである一意のコミット ID があります。

つまり、一部のファイル/ディレクトリを無視すると、別のコミット ID が作成されるため、基本的には、上流のすべての変更をリベースしてから、気に入らないすべてのファイルを削除する新しいコミットを作成することと同じです。

おそらくいくつかのスクリプトを使用してローカルで行うことができますが、そうすると、ローカルリポジトリのすべてのコミットがサーバー上のバージョンと異なるため、新しいアップストリームの変更をプルするたびにマージする必要があります/何かをプッシュします上流の。

上流のプロジェクトのメンテナーを説得​​して、それをより小さなサブモジュールに分割することはできますか?

于 2012-10-03T06:34:12.763 に答える
0

申し訳ありませんが、自分でフィルタリングする必要があると思います。このための git コマンドはありません。

でエクスポートして運を試してみgit format-patchdifffilterくださいgit am

于 2012-10-03T07:54:41.840 に答える