Git - система контроля версий кода и других файлов

Что и как делает: Git фиксирует любые изменения в каталоге (папке, windows, например) и создает версии каталога, каждую из которых можно восстановить в любой момент времени. Кроме того, git подсвечивает все изменения между двумя версиями кода. То есть можно легко посмотреть кто, что и когда поменял. Так же git позволяет работать с одним и тем же кодом или файлами нескольким людям одновременно с помощью механизма создания ветвей (branch) и объединения этих ветвей (merge).

Для того, чтобы понять что именно делает git представьте себе, что у нас есть задача изменить выборку клиентов так, чтобы в неё попадали только женщины. Текущий sql скрипт находится в папке python на которой настроен git.

Текущий скрипт: select * from table;

Аналитик, получив задачу, меняет скрипт в соответствии с условиями (добавляет where gender='female')

Модифицированный скрипт: select * from table where gender='female';

Затем с помощью специальных команд фиксирует изменение в git.

Готово, теперь у нас есть две версии скрипта: текущая и прошлая. Мы можем посмотреть кто, когда и что изменил, а так же при необходимости быстро откатиться на предыдущую версию скрипта, не содержащую условие на выборку женщин.

И это только один скрипт. Но вообще git следит за изменением каждого файла и каждой папки в репозитории (хранилище). Нам не нужно думать о том, что именно поменялось. Нужно только иногда выполнять комманды чтобы git фиксировал версию репозитория и показал что именно изменилось.

Изменения git записывает в виде хеша (SHA) дельты различий между двумя версиями репозитория (хранилища). Не будем здесь подробно останавливаться на механике хранения, более детально можно прочитать в книге Git magic (ниже в этой статье), сейчас для нас главное что это работает и изменения фиксируются, сохраняются и доступны в виде версий в любой момент времени

Классический git работает по принципу коммандной строки. На черном экране пишете команду и git выполняет её (основные команды ниже). 

Для более привычных к комфорту есть множество графических оболочек git'а, например TortoiseGit

Установка: Устанавливается git локально на конкретный каталог. Но есть и онлайн версии git. Например, https://github.com . Там все более красиво чем в командной строке, но принцип тот же.  И да, можно синхронизировать локальную и онлайн версию git. Обычно все так и делают.

Недостатки: Помимо массы преимуществ, git имеет как минимум один недостаток. Он сильно прирастает в объеме при работе с бинарными (исполняемыми) файлами. Кроме того, он не показывает что именно было изменено в бинарном файле, а просто хранит каждую из версий файла. Бинарные файлы - это те, которые скомпилированы в цифровой вид. То есть при открытии блокнотом, вы увидите не код, а последовательности символов. Яркие примеры бинарников - это картинки, pdf и файлы MS Office. Хотя есть и лайфхаки для наиболее распространенных бинарников. Например для MS Word

Официальный сайт Git: https://git-scm.com

Хорошая книга по Git: Магия Git (git magic Ben Lynn)

Бесплатные курсы по Git: codecademy.com

Шпаргалка по основным командам Git:

git status показывает информацию о текущем статусе ветки. Все изменения/добавления/удаления будут показаны с помощью этой команды

git add --all . добавляет все изменения, показанные в  git status, в репозиторий (хранилище)

git commit -m "Любой комментарий к версии" - быстрый коммит с комментарием (утверждение изменений, добавленных в git add)

git log история изменений в репозитории

git pull origin master забирает и мерджит (сливает вместе) ветку master из удаленного репозитория origin. master и origin можно менять на то что вам нужно. Или не набирать вовсе. В этом случае будут забираться и сливаться изменения всех веток

git push origin master отправляет и мерджит (сливает вместе) ветку master в удалённый репозиторий origin. master и origin можно менять на то что вам нужно. Или не набирать вовсе. В этом случае будут отправляться и сливаться изменения всех веток

git remote add origin https://github.com/<ваш username на github>/название вашего репозитория.git создание удаленного репозитория origin. Удаленных репозиториев может быть несколько. Все они задаются аналогично с заменой origin на любое имя и заменой адреса на тот, где лежит удаленный репозиторий

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

git branch -a список всех веток в репозитории (звездочкой отмечена та, в которой мы работаем)

git branch slave создает новую ветку slave (или любое другое имя, которое вам нравится)

git checkout slave переключиться на ветку slave (или любую другую отображаемую в git branch -a)

git merge slave замерджить (слить вместе) ветку slave в ту из которой выполняется команда

git config --global credential.helper store создает хранилище учетных данных. Нужно для того, чтобы запомнить логин/пароль и не вводить его каждый раз

git config --global credential.helper cache --timeout=36000 задает время хранения логина/пароля для авторизации в секундах (в нашем случае это 36000 сек)

git config --global --unset-all credential.helper удаляет все глобальные хранилища учетных данных git. То же самое, но без --global, удалит локальные хранилища учетных данных.

git config --global http.sslVerify false отключает ssl верификацию через сертификат. Если у вас нет сертификата, а авторизоваться хочется :) устраняет ошибку Failed with error: fatal: unable to access '...': SSL certificate problem: unable to get local issuer certificate