🌐 Введение в Систему Контроля Версий #

Что такое Git? #

Git - распределенная система контроля версий (DVCS), созданная Линусом Торвальдсом в 2005 году. Ключевые особенности:

  • Распределенность: Каждый разработчик имеет полную копию репозитория
  • Целостность: Невозможно изменить файл без ведома системы
  • Производительность: Молниеносные операции
  • Ветвление: Легкое создание и слияние веток

Преимущества Распределенной Системы Контроля Версий #

Распределенная природа Git предоставляет ряд существенных преимуществ:

  1. Полная локальная история: Каждый разработчик имеет полную копию истории проекта, что обеспечивает:

    • Независимость от центрального сервера
    • Возможность работы оффлайн
    • Быстрые операции без необходимости постоянного подключения к удаленному репозиторию
  2. Отказоустойчивость:

    • Каждая копия репозитория является полным бэкапом
    • Потеря одного репозитория не приводит к потере всей истории проекта
  3. Гибкость рабочего процесса:

    • Легкое создание веток и экспериментирование
    • Простое совместное развитие проекта
    • Возможность работы с различными моделями разработки

Почему Git? #

  1. Совместная разработка
  2. Отслеживание изменений
  3. Возможность отката
  4. Параллельная работа

🔧 Установка и Настройка #

Установка на разных платформах #

macOS #

# Предпочтительный метод через Homebrew для простоты обновлений
brew install git

# Альтернативный способ через официальный установщик
https://git-scm.com/download/mac

Linux (Ubuntu/Debian) #

sudo apt update
sudo apt install git

Windows #

# Рекомендуется использовать Git Bash для унифицированного интерфейса
# Скачать с официального сайта: https://git-scm.com/download/win

Первичная Конфигурация #

Настройка идентификационных данных #

# Установка имени пользователя
git config --global user.name "Ваше Имя"

# Установка электронной почты
git config --global user.email "your.email@example.com"

Настройка редактора по умолчанию #

# Для Vim
git config --global core.editor "vim"

# Для Nano
git config --global core.editor "nano"

# Для VS Code
git config --global core.editor "code --wait"

Проверка конфигурации #

# Просмотр текущей конфигурации
git config --list

🏗️ Основы Работы с Репозиторием #

Создание Репозитория #

# Создание нового репозитория
mkdir my_project
cd my_project
git init

# Клонирование существующего
git clone https://github.com/username/repository.git

# Клонирование с указанием ветки
git clone -b develop https://github.com/username/repository.git

Состояния Файлов #

  1. Untracked: Новый файл
  2. Unmodified: Файл не изменен
  3. Modified: Файл изменен
  4. Staged: Файл подготовлен к коммиту

Базовые Операции #

# Проверка статуса
git status

# Добавление файлов
git add file.txt       # Один файл
git add .              # Все файлы
git add *.txt          # Все txt-файлы

# Коммит
git commit -m "Описание изменений"
git commit -am "Коммит с добавлением"

# История коммитов
git log
git log --oneline      # Краткий вид
git log -p             # С изменениями

🗂️ Основы Работы с Репозиторием #

Использование .gitignore #

Файл .gitignore позволяет исключить определенные файлы и директории из системы контроля версий:

# Игнорирование временных файлов
*.tmp
*.log

# Игнорирование директорий
node_modules/
build/
dist/

# Исключение конфиденциальных файлов
.env
*.secret

# Исключение файлов IDE
.vscode/
.idea/

Сравнение изменений с помощью git diff #

# Показать изменения в незакоммиченных файлах
git diff

# Сравнить staged изменения
git diff --staged

# Сравнение между ветками
git diff main feature-branch

🌿 Работа с Ветками #

Основы Ветвления #

# Создание ветки
git branch feature/login

# Переключение между ветками
git checkout feature/login

# Создание и переключение
git checkout -b feature/registration

