Рабочий каталог Git, область подготовки и репозиторий
Основные концепции
Сначала разберёмся с понятиями рабочего каталога Git, области подготовки и репозитория:
- Рабочая область:Это каталог, который вы видите на своём компьютере.
- Область подготовки:По-английски она называется «stage» или «index». Обычно она хранится в.gitОна содержится в индексном файле (.git/index) в каталоге, поэтому иногда мы также называем область подготовки индексом.
- Хранилище версий:В рабочей области есть скрытый каталог.git, который не является рабочим каталогом, а представляет собой репозиторий Git.
Следующая диаграмма иллюстрирует взаимосвязь между рабочим каталогом, областью подготовки в репозитории и репозиторием:

-
На рисунке слева расположен рабочий каталог, а справа — репозиторий. В репозитории область, помеченная «index», — это область подготовки (stage/index), а область, помеченная «master», — это дерево каталогов, представленное веткой master.
-
Из диаграммы видно, что «HEAD» на самом деле является «курсором», указывающим на ветку master. Поэтому везде, где HEAD встречается в командах, показанных на диаграмме, его можно заменить на master.
Область, помеченная «objects» на рисунке, — это база объектов Git, которая фактически расположена в каталоге «.git/objects» и содержит различные объекты и созданное содержимое.
При выполнении команды для файлов, которые были изменены (или добавлены) в рабочем каталоге,git addпри запуске этой команды дерево каталогов области подготовки обновляется, а содержимое изменённых (или недавно добавленных) файлов в рабочем каталоге записывается в новый объект в базе объектов, при этом ID этого объекта записывается в файловый индекс области подготовки.
Когда выполняется операция коммита (git commit), дерево каталогов области подготовки записывается в репозиторий (базу объектов), и ветка master соответствующим образом обновляется. То есть дерево каталогов, на которое указывает master, — это дерево каталогов области подготовки на момент коммита.
При выполненииgit reset HEADпри запуске этой команды дерево каталогов области подготовки перезаписывается и заменяется деревом каталогов, на которое указывает ветка master, но рабочий каталог не затрагивается.
При выполненииgit rm --cached <file>, команда напрямую удаляет файлы из области подготовки, при этом рабочий каталог остаётся неизменным.
При выполненииgit checkout .илиgit checkout -- <file>, команда заменит файлы в рабочем каталоге всеми или указанными файлами из области подготовленных файлов. Эта операция очень опасна, так как она очистит изменения в рабочем каталоге, которые не были добавлены в область подготовленных файлов.
При выполненииgit checkout HEAD .илиgit checkout HEAD <file>, команда заменит файлы как в области подготовленных файлов, так и в рабочем каталоге всеми или некоторыми файлами из ветки master, на которую указывает HEAD. Эта команда также чрезвычайно опасна, потому что она очистит не только незакоммиченные изменения в рабочем каталоге, но и незакоммиченные изменения в области подготовленных файлов.
1. Рабочий каталог
Рабочий каталог — это каталог проекта на вашем локальном компьютере, где вы создаёте, изменяете и удаляете файлы. Рабочий каталог содержит все файлы и подкаталоги текущего проекта.
Возможности:
- Отображает текущее состояние проекта.
- Изменения файлов вносятся в рабочем каталоге, но эти изменения ещё не записаны в системе контроля версий.
2. Область подготовленных файлов
Область подготовленных файлов — это временная область хранения, содержащая снимки файлов, которые вот-вот будут закоммичены в репозиторий. Перед коммитом вы можете выборочно добавлять изменения из рабочего каталога в область подготовленных файлов.
Возможности:
- Область подготовленных файлов хранит изменения, которые будут включены в следующий коммит.
- Вы можете использовать её несколько раз
git addкоманду для добавления файлов в область подготовленных файлов, пока вы не будете готовы закоммитить все изменения.
Основные команды:
git add filename # 将单个文件添加到暂存区 git add . # 将工作区中的所有修改添加到暂存区 git status # 查看哪些文件在暂存区中
3. Репозиторий
Репозиторий содержит полную историю версий проекта.
Каждый коммит создаёт новый снимок в репозитории. Эти снимки неизменяемы, что обеспечивает полную историю проекта.
Возможности:
- Репозиторий делится на локальный репозиторий и удалённый репозиторий. Здесь в основном имеется в виду локальный репозиторий.
- Локальный репозиторий хранится в
.gitкаталоге, который содержит все зафиксированные объекты и ссылки.
Основные команды:
git commit -m "Commit message" # 将暂存区的更改提交到本地版本库 git log # 查看提交历史 git diff # 查看工作区和暂存区之间的差异 git diff --cached # 查看暂存区和最后一次提交之间的差异
Связь между рабочим каталогом, областью подготовки и репозиторием
1. Рабочий каталог -> Область подготовки
Используйте команду git add, чтобы добавить изменения из рабочего каталога в область подготовки.
git add filename
2. Область подготовки -> Репозиторий
Используйте команду git commit, чтобы зафиксировать изменения из области подготовки в репозиторий.
git commit -m "Commit message"
3. Репозиторий -> Удалённый репозиторий
Используйте команду git push, чтобы отправить коммиты из локального репозитория в удалённый репозиторий.
git push origin branch-name
4. Удалённый репозиторий -> Локальный репозиторий
Используйте команду git pull или git fetch, чтобы получить обновления из удалённого репозитория.
git pull origin branch-name # 或者 git fetch origin branch-name git merge origin/branch-name
Пример
Предположим, вы изменили файл file.txt в рабочем каталоге:
1. Рабочая область
Измените file.txt и сохраните.
2. Область подготовительных изменений
Добавьте изменения в область подготовительных изменений:
git add file.txt
3. Репозиторий
Зафиксируйте изменения из области подготовительных изменений в локальном репозитории:
git commit -m "Update file.txt"
4. Удалённый репозиторий
Отправьте локальные коммиты в удалённый репозиторий:
git push origin main
Понимая роли рабочего каталога, области подготовительных изменений и репозитория, а также их взаимосвязи, вы сможете эффективнее использовать Git для контроля версий и совместной разработки.
Другие расширения