Работа с файлами и временным хранилищем (staging area)

GitGitBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

С возвращением, будущие путешественники во времени! Теперь пришло время повысить свой уровень владения Git и исследовать увлекательный мир временного хранилища (staging area).

В этом практическом занятии (lab) мы углубимся в возможности управления файлами в Git. Вы научитесь добавлять и удалять файлы из проекта, игнорировать файлы, которые вы не хотите отслеживать, просматривать изменения перед фиксацией (commit) и даже отменять изменения, если допустите ошибку. Эти навыки похожи на улучшение вашего временипрыгающего аппарата - они дадут вам больше контроля и гибкости при перемещении по временной шкале вашего проекта.

К концу этого практического занятия вы лучше поймете, как работает временное хранилище (staging area) в Git и как оно помогает создавать более организованные и значащие фиксации (commit). Итак, запустим наши терминалы и отправимся в это увлекательное путешествие!


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/SetupandConfigGroup(["Setup and Config"]) git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/DataManagementGroup(["Data Management"]) git/SetupandConfigGroup -.-> git/git("Show Version") git/SetupandConfigGroup -.-> git/init("Initialize Repo") git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/diff("Compare Changes") git/DataManagementGroup -.-> git/restore("Revert Files") subgraph Lab Skills git/git -.-> lab-387457{{"Работа с файлами и временным хранилищем (staging area)"}} git/init -.-> lab-387457{{"Работа с файлами и временным хранилищем (staging area)"}} git/add -.-> lab-387457{{"Работа с файлами и временным хранилищем (staging area)"}} git/status -.-> lab-387457{{"Работа с файлами и временным хранилищем (staging area)"}} git/diff -.-> lab-387457{{"Работа с файлами и временным хранилищем (staging area)"}} git/restore -.-> lab-387457{{"Работа с файлами и временным хранилищем (staging area)"}} end

Настройка рабочего пространства

Начнем с создания новой директории для этого практического занятия (lab). Откройте терминал и введите следующие команды:

cd ~/project
mkdir git-staging-lab
cd git-staging-lab
git init

Эти команды создают новую директорию с именем git-staging-lab, переключают вас в нее и инициализируют новый репозиторий Git.

Теперь создадим простой Python-скрипт для работы:

echo "print('Hello, Git!')" > hello.py

Эта команда создает файл с именем hello.py с простым оператором вывода (print) на Python.

Добавление файлов во временное хранилище (staging area)

Теперь, когда у нас есть файл hello.py, добавим его во временное хранилище (staging area). Временное хранилище - это своего рода зона подготовки, где вы собираете все изменения, которые хотите включить в следующую фиксацию (commit).

Выполните следующую команду:

git add hello.py

Эта команда сообщает Git начать отслеживать файл hello.py и включить его в следующую фиксацию.

Теперь проверим статус нашего репозитория:

git status

Вы должны увидеть вывод, похожий на следующий:

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   hello.py

Этот вывод говорит нам, что файл hello.py теперь находится во временном хранилище и готов к фиксации.

Зачем нам нужно временное хранилище? Представьте, что вы собираете вещи для поездки. Временное хранилище - это как ваша чемодан - вы можете добавлять в него вещи (изменения), удалять их, если передумали, и когда вы удовлетворены всем, что находится в чемодане, вы закрываете его (делаете фиксацию). Это позволяет вам тщательно подбирать, что входит в каждую фиксацию, делая историю проекта более организованной и значащей.

Игнорирование файлов с помощью.gitignore

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

Создадим файл .gitignore:

echo "*.log" > .gitignore

Эта команда создает файл .gitignore, который сообщает Git игнорировать любые файлы с расширением .log.

Теперь создадим файл журнала (log), чтобы проверить наш .gitignore:

echo "This is a log file" > debug.log

Проверьте статус вашего репозитория:

git status

Вы должны увидеть, что debug.log не отображается в выводе, но .gitignore отображается:

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   hello.py

