`### Основные Концепции

  • Репозиторий (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 (Приватные Репозитории): Управление доступом и безопасностью в частных репозиториях.