"git add **/"にエイリアスを追加する方法

エイリアスを追加できないようです。git add **/

2つのアスタリスクが問題を引き起こしているようです。それとも、スラッシュによるものかもしれません。この問題をどのように解決できますか?

これまで私は試しました

alias ga='git add **/' 

端末で上記のエイリアスを実行したときにga somename.javaエイリアスが存在しない場合と同じコマンドを実行しますgit add **/somename.java

また、アスタリスク、スラッシュ、ドル記号、引用符などを追加してみました。

ベストアンサー1

ga somename.javaうん、短縮git add **/ somename.java。エイリアスの最初のパラメータは、エイリアス内の最後の単語には関連付けられません。こう考えてみてください。入力したスペースはga削除されません。

コマンドの代替名を指定したり、コマンドにパラメーターを渡したりするよりも複雑な操作を実行するには、エイリアスの代わりに関数を使用してください。

これはzshの非常に多様なバージョンです。

function ga {
  git add **/$^~@(.N)
}
alias ga='noglob ga'

動作方法は次のとおりですga foo* bar

  1. エイリアスganoglob ga
  2. ありがとうnoglob辞書コマンド修飾子noglob ga foo* barワイルドカード文字は拡張されませんが、foo*文字通りfoo*引数として渡されますga
  3. (中のもの)は、コマンドの最初の単語gaではないため、別名で照会されないため、引数noglob ga …で呼び出された関数を参照します。foo*bar
  4. $^~@使用${^spec}および${~spec}パラメータ拡張形式。修飾子は配列の各要素の前に追加され、^合計が生成されます。この修飾子がない場合は、およびに展開されます。**/$@**/foo***/bar**/$@**/foo*bar
  5. $~@これで引数のワイルドカード文字が拡張されます。このように、パターンはそれ自体foo*拡張されません。つまり**/foo*、次の項目と一致しますsub/dir/foobar
  6. これ. グローバル予選通常のファイルのみが一致します。-.通常のファイルとシンボリックリンクを一致させるか、@.通常のファイルに加えてすべてのシンボリックリンクを一致させます。
  7. これN グローバル予選一致しないパターンは無視されます。(N)パターンの1つが何も一致しないときにエラーが発生するようにするには、そのパターンを入力しないでください。

ここで欠けている唯一の利点は完成です。実現可能しかし、ここでは苦労する価値がないと思います。

Bashではそれほど良い結果は得られません。ワイルドカードがすぐに拡張され、ディレクトリの内容ga foo*と同じになるのを防ぐ方法はありません。ga foo1 foo2

.git …
foo1
foo2
subdir
subdir/foobar

どうすれば見逃すことができますかsubdir/foobar

Bashでは引数にワイルドカードを引用する必要があるので、Gitの独自のパターンマッチングに頼ることをお勧めします。パス指定。ディレクトリ区切り記号を一致させるために特別な注意を払ってください。つまり、*シェル動作が組み込まれています。**

function ga {
  local x
  for x in "$@"; do
    git add "*/$x"
  done
}
ga 'foo*' bar

最後に、.gitignore最新の情報を維持し、頻繁にコミットする場合git add .

おすすめ記事