# Список веток
git branch
git branch -a           # Включая удаленные

Продвинутое Ветвление #

# Переименование ветки
git branch -m old_name new_name

# Удаление ветки
git branch -d feature/login
git branch -D feature/login  # Принудительно

# Слияние веток
git merge feature/login
git merge --no-ff feature/login  # Без fast-forward

Стратегии Ветвления #

Git Flow #

Популярная модель ветвления для крупных проектов:

  • main: Стабильная версия
  • develop: Ветка разработки
  • feature/*: Ветки новых функций
  • release/*: Подготовка релизов
  • hotfix/*: Критические исправления
# Создание новой ветки
git checkout -b feature/new-authentication

# Переключение между ветками
git checkout main
git checkout feature/new-authentication

# Слияние веток
git checkout main
git merge feature/new-authentication

Разрешение Конфликтов при Слиянии #

# При возникновении конфликтов
git merge feature-branch

# Открытие конфликтных файлов
# Ручное редактирование конфликтующих участков
# Удаление маркеров конфликтов (<<<<<<<, =======, >>>>>>>)

# После разрешения конфликтов
git add .
git commit

Практические Рекомендации по Работе с Ветками #

  1. Создавайте отдельную ветку для каждой логически завершенной задачи
  2. Используйте осмысленные названия веток
  3. Регулярно синхронизируйте свою ветку с основной веткой
  4. Удаляйте ветки после их слияния

🌍 Работа с Удалёнными Репозиториями #

Основы Работы с Удаленными Репозиториями #

# Добавление удаленного репозитория
git remote add origin https://github.com/username/repository.git

# Список удаленных репозиториев
git remote -v

# Загрузка изменений без слияния
git fetch origin

# Загрузка и слияние изменений
git pull origin main

Различия между git fetch и git pull #

  • git fetch: Загружает изменения из удаленного репозитория БЕЗ автоматического слияния
  • git pull: Загружает и СРАЗУ СЛИВАЕТ изменения с текущей веткой

Работа с Несколькими Удаленными Репозиториями #

# Добавление нескольких удаленных источников
git remote add upstream https://github.com/original/repository.git
git remote add fork https://github.com/myusername/repository.git

🧩 Дополнительные Возможности Git #

Работа с Подмодулями #

# Добавление подмодуля
git submodule add https://github.com/example/library.git libs/library

# Инициализация подмодулей
git submodule init
git submodule update

# Клонирование репозитория с подмодулями
git clone --recursive https://github.com/example/project.git

Использование Тегов #

# Создание легковесного тега
git tag v1.0.0

# Создание аннотированного тега
git tag -a v1.1.0 -m "Релиз версии 1.1.0"

# Просмотр тегов
git tag

# Отправка тегов на удаленный репозиторий
git push origin v1.0.0
git push origin --tags

🔄 Обновление Терминологии #

Переименование Основной Ветки #

# В локальном репозитории
git branch -m master main

# На удаленном репозитории (GitHub)
# 1. Изменить настройки репозитория в веб-интерфейсе
# 2. Обновить локальный репозиторий
git branch -m master main
git fetch origin
git branch -u origin/main main

💡 Лучшие Практики #

Рекомендации по Коммитам #

  1. Частота коммитов:

    • Коммитьте после завершения логически законченных изменений
    • Один коммит = одна задача
  2. Сообщения коммитов:

    # Шаблон сообщения коммита
    <тип>: <краткое описание>
    
    <развернутое описание (необязательно)>
    
    Примеры:
    feat: добавить аутентификацию пользователей
    fix: исправить утечку памяти в модуле кэширования
    docs: обновить README с инструкциями по установке

Рекомендуемые Ресурсы #

📚 Дополнительные Ресурсы #

🎓 Заключение #

Git - это не просто инструмент, это философия совместной разработки. Чем больше вы практикуетесь, тем легче становится работать.

Практика - ключ к совершенству!