私はgitが初めてなので、gitにファイルを追加することについて質問があります。 git add .
とgit add -a
、git add --all
、git add -A
などの違いに関する複数のstackoverflowの質問を見つけました。しかし、私はgit add *
します。 git add man page も見ましたが、助けにはなりませんでした。私はgit add .
の代わりにそれを使用していましたが、同僚が私に理由を尋ねました。答えがありませんでした。私はいつもgit add *
を使ってきました。
git add .
とgit add *
は同じですか? 1つは現在のディレクトリからのみ変更されたファイルを追加し、もう1つは現在のディレクトリとサブディレクトリからファイルを(再帰的に)追加しますか?
git add -A
git add .
とgit add -u
の違いを示す他のスタックの質問の1つに素晴らしいチャートがリストされていますが、git add *
はありません。
注:アスタリスクをワイルドカードとして使用することの意味を理解しています(特定の拡張子を持つすべてのファイルを追加します)。たとえば、git add *.html
は、.html
拡張子を持つすべてのファイルを追加します(ただし、.css
、.js
などは無視します)。
助けてくれてありがとう!
add *
は、名前がドットで始まるファイルを除き、現在のディレクトリにすべてのファイルを追加することを意味します。これがシェル機能であり、Gitはファイルのリストのみを受け取ります。
add .
はシェルでは特別な意味を持たないため、Gitはディレクトリ全体を再帰的に追加します。これはほぼ同じですが、名前がドットで始まるファイルを含みます。
*
はgitの一部ではありません-シェルによって解釈されるワイルドカードです。 *
は現在のディレクトリ内のすべてのファイルに展開され、その後gitに渡されます。これはすべてadd
sです。 .
は現在のディレクトリそのものであり、git add
ingすると、そのディレクトリとその下のすべてのファイルが追加されます。
シェルでドット.
を使用することは、通常「現在のディレクトリ」を意味します。
シェルでアスタリスク*
を使用する場合、file-globbing
という機能が利用されます。例えば。 bashでは、関数glob()
はまさにそれを行っています。グロブのマンページ(man 7 glob
)の状態:
説明
Long ago, in UNIX V6, there was a program /etc/glob that would expand wildcard patterns. Soon afterward this became a Shell built-in. These days there is also a library routine glob(3) that will perform this function for a user program.
ワイルドカードマッチング
A string is a wildcard pattern if it contains one of the characters '?', '*' or '['.
グロビング
Globbing is the operation that expands a wildcard pattern into the list of pathnames matching the pattern.
つまり、コマンドラインで'?'
、'*'
、または'['
を含むプログラムに引数を渡すと、最初のグロビングはワイルドカードパターンをファイルのリストに展開し、これらのファイルを引数として提供しますプログラム自体に。
'git add .'
と'git add *'
の意味の違いは、 Denis によって明確に説明されています。
git add
は、ファイルのリストが追加されることを期待しています。上記の例では、シェルは*
または.
をそれぞれ展開し、結果をパラメーターとしてgit addに提供します。現在の違いは、git add .
gitを使用すると現在のディレクトリに展開されるのに対して、git add *
はファイルのグロビングをトリガーし、ドットで始まらないすべてのファイルとディレクトリに展開することです。
わかりやすくするために、次の表に答えを示します。
追加メモ(@ reka18コメントに触発):
注1。git add -A
およびgit add -u
コマンドを追加パラメーターなしで実行すると、さらに細かくなります(ファイル名のサブディレクトリまたはマスク表示)作業ディレクトリ全体の範囲で作業する(ディレクトリの作業サブディレクトリでコマンドを実行する場合も)。
注2。.
および*
は、それぞれディレクトリパス(現在のディレクトリ)およびワイルドカードであり、パスを明確にします。コマンドの。たとえば、git add .
またはgit add *
コマンドが作業ディレクトリのサブディレクトリで実行される場合、それらのアクションは作業ディレクトリ全体ではなく、このサブディレクトリ内でのみ使用されます。
注3。git add -A
およびgit add -u
コマンドは、たとえば、ファイルのパスまたはマスクを追加することでさらに絞り込むことができます。 git add -A app/controllers
またはgit add -u app\styles\*
。