DevOps & CI/CD

Git

Распределённая система контроля версий: хранит полную историю изменений проекта локально и позволяет работать над кодом параллельно.

Что такое Git

Git (гит) — распределённая система контроля версий. Она сохраняет снимки состояния проекта (коммиты), позволяет вернуться к любому из них, вести параллельные ветки и сливать работу нескольких человек без затирания чужих правок.

«Распределённая» означает, что у каждого разработчика на диске лежит полная копия истории, а не только рабочие файлы. Отсюда практические следствия: git log, git diff и переключение веток работают мгновенно и без сети, а сервер нужен только чтобы обмениваться коммитами с командой.

Создан Линусом Торвальдсом в 2005 году для разработки ядра Linux. Сегодня — фактический стандарт: на Git работают GitHub, GitLab и Bitbucket.

Git и GitHub — не одно и то же

Частая путаница. Git — программа на вашем компьютере, git в терминале. GitHub — сайт, который хранит копию репозитория в интернете. Git прекрасно работает без всякого GitHub — хоть с репозиторием на своём VPS по SSH.

Три состояния файла

Ключевая модель, без которой Git кажется нелогичным:

рабочий каталог  →  staging (index)  →  репозиторий
   (правки)          git add            git commit
  • Working directory — файлы, которые вы редактируете.
  • Staging area — «корзина» изменений, отобранных в следующий коммит. Именно она позволяет закоммитить две правки из пяти.
  • Repository — папка .git с историей коммитов.

Базовый цикл

git init                      # создать репозиторий
git clone <url>               # или склонировать существующий

git status                    # что изменено
git add file.py               # отобрать в коммит
git add -p                    # отобрать по кускам, интерактивно
git commit -m "fix: таймаут"  # зафиксировать
git push origin main          # отправить на сервер
git pull                      # забрать чужие изменения

Подробный разбор pull, fetch, stash, revert — в отдельной статье про команды Git.

Ветки

Ветка в Git — просто подвижный указатель на коммит, поэтому создание ветки ничего не копирует и занимает миллисекунды. Это и сделало ветвление повседневной операцией.

git switch -c feature/auth    # создать ветку и перейти
git switch main               # вернуться
git merge feature/auth        # влить ветку
git branch -d feature/auth    # удалить влитую

Слить ветки можно через merge (сохраняет историю как есть) или rebase (переносит коммиты, делая историю линейной). Как договориться о ветках в команде — см. Git Flow.

Что такое Git Bash

Git Bash — терминал, который ставится вместе с Git for Windows. Это эмуляция Bash-окружения из Linux: вместе с git вы получаете ls, grep, ssh, curl, которых нет в стандартном cmd. Нужен он ровно потому, что почти вся документация и скрипты вокруг Git написаны под Unix-шелл. На Linux и macOS никакого Git Bash нет — там Git работает в обычном терминале.

Настройка после установки

git config --global user.name "Ivan Petrov"
git config --global user.email "ivan@example.com"
git config --global init.defaultBranch main
git config --global pull.rebase true      # линейная история вместо merge-коммитов

ssh-keygen -t ed25519 -C "ivan@example.com"   # ключ для доступа к серверу
cat ~/.ssh/id_ed25519.pub                     # добавить в GitHub/GitLab

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

Git в инфраструктуре

Git давно вышел за пределы кода. В нём хранят манифесты Kubernetes, плейбуки Ansible и конфиги серверов — подход называется GitOps / IaC. Push в репозиторий запускает CI/CD-пайплайн, а история коммитов становится журналом изменений инфраструктуры: видно, кто и когда поменял лимиты памяти на проде.

Связанные термины

Готовы запустить GPU-задачу?

Запустить GPU-сервер