Команда git add [--all|-A]
кажется идентичной git add .
. Это правильно? Если нет, чем они отличаются?
Этот ответ относится только к Git версии 1.x . Для Git версии 2.x см. Другие ответы.
Резюме:
git add -A
этапы все изменения
git add .
вносит новые файлы и модификации без удаления
git add -u
этапы модификации и удаления, без новых файлов
Деталь:
git add -A
эквивалентно git add .; git add -u
.
Важным моментом git add .
является то, что он смотрит на рабочее дерево и добавляет все эти пути к поэтапным изменениям, если они либо изменены, либо являются новыми и не игнорируются, он не выполняет никаких действий «rm».
git add -u
просматривает все уже отслеженные файлы и вносит изменения в эти файлы, если они отличаются или они были удалены. Он не добавляет никаких новых файлов, он только вносит изменения в уже отслеженные файлы.
git add -A
это удобный способ сделать это.
Вы можете проверить различия с помощью чего-то вроде этого (обратите внимание, что для Git версии 2.x ваш вывод git add .
git status
будет другим):
git init
echo Change me > change-me
echo Delete me > delete-me
git add change-me delete-me
git commit -m initial
echo OK >> change-me
rm delete-me
echo Add me > add-me
git status
# Changed but not updated:
# modified: change-me
# deleted: delete-me
# Untracked files:
# add-me
git add .
git status
# Changes to be committed:
# new file: add-me
# modified: change-me
# Changed but not updated:
# deleted: delete-me
git reset
git add -u
git status
# Changes to be committed:
# modified: change-me
# deleted: delete-me
# Untracked files:
# add-me
git reset
git add -A
git status
# Changes to be committed:
# new file: add-me
# modified: change-me
# deleted: delete-me
git add *
?git add -A -p
не работает, как и следовало ожидать (спросите в интерактивном режиме о неотслеживаемых файлах)git add -A :/
илиgit add -A .
git add -u
сталоgit add -u :/
с последним параметром, являющимся путем, позволяя вам -u определенные каталоги,:/
обрабатывает все дерево.git add -u
или,git add .
благодаря этому, он облегчит свою жизнь даже после учета добавленного дополнительного ментального налога, чтобы гарантировать отсутствие проблем с синхронизацией? Интересно, почему Git не разбиваетсяadd -u
на две отдельные команды,add -u1
иadd-u2
одна из них работает с файлами, начинающимися с цифр, а другая - с файлами, начинающимися с цифр,Вот таблица для быстрого понимания:
Git Version 1.x :
Git Version 2.x :
Длинные флаги:
git add -A
эквивалентноgit add --all
git add -u
эквивалентноgit add --update
Дальнейшее чтение:
источник
git diff-files -z --diff-filter=M --name-only | xargs -0 git add
для добавления только измененные файлы, но не новые файлы или удаления.git add .
добавляет только новые файлы, которые находятся на текущем пути. Т.е. если у вас есть новый каталог../foo
, егоgit add -A
будет ставить,git add .
не будет.git add .
эквивалентноgit add -A .
, что эквивалентноgit add "*"
С Git 2.0
git add -A
по умолчанию:git add .
равноgit add -A .
.git add -A
это какgit add :/
( добавить все из верхней папки git repo ).Обратите внимание, что git 2.7 (ноябрь 2015) позволит вам добавить папку с именем "
:
"!См. Коммит 29abb33 (25 октября 2015 г.) от Junio C Hamano (
gitster
) .Обратите внимание, что начиная git 2.0 (Q1 или Q2 2014) , когда речь идет о
git add .
(текущем пути в рабочем дереве), вы также должны использовать '.
' в другихgit add
командах.Это значит:
(Обратите внимание на дополнительные '
.
' дляgit add -A
иgit add -u
)Потому что
git add -A
илиgit add -u
будет работать (начиная только с git 2.0) на всем рабочем дереве , а не только на текущем пути.источник
Из инструкций Чарльза , после проверки мое предлагаемое понимание будет следующим:
Этот пост в блоге также может быть полезен для понимания ситуации, в которой могут применяться эти команды: Удаление удаленных файлов из вашего рабочего каталога Git .
источник
С Git 2.0 все изменилось ( 2014-05-28 ):
-A
теперь по умолчанию--ignore-removal
.git add -u
иgit add -A
в подкаталоге без путей в командной строке работают по всему дереву.Так что для Git 2 ответ таков:
git add .
а такжеgit add -A .
добавьте новые / измененные / удаленные файлы в текущий каталогgit add --ignore-removal .
добавляет новые / измененные файлы в текущий каталогgit add -u .
добавляет измененные / удаленные файлы в текущий каталогисточник
Более дистиллированный быстрый ответ:
Делает оба ниже (так же, как git add --all )
Этапы новые + измененные файлы
Этапы изменены + удаленные файлы
источник
git add :/
+git add -u :/
В Git 2.x :
Если вы находитесь прямо в рабочем каталоге , то
git add -A
иgit add .
работайте без разницы.Если вы находитесь в каком-либо подкаталоге рабочего каталога ,
git add -A
вы добавите все файлы из всего рабочего каталога иgit add .
добавите файлы из вашего текущего каталога .И это все.
источник
Я надеюсь, что это может добавить больше ясности.
Ограничителями могут быть -u или -A или ноль.
Pathspec может быть путем к файлу или точкой, '.' указать текущий каталог.
Важные знания о том, как Git «добавляет»:
-A
не указано иное. Dot относится исключительно к текущему каталогу - он пропускает пути, найденные выше и ниже.Теперь, учитывая это знание, мы можем применить ответы выше.
Ограничители заключаются в следующем.
-u
=--update
= подмножество отслеживаемых файлов => Добавить = Нет; Изменить = Да; Удалить = Да. => если предмет отслеживается.-A
=--all
(нет такого-a
, что дает синтаксическую ошибку) = надмножество всех неотслеживаемых / отслеживаемых файлов, за исключением случаев, когда в Git до 2.0, где, если задана точечная спецификация файла, учитывается только эта конкретная папка. => если элемент распознан,git add -A
найдет его и добавит.Pathspec выглядит следующим образом.
git add -A .
git add -u .
В заключение, моя политика:
git status
..gitignore
файл, чтобы обычно только интересующие его файлы не отслеживались и / или не распознавались.источник
git add .
equalsgit add -A .
добавляет файлы в индекс только из текущей и дочерней папок.git add -A
добавляет файлы для индексации из всех папок в рабочем дереве.PS: информация относится к Git 2.0 (2014-05-28).
источник
Оба
git add .
иgit add -A
будут помещать все новые, измененные и удаленные файлы в более новые версии Git.Разница в том, что
git add -A
файлы в «верхнем, текущем и подкаталогах» помещаются в ваш рабочий Git-репозиторий. Но делатьgit add .
только этапы файлов в текущем каталоге и подкаталогах, следующих за ним ( не файлы, лежащие снаружи, т. Е. Более высокие каталоги).Вот пример:
Если текущим рабочим каталогом является
/my-repo
, и вы делаетеrm rootfile.txt
, а затемcd subfolder
, затемgit add .
, он не будет размещать удаленный файл. Но выполнениеgit add -A
, безусловно, внесет это изменение независимо от того, откуда вы выполняете команду.источник
-A
Опция добавляет, изменяет и удаляет запись индекса для соответствия рабочего дерева.В Git 2 эта
-A
опция теперь используется по умолчанию.Когда
.
добавляется a, который ограничивает область обновления до каталога, в котором вы находитесь в настоящее время, согласно документации GitОдна вещь, которую я хотел бы добавить, это то, что если используется режим
--interactive
или-p
, то онgit add
будет вести себя так, как если бы использовался-u
флаг update ( ), а не добавлять новые файлы.источник