Когда вы говорите git add *
в приглашении bash (или в основном в любом приглашении оболочки в стиле UNIX), оболочка расширяет *
.(Расширение globs считается обязанностью оболочки в UNIX, которая имеет ряд незначительных симптомов, таких как этот.)
Это означает, что, насколько может судить git, вы набрали что-то вроде
git add aDiretory aFile anotherFile contributing.md someOtherDirectory
То есть он думает, что вы специально попросили добавить contributing.md
.Когда вы специально просите git add
файл, который игнорировать d, он этого не делает (если вы не указали опцию -f
), и выдает предупреждение, объясняющее, почему он этого не сделалсделайте это.
Он не предупреждает о игнорируемых файлах в подкаталогах, потому что вы не указали имена этих файлов для добавления.Именование каталога неявно говорит о том, что вы хотите добавить все внутри этого каталога , за исключением того, что игнорируется , но то, что игнорируется, в этом случае молча пропускается.
И когда вы говорите git add .
, выявно не называете никаких файлов - вы просто неявно говорите, что хотите, чтобы все файлы находились в каталоге .
.Так что никаких предупреждений.
Поскольку git фактически не добавляет игнорируемый файл по умолчанию, это обычно не имеет значения.Однако более важное различие между этими двумя командами заключается в том, что когда bash раскрывает *
, он пропускает имена файлов, начинающиеся с .
, например, .gitignore
.Так что, если вы хотите добавить все, использование .
(или что-то вроде :/:.
, чтобы убедиться, что вы говорите о корне рабочего дерева) часто является более правильной командой.