git add * (звездочка) vs git add. (период)

я новичок в git, и у меня есть вопрос о добавлении файлов в git. Я нашел несколько вопросов stackoverflow о разнице между git add . и git add -a, git add --all, git add -A, etc. Но я не смог найти место, которое объясняет, что такое git add * делает. Я даже посмотрел на git добавить man page, но это не помогло. Я использовал его вместо git add . и мой коллега спросил меня, почему. У меня не было ответа. Я просто всегда использовал git add *.

Are git add . и git add * то же самое? Добавляет Ли один измененные файлы только из текущего каталога, а другой добавляет файлы из текущего каталога и подкаталогов (рекурсивно)?

на одном из других вопросов стека есть отличная диаграмма, которая показывает разницу между git add -A git add . и git add -u, но у него нет git add *.

enter image description here

примечание: Я понимаю, что значит использовать звездочку подстановочный знак (добавить все файлы с заданным расширением). Например, git add *.html добавить все файлы

4 ответов


add * означает добавление всех файлов в текущий каталог, за исключением файлов, имя которых начинается с точки. Это ваша функциональность оболочки, и Git получает только список файлов.

add . не имеет особого значения в вашей оболочки, и, таким образом, git добавляет весь каталог рекурсивно, что почти то же самое, но включая файлы, имена которых начинаются с точки.


* не является частью git - это подстановочный знак, интерпретируемый оболочкой. * расширяется до всех файлов в текущем каталоге и только затем передается в git, который adds их всех. . - это сам текущий каталог, и git adding он добавит его и все файлы под ним.


через точку . в оболочке обычно означает "текущий каталог".

при использовании звездочки * на оболочке функция называется file-globbing используется. Е. Г. на баш функцию glob() делает именно это. The manpage for 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.

это означает, что при передаче аргументов любой программе в командной строке, содержащей '?', '*'или '[', сначала globbing расширяет шаблон подстановочного знака в список файлов, а затем дает эти файлы в качестве аргумента для самой программы.

разница в значении между 'git add .' и 'git add *'четко указано Денис:

git add ожидает добавления списка файлов. В приведенном выше примере Shell расширяет * или . соответственно и дает результат в качестве параметра для git add. Теперь разница в том, что с git add . git будет расширяться до текущего каталога, тогда как триггеры действуют и такие распространяется на все файлы и каталоги, которые не начинаются с точки.


Я включил ответ в таблицу ниже:

enter image description here