Untracked files:
  (use "git add <file>..." to include in what will be committed)
       .gitignore

Файл .gitignore очень мощный. Он может игнорировать конкретные файлы, целые директории или использовать шаблоны для игнорирования файлов, соответствующих определенным критериям. Это чрезвычайно полезно в реальных проектах, где могут быть файлы сборки (build artifacts), кэш-файлы или конфигурационные файлы, специфичные для среды, которые не должны быть частью вашего репозитория Git.

Добавим и зафиксируем наши изменения:

git add.gitignore
git commit -m "Initial commit with hello.py and.gitignore"

Просмотр изменений с помощью git diff

По мере роста проекта вы часто будете хотеть просмотреть свои изменения перед их фиксацией (commit). Git предоставляет для этого мощную команду: git diff.

Давайте изменим наш файл hello.py:

echo "print('Hello, Git! Welcome to the staging area.')" > hello.py

Теперь используем git diff, чтобы увидеть, что изменилось:

git diff

Вы должны увидеть вывод, похожий на следующий:

diff --git a/hello.py b/hello.py
index ed51d3f..1385fe3 100644
--- a/hello.py
+++ b/hello.py
@@ -1 +1 @@
-print('Hello, Git!')
+print('Hello, Git! Welcome to the staging area.')

Этот вывод показывает нам, что именно изменилось в нашем файле. Строка с - показывает, что было удалено, а строка с + - что было добавлено.

git diff похож на журнал временипрыгающего аппарата. Он позволяет вам увидеть точные изменения, которые вы внесли, что очень полезно, когда вы пытаетесь вспомнить, что вы сделали, или когда просматриваете изменения перед фиксацией. git diff --staged - это еще один полезный вариант этой команды. Она показывает изменения, которые вы добавили во временное хранилище (staging area), но еще не зафиксировали. Это полезно, когда вы хотите просмотреть свои изменения перед созданием фиксации.

Нажмите q, чтобы выйти из режима просмотра git diff.

Отмена добавления изменений во временное хранилище (staging area)

Иногда вы можете добавить файл во временное хранилище (staging area), а затем передумать. Git позволяет легко отменить добавление изменений.

Сначала добавим наши изменения в файле hello.py во временное хранилище:

git add hello.py

Теперь предположим, что мы передумали и не хотим включать эти изменения в следующую фиксацию (commit). Мы можем отменить добавление файла с помощью команды git restore:

git restore --staged hello.py

Проверим статус:

git status

Вы должны увидеть, что файл hello.py теперь отображается в разделе "Changes not staged for commit" вместо "Changes to be committed".

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

Итоги

Поздравляем, исследователь Git! Вы только что повысили свои навыки управления версиями. Давайте вспомним, что вы узнали в этом практическом занятии:

  1. Как добавлять файлы во временное хранилище (staging area) с помощью команды git add
  2. Как игнорировать файлы, которые вы не хотите отслеживать, с помощью файла .gitignore
  3. Как просматривать изменения в файлах перед фиксацией (commit) с помощью команды git diff
  4. Как отменить добавление изменений во временное хранилище с помощью команды git restore --staged

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

Вот почему эти навыки так важны:

  1. Выборочная фиксация: Временное хранилище позволяет вам фиксировать только часть своих изменений, помогая вам создавать более мелкие и более цельные фиксации.
  2. Игнорирование файлов: Файл .gitignore помогает поддерживать чистоту вашего репозитория, исключая файлы, которые не нуждаются в контроле версий.
  3. Просмотр изменений: Команда git diff позволяет вам проверить свои изменения перед фиксацией, помогая вам выявить ошибки на ранней стадии.
  4. Гибкость: Возможность отменить добавление изменений во временное хранилище дает вам свободу менять свои решения, делая использование Git менее страшным.

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

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

Ваше следующее приключение в мире Git ждет вас за углом. Поддерживайте свою любознательность и приятного кодирования!