Запись изменений в репозиторий. Подготовка к коммиту. — Основы Git
Идеологическое отличее git от других систем контроля версий - это то, что при работе с git - вы только добавляете изменения в репозиторий. Не важно, что вы сделали - написали новую строчку кода, отредактировали существующую, или же, удалили файл - при фиксировании изменений, вы всегда добавляете изменения.
Для того, чтобы зафиксировать изменения - необходимо выбрать то, что нужно сохранить и выполнить коммит. Для выбора нужных изменений из совершенных используется команда git add . На начальном этапе знакомства многие считают, что это команда означает нечто вроде добавить указанный файл или директорию в репозиторий. Это утверждение отчасти верно. Примерно на 10%. Предназначение этой команды не ограничивается этой функциональностью. Возможности команды git add настолько обширны, что знакомство с ними мы разобьем на несколько уроков.
Я рекомендую сразу пересмотреть ваше восприятие воздействия этой команды. Выполняя ее, вы подготавливаете конкретные изменения к фиксированию в репозитории. Или, можно сказать, что вы говорите о завершенности каких-либо изменений в репозитории на текущий момент времени.
Все файлы в рабочей директории могут находиться в 2-х состояниях:
- Под контролем системы управления версиями
- Не под контролем системы управления версиями
В случае с новыми файлами - добавление файла под версионный контроль осуществляется командой git add .
SYNOPSIS
Описание
Если говорить кратко, то основная задача этой команды - фиксирование состояния рабочей директории для последующего коммита. Коммит выполняется на основании индекса, "индекс" - это снимок содержания рабочей директории, и именно этот snapshot, будет использован при выполнения коммита.
Чтобы было проще понять - можно представить, что при выполнении команды git add git, как будто, копирует все ваши файлы (по определенным правилам) в рабочем каталоге в какое-то секретное место и, при выполнении команды git commit будет использовать эту копию данных для вычисления выполненных изменений и создания коммита.
Таким образом, после внесения каких-либо изменений в рабочем каталоге, и перед запуском команды git commit , вы должны использовать команду git add , чтобы добавить какие-либо новые или измененные файлы в индекс.
Команда git add может быть использована многократно перед тем, как будет создан коммит.
Для того, чтобы посмотреть на синтаксис команды git add выполним команду git --help add . Результатом выполнения этой команды будет страница помощи.
Хочу обратить внимание на формат команды: git add [some_options] [--] path's
Практически все команды git имеют такой формат.
Рассмотрим поподробнее некоторые опции команды git add . Я умышленно не буду рассказывать про некоторые особенности этих опций. Вы сможете прочесть о них на странице справки по этой команде.
Опции
<pathspec>Путь к файлу, файлам или директории с файлами. Поддрерживает glob-шаблоны. В некоторых случаях может опускаться, что означает, что pathspec будет равен текущей директории, из которой была вызвана команда git add . Однако в последующих версиях эта возможность опускать указание pathspec будет удалена, поэтому лучше взять за привычку всегда указывать pathspec .
Данная опция используется для разделения опций команды и списка файлов. Полезна в случаях, когда названия файлов могут быть ошибочно восприняты, как опция команды.
-u, --updateКоманда git add может взаимодействовать с файлами, которые находятся под версионным контролем, и теми, которые не находятся под таковым. Если вы не хотите случайно добавит новый файл под версионный контроль, а просто хотите обновить индекс данными, которые относятся только к файлам, которые на текущий момент уже под версионным контролем - то стоит использовать опцию -u . При ее использовании все файлы, которые не были ранее добавлены в git репозиторий - будут игнорироваться.
-A, --all, --no-ignore-removalЕсли вы хотите добавить в индекс информацию об измененных/новых/удаленных файлах одновременно - вы можете воспользоваться опцией -A . В будущем эта опция будет использоваться 'по умолчанию' при вызове команды git add .
--no-all, --ignore-removalВ индекс будут добавлены только измененные и новые файлы. Информация об удаленных файлах добавлена не будет. Эта опция используется сейчас по-умолчанию при вызове команды git add . В будущем, использование данной опции, как опции по-умолчанию будет упразднено в пользу опции -A
Таким образом, если посмотреть на сводную таблицу, становится сразу понятно, когда какую опцию стоит использовать:
Content type -u -A -no-all Новый файл - + + Измененный файл + + + Удаленный файл + + -
-N, --intent-to-addОчень полезная в работе опция, которую на практике применяют очень мало пользователей. Суть ее сводится к тому, что вы сообщаете git о намерениях в будущем добавить новый файл под версионный контроль. Если быть честным - то git добавляет этот новый файл под версионный контроль, но с пустым контентом. Таким образом, когда вы выполняете команду git diff - вы видите изменения, которые могут быть добавлены в индекс. Если файл не отслеживается - у вас такой возможности нет.
-f, --forceИногда бывает такая ситуация, что файл, который вы хотите добавит в индекс попадает под шаблоны игнорирования, определенные в gitignore файле. Если вы уверены, что вам необходимо добавить файл в индекс, можно либо отредактировать файл gitignore, или воcпользоваться опцией -f.
- -n, --dry-run
- -v, --verbose
- --refresh
- --ignore-errors
- --ignore-missing
Я не буду рассматривать в рамках этой лекции. В повседневной работе они вам не пригодятся, если вы не пишете скрипты с использованием git.
- git add -p .
- git add -i .
- git add -e .
мы поговорим в отдельной лекции.
Последнее, что хотелось бы сказать - всегда контролируйте то, что вы добавляете в репозиторий :)