web-dev-qa-db-ja.com

ワイルドカードを使用した「git add」が期待どおりに機能しない-特定のディレクトリにcdする必要がありますか?

基本的なgit add * .erb(または単純なワイルドカード式)を実行しようとすると、gitはそれを認識しません(それら)。サイドノートとして、私はこれを以前にやったことがないので、それはルーキーの間違いだと確信していますが、他のSO投稿または私の学校の卒業生listservで助けが見つからなかったので、この投稿は適切かもしれません。

(別の)例では、git statusは私に与えています:

#   modified:   config/routes.rb
#   modified:   spec/models/question_spec.rb

Routesファイルのみをステージングしたかったので、git add * s.rbを試しましたが、サイコロはありません。私はアプリのルートにいます...ワイルドカード表現を適用しようとしているファイルを含むディレクトリにいる必要がありますか?それは痛いでしょうが、...実際には...うまくいきました。

これが別の投稿である必要はありませんが、特定のディレクトリにcdする必要がないワイルドカードを使用する簡単な方法はありますか?

45
RudyOnRails

一重引用符で囲みます。これは動作するはずです。

git add '*s.rb'

[〜#〜] update [〜#〜]

さらにテストを重ねた結果、git add *s.rb 引用符なし。これは私のgitバージョン1.7.10.4(Mac OSX Lion、homebrew)でうまくいくかもしれません。私の説明では、Shellワイルドカードの展開がどのファイルとも一致しない場合、元の展開されていない引数 '* s.rb'をgit add

sh-3.2$ git status
#
#   modified:   config/routes.rb
#   modified:   spec/models/products_spec.rb
#

今私がやります git add 引用符なし。

sh-3.2$ git add *s.rb

驚くほどうまくいきます!

sh-3.2$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   config/routes.rb
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   spec/models/products_spec.rb
#

ワイルドカードパターンがどのファイルにも一致しない場合、gitはこのエラーを出します。

sh-3.2$ git add *x.rb
fatal: pathspec '*x.rb' did not match any files
70
user673207

私のバージョンのbashが古すぎるため、再帰的なglobを使用できません。だから私がやることは

find . -name "*.rb" | xargs git add

扱いがうまくいくので、必要に応じて他のフィルターを追加できます。したがって、1つのファイル以外のすべてを追加したい場合は、これを実行できます。

find . -name "*.rb" | grep -v "not_me.rb" | xargs git add

他にも便利なケースがいくつかあります。

リポジトリに既に存在するファイルを追加するだけの場合は、次のことができます。

git add -u .

すべてを追加したい場合は

git add .
5

私の経験では(オプションなどが足りないかもしれません)、git addは現在のディレクトリとサブディレクトリ内のファイルのみを調べます。したがって、すべてを追加する場合は、リポジトリのルートディレクトリに移動します。リポジトリが本当に大きい場合、特に-uフラグを渡さない場合、これには時間がかかる場合があります。

0
Antimony