`### Основные Концепции
- Репозиторий (Repository): Хранилище кода и истории его изменений. Пример: Linux на GitHub.
- Коммит (Commit): Запись в истории проекта, отражающая изменения. Пример: Коммит в Linux.
- Ветка (Branch): Независимая линия истории изменений в репозитории.
Работа с Коммитами и Ветками
- Сообщение Коммита (Commit Message): Описание, прикрепленное к коммиту. [Пример: “Fix bug 2203”].
- Граф Коммитов (Commit Graph): Визуализация истории коммитов, показывающая взаимосвязи между ними.
- Слияние (Merge): Объединение изменений из разных веток путём создания нового коммита.
- Перебазирование (Rebase): Перенос серии коммитов на другую ветку в истории.
- Конфликт (Conflict): Ситуация, возникающая при несовместимых изменениях в слиянии.
Объекты
-
Blob: Представляет состояние какого-то файла из репозитория. Хранит его содержимое. Пример:
58311574a8bbc2846b64541ec69889171d54bb0f
. -
Commit: Представляет состояние кодовой базы. Хранит хэш корневой директории репозитория, хэши родительских коммитов, имя автора коммита, время коммита и коммит-сообщение. Пример:
3233ffe1c4b99e8efb4c41c6794b4fce880cf503
. -
Tree: Представляет состояние какой-то директории из репозитория. Хранит список имён в этой директории, а для каждого имени — хэш соответствующего объекта и сведения о Unix-правах на него. Пример:
7c9ffb1cefb4138104612a535fb125c515eb5d95
. -
Git Ignore (.gitignore): Файл, указывающий на игнорирование определенных файлов или директорий Git’ом.
-
Code Review (Рецензирование Кода): Процесс оценки кода другими разработчиками перед слиянием изменений.
Удаленные Репозитории и Сотрудничество
- Remote (Удаленный Репозиторий): Копия репозитория, расположенная в другом месте.
- Upstream: Основной репозиторий, откуда обычно происходит синхронизация.
- Pull Request (Пулл-реквест) / Merge Request (Мёрж-реквест): Запрос на включение изменений из одной ветки в другую, часто с рецензированием.
Git Операции и Команды
- Git Init: Создание нового репозитория.
- Git Add: Подготовка файлов к коммиту.
- Git Clone: Клонирование удаленного репозитория.
- Git Fetch: Получение данных из удаленного репозитория.
- Git Pull: Извлечение и слияние изменений из удаленного репозитория.
- Git Push: Отправка изменений в удаленный репозиторий.
Продвинутые Концепции и Стратегии
- Git Rebase -i (Интерактивное Перебазирование): Перенос серии коммитов с возможностью точечного изменения.
- Git Cherry-Pick: Выборочный коммитов в другую ветку.
- Git Stash: Специальное место, куда можно временно переместить черновые изменения, чтобы они не попали в коммит и/или позволили перейти на другую ветку.
- Git Flow: Стратегия ветвления, включающая ветки для разработки, функционала, релизов и хотфиксов.
Работа с Данными и Безопасность
- Git LFS (Large File Storage): Управление большими файлами в Git.
- Bisect (Бисекция): Поиск коммита, вызвавшего ошибку, см.
git-bisect(1)
. - GPG Signing (Подписание GPG): Подписание коммитов для их верификации.
Дополнительные Инструменты и Практики
- Git Alias (Псевдонимы): Сокращения для часто используемых команд.
- Git Hooks: Автоматизация задач через скрипты.
- Ловушки Git (Git Hooks): Сценарии для автоматизации задач.
- Git Hooks for CI/CD (Хуки для Непрерывной Интеграции/Доставки): Использование Git hooks для автоматизации CI/CD процессов.
- Серверные Хуки Git: Управление репозиторием на сервере.
- Git Archive: Создание архивов из репозитория.
- Git Bundle: Передача репозитория в оффлайн-среде.
- Git Archive (Архивирование): Создание архивов проекта (например, zip, tar).
- Git Bundles (Git Бандлы): Использование для передачи репозиториев в оффлайн-режиме.
Производительность и Оптимизация
-
Large Repositories (Большие Репозитории): Эффективное управление крупными репозиториями.
-
Shallow Clone (Неглубокое Клонирование): Клонирование с ограниченной историей коммитов.
-
Delta Compression (Дельта-сжатие): Оптимизация хранения данных.
-
Ветка (Branch): Независимая линия истории.
-
Слияние (Merge): Объединение изменений из разных веток.
-
Перебазирование (Rebase): Перенос ветки на новую базу.
-
Конфликт (Conflict): Происходит при невозможности автоматического объединения изменений.
-
Отсоединенный HEAD (Detached HEAD): Состояние, когда HEAD указывает на коммит, а не на ветку.
-
Detached HEAD: Состояние, когда HEAD указывает не на ветку, а на конкретный коммит.
-
Remote: Другая копия репозитория. Пример: у вас на компьютере есть копия репозитория с ядром Linux, а на сервере Github — другая копия того же репозитория.
-
Автор коммита: Человек, создавший коммит. Пример: Linus Torvalds.
-
Upstream: Основное место расположения кода. Пример: если вы стажёр в Google, то ваш upstream — это сервера Google, а не ваш личный компьютер.
-
Головы В
.git/refs/heads
лежат файлы-”головы”; в обиходе их называют ”ветками”. Имя файла — название ветки. Содержимое файла — хэш коммита, на который указывает ветка; этот коммит называется ”верхушкой” ветки (tip of the branch). Вот и всё\footnote{Если ограничиваться локальным репозиторием, без сервера.}. -
Tag (Тег): Метка для обозначения важных моментов, таких как релизы.
-
Fast-Forward Merge: Прямое объединение изменений без создания нового коммита слияния.
-
Non-Fast-Forward Merge: Слияние, которое всегда создает новый коммит слияния.
-
Псевдонимы Git (Git Alias): Создание коротких команд для сложных операций.
-
Интерактивное Добавление (Interactive Add): Выборочное добавление изменений для коммита.
-
Сжатие Коммитов (Squashing Commits): Объединение нескольких коммитов в один.
-
Фильтры Clean/Smudge: Преобразование содержимого файлов при коммите и проверке.
-
Атрибуты Git для Стратегий Слияния: Использование
.gitattributes
для определения стратегий слияния. -
Разреженная Выгрузка (Sparse Checkout): Выгрузка частей репозитория.
-
Расширенный Refspec: Детальная настройка операций fetch и push.
-
Графические Интерфейсы Git (GUIs): Визуальное управление репозиториями.
-
Интеграция с Системами Отслеживания Задач: Связь Git с системами управления задачами.
-
Работа с Другими Системами Контроля Версий: Совместное использование Git с другими системами, такими как SVN.
-
Git Blame: Определение авторства изменений в файле.
-
Git Bundle: Передача репозиториев без прямого сетевого соединения.
-
Конфигурация Git (Git Config): Настройка Git для различных уровней работы.
-
Submodule (Подмодуль): Включение зависимых проектов в репозиторий.
-
Cherry-Pick (Выборочное Применение): Применение изменений из конкретного коммита на текущую ветку.
-
Stash (Кэш): Временное сохранение незафиксированных изменений для чистого переключения между ветками.
-
Git Revert: Создание нового коммита, который отменяет изменения предыдущего коммита.
-
Git Amend: Изменение последнего коммита.
-
Interactive Rebase (Интерактивное Перебазирование): Перебазирование с возможностью изменения серии коммитов.
-
Ours: Стратегия слияния, игнорирующая изменения из другой ветки.
-
Theirs: Стратегия слияния, принимающая изменения только из другой ветки.
-
Octopus Merge (Осьминожье Слияние): Слияние трех или более веток одновременно.
-
Git Plumbing Commands: Низкоуровневые команды для взаимодействия с Git на более глубоком уровне.
-
Packfiles: Формат хранения объектов Git для экономии места.
-
Refspec: Правила, определяющие, как ссылки на коммиты сопоставляются между локальными и удаленными репозиториями.
-
Git GUIs (Графические Интерфейсы): Графические пользовательские интерфейсы для упрощения работы с Git.
-
Git in IDEs (Git в Интегрированных Средах Разработки): Интеграция Git в различные среды разработки.
-
Large Repositories (Большие Репозитории): Управление и оптимизация больших репозиториев.
-
Performance Tuning (Настройка Производительности): Методы улучшения производительности Git.
-
Commit Signing (Подписание Коммитов): Использование GPG для подписи коммитов и тегов.
-
Security Practices (Практики Безопасности): Меры безопасности для защиты репозиториев и данных.
-
Subtree (Поддерево): Альтернатива подмодулям, позволяющая включать содержимое другого репозитория в директорию.
-
Git Attributes (.gitattributes): Файл для настройки атрибутов Git в проекте, влияющий на обработку файлов и директорий.
-
Bare Repository (Голый Репозиторий): Репозиторий без рабочего каталога, используемый обычно на серверах.
-
Git Daemon: Легковесный сервер для предоставления доступа к репозиториям Git через сеть.
-
Repository Maintenance (Обслуживание Репозитория): Регулярные действия для оптимизации производительности репозитория (например,
git gc
). -
Advanced Blame (Расширенный Blame): Определение авторства изменений в файле с дополнительными опциями.
-
Shallow Clone (Неглубокое Клонирование): Клонирование репозитория с ограниченной историей коммитов для уменьшения размера.
-
Ref Specification (Refspec): Правила определения, как ссылки передаются между репозиториями.
-
Delta Compression (Дельта-сжатие): Оптимизация хранения данных в репозитории за счет сжатия изменений между похожими объектами.
-
Branch Protection (Защита Веток): Практика защиты важных веток от нежелательных изменений.
-
Collaboration Models (Модели Сотрудничества): Различные подходы к совместной работе в Git, например, централизованная или распределенная.
-
Git Revert vs. Reset: Различие между отменой изменений коммита и сбросом состояния репозитория.
-
Recovering Lost Data (Восстановление Потерянных Данных): Методы восстановления удаленных веток или коммитов.
-
Handling Merge Conflicts (Разрешение Конфликтов Слияния): Стратегии и практики для эффективного разрешения конфликтов при слиянии.
-
GPG Signing (Подписание GPG): Использование GPG для подписи коммитов и тегов для обеспечения их подлинности.
-
Private Repositories (Приватные Репозитории): Управление доступом и безопасностью в частных репозиториях.