Ответ 1
Одна из вещей, которые мне больше всего нравятся в Git, заключается в том, что она хранит всю свою информацию в одном месте: ваш каталог .git
в корне ваших проектов. Если вы еще не купили его, не волнуйтесь! В нем есть множество положительных героев. Давайте рассмотрим важные файлы и папки и попытаемся лучше понять, что происходит под капотом.
Основная структура выглядит следующим образом:
. |-- COMMIT_EDITMSG |-- FETCH_HEAD |-- HEAD |-- ORIG_HEAD |-- branches |-- config |-- description |-- hooks | |-- applypatch-msg | |-- commit-msg | |-- post-commit | |-- post-receive | |-- post-update | |-- pre-applypatch | |-- pre-commit | |-- pre-rebase | |-- prepare-commit-msg | `-- update |-- index |-- info | `-- exclude |-- logs | |-- HEAD | `-- refs |-- objects `-- refs |-- heads |-- remotes |-- stash `-- tags
-
COMMIT_EDITMSG
: Это последнее сообщение коммитов. Его фактически не используется Git вообще, но его там в основном для вашей справки после совершения фиксации. -
config
: содержит настройки для этого репозитория. Здесь могут быть сброшены конкретные конфигурационные переменные (и даже aliases!). Для чего этот файл больше всего используется, это определение того, где живут пульты и какое-то ядро настройки, например, если ваш репозиторий голый или нет. -
description
: Если вы используете gitweb или запускаетеgit instaweb
, это будет отображаться при просмотре вашего репозитория или список всех репозитариев версий. -
FETCH_HEAD
: SHA ветки/удаленных голов, которые были обновлены во время последнегоgit fetch
-
HEAD
: Текущий рефер, на который вы смотрите. В большинстве случаев, вероятно,refs/heads/master
-
index
: промежуточная область с метаданными, такими как временные метки, имена файлов, а также SHA файлов, которые уже завернуты на Git. -
packed-refs
: Убирает dormant refs, это не окончательный список ссылок в вашем репозитории (папкаrefs
имеет настоящие!) Взгляните на комментарий gitsters, чтобы увидеть дополнительную информацию об этом. -
ORIG_HEAD
: При выполнении слияния это SHA ветки, с которой вы объединяетесь. -
MERGE_HEAD
: При выполнении слияния это SHA ветки, с которой вы сливаетесь. -
MERGE_MODE
: используется для связи ограничений, которые были первоначально заданы дляgit merge
доgit commit
при конфликте слияния, и для завершения этого требуется отдельныйgit commit
. В настоящее время--no-ff
- это единственные ограничения, прошедшие этот путь. -
MERGE_MSG
: перечисляет конфликты, которые происходят во время вашего текущего слияния. -
RENAMED-REF
: все еще пытаюсь отследить это. Из базового grep через источник кажется, что этот файл связан с ошибками при сохранении ссылок.
Также есть множество каталогов:
-
hooks
: каталог, который быстро станет вашим лучшим другом: в нем содержатся скрипты, которые выполняются в определенное время при работе с Git, например, после фиксации или перед переустановкой. Вся серия статей будет касаться крючков. -
info
: Относительно неинтересно, кроме файлаexclude
, который живет внутри него. Мы видели это ранее в статье ignoring files, но в качестве напоминания вы можете использовать этот файл для игнорирования файлов для этого проекта, но будьте осторожны! Его версией не является файл.gitignore
. -
logs
: Содержит историю для разных ветвей. Кажется, используется в основном с помощью команды reflog. -
objects
: Git s внутренний склад blobs, все индексируются SHA. -
rebase-apply
: Workbench для rebasing и дляgit am
. Вы можете вставить его в файлpatch
, если он не применяется чисто, если вы смелый. -
refs
: основная копия всех ссылок, которые находятся в вашем репозитории, будь то для закладок, тегов, ветвей удаленного отслеживания или локальных ветвей.
Просто одно слово мудрости, когда возиться с внутренними элементами Git: убедитесь, что вы знаете, что делаете, а если нет, имейте резервную копию! Прошивка с конфигурационными файлами или крючками довольно проста, но я бы не пошел spelunking в хранилище данных, если бы мне не пришлось. Если по какой-то причине вы являетесь частью обычного рабочего процесса, вы можете сделать это неправильно.
Больше всего о внутренних функциях Git, которые мы еще не накрыли. Одним из лучших руководств является Git Community Book, и, конечно же, вы можете просто загрузите источник для себя и посмотрите.