web-dev-qa-db-ja.com

git:globパターンに一致するすべてのファイルをディレクトリサブツリーに再帰的に追加するにはどうすればよいですか?

/xxx/documentationとそのサブディレクトリ内にいくつかの.screenファイルがあり、それらはGitによって既に追跡されています。

これらの画面ファイルの多くを変更した後、git add documentation/\\*.screenのドキュメントの最初の例で示されているように、git-addを実行してこれらのファイルをステージングしますが、コマンドは失敗します。

致命的:pathspec 'documentation/\ *。screen'はどのファイルとも一致しませんでした

私のコマンドは悪いのですか、それともgitにはバグがありますか?

56

これはドキュメントのバグです。アスタリスクを引用する

$ git add documentation/\ *。screen

または

$ git add 'documentation/*。screen'

目的の動作を取得します。

代わりに、現在のディレクトリのみにファイルを追加する場合は、使用します

$ git add * .screen

UPDATE:問題を修正する パッチ を提出しました 現在修正済み バージョン1.6以降。 6.2。

59
Greg Bacon

私は受け入れられた答えを試しましたが、それは私のために働きませんでした..だから誰かが問題を引き起こす可能性のあるさまざまな側面を分析するのに時間を費やすことなく仕事をやり遂げたい場合に備えて私のものです:

find documentation -name "*.screen" | xargs git add -u

// git-addの-uオプションは、以前に追跡および変更されたファイルのみをインデックスに追加します

17
Flueras Bogdan

シェルに*.screen(つまり、.screenで終わるすべてのファイルではなく、正確にこの文字列-存在しない-を探すように指示しました。\\ soを省略しますシェルがファイル名の拡張を行うことができます。

4
Aaron Digulla

これは、ディレクトリにすべてのファイルを追加するgitの同様の問題に使用したものです:

find . | sed "s/\(.*\)/\"\1\"/g" | xargs git add 

元の質問の場合、コマンドは次のようになります。

find -name "*.screen" | sed "s/\(.*\)/\"\1\"/g" | xargs git add 

完全に指定されたファイル名にスペースが含まれる場合を扱っていることに注意してください。それが私の答えです。追加するさまざまなファイルを選択するには、最初の|の前の部分を編集します。

4
Barnaby Dawson

git add * .JavaはすべてのJavaファイルを再帰的に追加するために機能します

2
Jackie

試してみる

git add ./documentation/*.screen
1
kubi