Сохранение изменений в Git

При работе в Git или других системах контроля версий понятие “сохранение” немного отличается от процесса при работе, например, в текстовом редакторе или других приложениях для редактирования файлов. Традиционное программное понятие “сохранение” в Git является синонимом термина “коммит” (committing). То есть коммит (еще иногда говорят “фиксация”) – это Git-эквивалент “сохранения”. Традиционное сохранение следует рассматривать как операцию файловой системы, которая используется для перезаписи существующего файла или записи нового файла. С другой стороны, коммит в Git – это операция, которая производится с коллекцией файлов и директорий.

Друзья, поддержите нас вступлением в наш телеграм канал QaRocks. Там много туториалов, задач по автоматизации и книг по QA.

Сохранение изменений в Git и SVN – это тоже разные процессы. SVN-коммиты или “чек-ины” – это операции, которые выполняются удаленно на централизованном сервере. Это означает, что для полного “сохранения” изменений в проекте SVN-коммиту необходим доступ в Интернет. Коммиты Git можно перехватывать и собирать локально, а затем по мере необходимости перебрасывать на удаленный сервер с помощью git push -u origin main команды. Разница между этими двумя методами является фундаментальной для этих двух архитектурных дизайнов. Git – это распределенная модель приложения, в то время как SVN – централизованная. Распределенные приложения обычно более надежны, поскольку в них нет единой точки отказа, как в централизованных серверах.

Команды: git addgit status и git commit могут быть использованы в различных комбинациях для сохранения текущего состояния Git-проекта.

В Git есть дополнительный механизм сохранения, называемый стэш (the stash). Стэш – это эфемерное хранилище для изменений, которые еще не готовы к коммиту. Стэш взаимодействует с рабочей директорией, первым из трех деревьев и имеет широкие возможности использования. Чтобы узнать больше, посетите страницу, посвященную git stash.

Репозиторий Git может быть настроен на игнорирование определенных файлов или директорий. Это не позволит Git’у сохранять изменения в игнорируемом содержимом. Git имеет несколько методов настройки, которые управляют списком игнорирования. Конфигурация игнорирования Git’а более подробно рассматривается на git ignore странице.

git add

Команда git add добавляет изменения в рабочую директорию в стэйджинг (staging). Она сообщает Git’у, что вы хотите включить обновления определённого файла в следующий коммит. Однако  git add на самом деле не влияет на репозиторий каким-либо существенным образом – изменения фактически не записываются до тех пор, пока вы не выполните git commit.

Вместе с этими командами вам также понадобится git status для просмотра состояния рабочей директории и стэйджинга.

Как это работает

Команды git add и git commit составляют основной рабочий процесс Git. Это две команды, которые должен понимать каждый пользователь Git, независимо от модели сотрудничества в команде. Они служат для записи версий проекта в историю репозитория.

Разработка проекта вращается вокруг базовой схемы редактирования/индексации/коммита. Сначала вы редактируете свои файлы в рабочей директории. Когда вы готовы сохранить копию текущего состояния проекта, вы индексируете изменения с помощью git add. Далее вы совершаете коммит (то есть фиксацию) этих изменений в истории проекта с помощью git commit. Команда git reset используется для отмены коммита или индексации.

Помимо git add и git commit, третья команда git push необходима для полноценной совместной работы с Git. git push используется для отправки зафиксированных изменений в удаленные репозитории для совместной работы. Это позволяет другим членам команды получить доступ к набору сохраненных изменений.

Команда git push

Команду git add не следует путать с svn add, которая добавляет файл в репозиторий. Вместо этого git add работает на более абстрактном уровне изменений. Это означает, что git add нужно вызывать каждый раз, когда вы изменяете файл, в то время как svn add нужно вызывать только один раз для каждого файла. Это может показаться излишним, но такой порядок работы значительно упрощает организацию проекта.

Стэйджинг (staging area)

Основная функция команды git add заключается в продвижении ожидающих изменений в рабочем каталоге в git staging область. Стэйджинг – одна из уникальных возможностей Git’а, и если вы работаете с SVN (или даже Mercurial), вам может потребоваться некоторое время, чтобы разобраться в ней. Становится немного понятней, если думать о ней как о буфере между рабочей директорией и историей проекта. Стэйджинг считается одним из “трех деревьев” Git, наряду с рабочей директорией и историей коммитов.

Вместо того чтобы фиксировать все изменения, сделанные с момента последнего коммита, стэйджинг позволяет сгруппировать связанные изменения, прежде чем зафиксировать их в истории проекта. Это означает, что вы можете вносить всевозможные правки в несвязанные файлы, а затем вернуться и разделить их на логические коммиты, добавив связанные изменения в стэйджинг, и зафиксировать их по частям. Как и в любой системе контроля версий, важно создавать атомарные коммиты, чтобы было легко отслеживать ошибки и отменять изменения с минимальным влиянием на остальную часть проекта.

Различные опции


Индексация всех изменений в <file> для следующего коммита:

git add <file>

Индексация всех изменений в <directory> для следующего коммита:

git add <directory>

В Git существует возможность запуска интерактивной сессии индексации, которая позволяет выбрать части файла для добавления в следующий коммит. В результате вам будет представлен фрагмент изменений и предложено ввести команду. Используйте y для индексации фрагмента, n для игнорирования фрагмента, s для разделения на более мелкие фрагменты, e для ручного редактирования фрагмента, и q для выхода.

git add -p

Примеры

Когда вы начинаете новый проект,  git add выполняет ту же функцию, что и svn import. Чтобы создать начальный коммит текущего директории, используйте следующие две команды:

git add .
git commit

Как только вы запустили свой проект, новые файлы можно добавлять, передавая путь к ним через git add:

git add hello.py
git commit

Приведенные выше команды также можно использовать для записи изменений в существующих файлах. Опять же, Git не делает различий между индексацией изменений в новых файлах и изменениями в файлах, которые уже были добавлены в репозиторий.

Резюме

Итак,  git add – это первая команда в цепочке операций, которые направляют Git на “сохранение” текущего состояния проекта в истории коммитов. После выполнения git add будет продвигать ожидающие изменения из рабочей директории в стэйджинг. Команда git status проверяет текущее состояние репозитория. С ее помощью также можно убедиться, что команда git add добавила нужные изменения. Команда git reset используется для отмены git add. Команда git commit используется для фиксации индексированных изменений в истории коммитов репозитория.

Перевод статьи «Saving changes in Git».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *