Я новичок в git, и у меня есть вопрос о добавлении файлов в git. Я нашел несколько вопросов StackOverflow о разнице между git add .
и git add -a
, git add --all
, git add -A
и т.д. Но я не смог найти место , которое объясняет , что git add *
делает. Я даже посмотрел справочную страницу git add , но это не помогло. Я использовал его вместо, git add .
и мой коллега спросил меня, почему. У меня не было ответа. Я просто всегда использовал git add *
.
Есть git add .
и git add *
то же? Добавляет ли один измененные файлы только из текущего каталога, а другой добавляет файлы из текущего каталога и подкаталогов (рекурсивно)?
На один из других вопросов из стека есть отличная диаграмма, которая показывает разницу между git add -A
git add .
и git add -u
, но ее нет git add *
.
Примечание. Я понимаю, что значит использовать звездочку в качестве подстановочного знака (добавлять все файлы с заданным расширением). Например, git add *.html
можно добавить все файлы с .html
расширением (но игнорировать .css
, .js
и т. Д.).
Спасибо за помощь!
источник
git add .
снова, и он без проблем создал удаленный файл, в отличие от тогоX
, что предлагалось в этой строке.Ответы:
add *
означает добавить все файлы в текущий каталог, кроме файлов, имена которых начинаются с точки. Это функция вашей оболочки, и Git всегда получает только список файлов.add .
не имеет особого значения в вашей оболочке, поэтому Git рекурсивно добавляет весь каталог, что почти то же самое, но включает файлы, имена которых начинаются с точки.источник
git add .
добавляет все файлы, папки и подпапки, включая .gitignore и все остальное, начинающееся с точки, в то время какgit add *
добавлял бы любые файлы, папки и подпапки, кроме тех, которые начинаются с точки? Это точно?git add *
все равно будут добавляться файлы, начинающиеся с точки, если они находятся в подкаталоге.git add .
также уважает .gitignore, тогда как выдаетgit add *
ошибку, если какие-либо файлы, отличные от точек, gitignored. Намного лучше использовать,git add .
чемgit add *
.*
. В этом случае Git найдет точечные файлы.*
чтобы защитить их от оболочки. Дело не в скрытом бите, просто правила компиляции Git отличаются.*
не является частью git - это подстановочный знак, интерпретируемый оболочкой.*
расширяется до всех файлов в текущем каталоге и только после этого передается в git, которыйadd
их всех..
- это сам текущий каталог, иgit add
он добавит его и все файлы в нем.источник
*
избегает скрытых файлов (т.е. файлов, имена которых начинаются с символа a.
). В любом случае, если вы не добавляете определенные файлы, я бы просто использовалgit add -u
(илиgit add -A
если вы создаете новые файлы).Использование точки
.
в оболочке обычно означает «текущий каталог».Когда вы используете звездочку
*
в оболочке, используется функция, называемаяfile-globbing
. Например, в bash функция именноglob()
это и делает. На странице руководства для glob (man 7 glob
) указано:Это означает, что когда вы передаете аргументы любой программе в командной строке, которая содержит
'?'
,'*'
или'['
, сначала подстановка расширяет шаблон подстановки в список файлов, а затем передает эти файлы в качестве аргумента самой программе.Разницу между
'git add .'
и'git add *'
четко описывает Денис :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\*
.источник
git add -A
иgit add .
идентичны?git add -A
применяется ко всему рабочему каталогу иgit add .
всегда к текущему каталогу).git add -A
(--all) Добавляет все, чтобы все, что находится в вашей папке на диске, было представлено в промежуточной областиgit add .
Все ставит, но не удаляет файлы, которые были удалены с дискаgit add *
Помещает все, кроме файлов, начинающихся с точки, и не удаляет файлы, которые были удалены с диска.git add -u
(--update) Помещает только измененные файлы, удаляет файлы, которые были удалены с диска, не добавляет новыеgit add <file name 1> <file name 2>
Добавляет только определенные файлыисточник