Разница между "git add-A" и "git add."
команда git add [--all|-A]
кажется идентичным git add .
. Правильно ли это? Если нет, то чем они отличаются?
9 ответов
этот ответ относится только к git версии 1.x. Для Git версии 2.х, см. другие ответы.
резюме:
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 Версия 1.x:
Git Версия 2.x:
флаги длинной формы:
-
git add -A
эквивалентноgit add --all
-
git add -u
эквивалентноgit add --update
читайте далее:
С Git 2.0,git add -A
по умолчанию: git add .
равна git add -A .
.
git add <path>
это то же самое, что "git add -A <path>
" сейчас, так что "git add dir/
" заметит пути, которые вы удалили из каталога и запишите удаление.
В старых версиях Git"git add <path>
" используется для игнорирования удалений.вы можете сказать:"
git add --ignore-removal <path>
" в добавить только добавленные или измененные пути в<path>
, если вы действительно хотите к.
git add
как git add :/
(добавить все из верхней папки git repo).
Обратите внимание, что git 2.7 (Nov. 2015) позволит вам добавить папку с именем ":
"!
См.совершить 29abb33 (25 окт 2015) by Junio C Hamano (gitster
).
отметим, что запуск git 2.0 (Q1 или Q2 2014), когда речь идет о git add .
(текущий путь в рабочем дереве), вы должны использовать '.
в другой git add
команд.
это значит:
"
git add -A .
" эквивалентно "git add .; git add -u .
"
(обратите внимание на extra'.
' for git add -A
и git add -u
)
, потому что git add -A
или git add -u
будет работать (начиная только с git 2.0) на все рабочее дерево, и не только на текущем пути.
команда работы на все дерево в Git 2.0 для совместимости с "
git commit -a
" и других команд. Потому что не будет никакого механизма, чтобы сделать "git add -u
" ведут себя как "git add -u .
", это важно для тех, кто привык "git add -u
"(без pathspec) обновление индекса только для путей в текущем подкаталоге, чтобы начать тренировать свои пальцы, чтобы явно сказать"git add -u .
", когда они имеют в виду, прежде чем в Git 2.0 приходит.предупреждение выдается, когда эти команды выполняются без pathspec и когда у вас есть локальные изменения за пределами текущего каталога, потому что поведение в Git 2.0 будет отличаться от сегодняшней версии в такой ситуации.
Итак, из приведенных выше инструкций Чарльза, после тестирования моего предлагаемого понимания будет следующим:
# For the next commit
$ git add . # add to index only files created/modified and not those deleted
$ git add -u # add to index only files deleted/modified and not those created
$ git add -A # do both operation at once, add to index all files
эта ссылка также может быть полезной, чтобы понять, в какой ситуации эти команды могут быть применены:удаление удаленных файлов из рабочего каталога Git.
опоздал на вечеринку, но этот вопрос также заслуживает более дистиллированной быстрый ответ.
git add -A
как ниже (то же git добавить --все)
git add .
этапы новые + измененные файлы
git add -u
этапы изменения + удаленные файлы
что изменилось С Git 2.0:
-
-A
по умолчанию - старое поведение теперь доступно с
--ignore-removal
-
git add -u
иgit add -A
в подкаталоге без путей в командной строке работают по всему дереву
Итак, для git 2 Ответ:
-
git add .
иgit add -A .
добавить новые/измененные/удаленные файлы в текущей директории -
git add --ignore-removal .
добавляет новые / измененные файлы в текущем каталоге -
git add -u .
добавляет измененные/удаленные файлы в текущей директории - без запятой, добавьте все файлы в проект независимо от текущего каталога
наконец-то я думаю, что я получил это, большое спасибо всем вам. Надеюсь, это добавит ясности.
!The syntax is
git add <limiters> <pathspec>
! Aka
git add (nil/-u/-A) (nil/./pathspec)
ограничители могут быть-u или-A или nil.
Pathspec может быть путь к файлу или точка,'.- чтобы указать текущий каталог.
важные фоновые знания о том, как git "добавляет".
- невидимые файлы, с префиксом точки, (dotfiles) никогда не распознаются автоматически Git. Они никогда даже не перечислены как "не отследили".
- пустые папки никогда не добавляются git. Они даже никогда не упоминаются как "не отслеженные". (Обходной путь-добавить пустой файл, возможно невидимый, к отслеживаемым файлам.)
- git status не будет отображать информацию о подпапке, т. е. не отслеженные файлы, если не отслеживается хотя бы один файл в этой подпапке. До этого времени git считает всю папку вне области видимости, а-ля "пустой". Он пуст отслеживаемых элементов.
- указание filespec = '.' (точка), или текущий каталог не является рекурсивным, Если также не указан-A. Точка относится строго к текущему каталогу-она опускает пути, найденные выше и ниже.
Теперь, учитывая эти знания, мы можем применить вышеуказанные ответы.
ограничители следующим образом.
- - u = -- update = подмножество отслеживаемых файлов => Add = No; Change = Yes; Delete= Yes. => iff элемент отслеживается.
- - A = --all (нет такого-a, который дает синтаксическую ошибку) = надмножество всех неотслеживаемых / отслеживаемых файлов, если только в Git если элемент распознан, git add-A найдет его и добавит.
pathspec выглядит следующим образом.
- в Git
- однако, в v2.0, the операция может быть ограничена текущим путем: просто добавьте явный суффикс точки (который также действителен в Git
git add -A .
git add -u .
В заключение, моя политика ;
- 1.Убедитесь, что все добавляемые скряги/файлы учитываются в состоянии git.
- 1A.Если какие-либо элементы отсутствуют, из-за невидимых файлов/папок добавьте их отдельно.
- 2.Есть хороший пример, так что обычно только файлы интерес не отслеживается и / или не признается.
- 3.С верхнего уровня РЕПО "git add-A", чтобы добавить все элементы. Это работает во всех версиях git.
- 4.При необходимости удалите все нужные элементы из индекса.
- 6.Если есть большая ошибка, сделайте "git reset", чтобы полностью очистить индекс.
git add .
равна git add -A .
добавляет файлы в индекс только из текущих и дочерних папок.
git add -A
добавляет файлы в индекс из всех папок в рабочее дерево.
С. П.: информация относится к Git 2.0.
на Git 2.x:
если вы находитесь непосредственно в рабочий каталог, потом
git add -A
иgit add .
Работа без разницы.если вы находитесь в любой подкаталог рабочий каталог,
git add -A
добавит все файлы из всего рабочий каталог иgit add .
добавить файлы из своего текущей директории.
и вот все.