Разница между "git add-A" и "git add."



команда git add [--all|-A] похоже, идентичен git add .. Это правильно? Если нет, то чем они отличаются?

835   9  

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: enter image description here

Git Версия 2.x: enter image description here

флаги длинной формы:

  • 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> " to добавить только добавленные или измененные пути в <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 ."

(обратите внимание на дополнительный'. на 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 также не указан. Точка относится строго к текущему каталогу-она пропускает пути, найденные выше и ниже.

теперь, учитывая это знание, мы можем применить ответы выше.

ограничители следующие.

  • -у = --обновление = подмножество отслеживаемых файлов => добавить = Нет; изменение = "да"; "удалить" = да. => если элемент отслеживается.
  • - A = --all (нет такого -a, который дает синтаксическую ошибку) = надмножество всех неотслеживаемых / отслеживаемых файлов, если только в Git эквивалентность товара признается, в Git добавить -это будет найти его и добавить его.

pathspec выглядит следующим образом.

  • в Git
  • однако, в v2. 0, операция может быть ограничена текущим путем: просто добавьте явный суффикс точки (который также действителен в 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 . добавить файлы из своего текущей директории.

и вот все.

Comments

    Ничего не найдено.