1. ホーム
  2. git

git checkoutでワイルドカードを使用する方法はありますか?

2023-10-15 20:58:15

質問

私は、次のような共通の名前の部分を持つ単一のファイルまたは一連のファイルをチェックアウトしたいのです。

git checkout myBranch */myFile.md そして

git checkout myBranch -- */*Test* (「--」の部分はよくわかりません)

の代わりに

git checkout myBranch src/main/java/a/deep/package/structure/myFile.md となり

git checkout myBranch src/test/java/a/deep/package/structure/TestOne.java

git checkout myBranch src/test/java/a/deep/package/structure/TestTwo.java

git checkout myBranch src/test/java/a/deep/package/structure/resources/TestData.sql

いくつかのgitコマンドには、次のような限定的なワイルドカード機能があることは知っています。 diffadd については、何も見つかりませんでした。 checkout . 何か方法があるのでしょうか?

EDIT: 私はLinuxでgit 1.7.9.5を使用しています。gitとシェルコマンドの組み合わせで動作するものでもOKです。

どのように解決するのですか?

Git は行います。 はワイルドカードを扱います。 fnmatch(3) . を参照してください。 パス仕様 のエントリを参照してください。 Git用語集 .

しかし、git がこのワイルドカードを認識できるようにするには、ワイルドカードをエスケープしなければなりません。 シェル が最初に展開します。通常、私はシングルクォートの間にワイルドカードを使用します。

git checkout myBranch -- '*/myFile.md'

ワイルドカードはディレクトリを含む名前全体に適用されます。

ドキュメントにあるように、pathspec では マジックシグネチャ を指定することができます。例えば、大文字小文字を区別しないパスとして で大文字小文字を区別しないパスができます。 (と入力することができます。 ':(icase)*readme*' と入力すると、すべてのReadmeを見つけることができます)。

Windowsで問題が発生した場合に備えて、@bambamsのコメントをここに引用します。

Windows で 2.8.1.windows.1 を使っていますが、これはうまくいきません。 cmd.exe シェルから Git を利用しているので、グロビングは組み込まれていません。しかし しかし、このような残念な状態であれば、解決策があります。組み合わせる git diff --name-onlyxargs を使うことで、目標を達成することができます。

git diff --name-only <COMMIT> -- <GLOB>... | xargs git checkout <COMMIT>