Git. Урок 1. Введение.
Установка и настройка.

В этом уроке мы с вами познакомимся с мощнейшим инструментом, которым должен владеть каждый уважающий себя разработчик. Встречайте короля систем контроля версий – Git. Расскажем, чем же он так хорош, где применяется, а главное - как его установить и настроить.

Git. Урок 1. Введение. Установка и настройка.

В этом уроке мы с вами познакомимся с мощнейшим инструментом, которым должен владеть каждый уважающий себя разработчик. Встречайте короля систем контроля версий – Git. Расскажем, чем же он так хорош, где применяется, а главное - как его установить и настроить.
Smartiqa Git cover
  • Урок: 1
  • Команды: config
В КОНЦЕ УРОКА ЕСТЬ ВИДЕО

Оглавление

1
Теоретический блок
1. Что такое системы контроля версий
2. Зачем нужен контроль версий?
3. Разновидности архитектур VCS
3.1. Локальная система контроля версий
3.2. Централизованная система контроля версий
3.3. Распределенная система контроля версий
4. Как появился Git?
5. Почему именно Git?
Перейти
2
Практический блок
1. Установка и настройка Git
1.1. Установка для пользователей Windows
1.2. Установка Git в Linux
2. Видео "Установка, настройка Git, создание репозитория"
3. Домашнее задание
Перейти

ТЕОРЕТИЧЕСКИЙ БЛОК

1

Что такое системы контроля версий?

Дадим определение:
Система управления версиями (от англ. Version Control System, VCS) — программное обеспечение для облегчения работы с изменяющейся информацией. Система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение, и многое другое.
Такая система фиксирует изменения, что позволяет вам в случае чего откатиться к любой предыдущей версии файла. Кроме отката изменений, система контроля версий позволяет сравнивать версии одного и того же файла, чтобы найти в нем изменения, видеть, кто эти изменения внес, когда это было сделано и что могло вызвать проблему.

Чтобы сформировать у вас интуитивное понимание, приведу пример. Представьте себе, что вы разрабатываете голосового помощника для мобильных устройств. Ваше приложение уже выпущено в Play Market и в AppStore и пользуется успехом. Теперь вам захотелось добавить в него новую функцию: таймер. Вы пишите код, загружаете обновление в Play Market и AppStore, но внезапно вы узнаете от пользователей, что все сломалось. Теперь, чтобы исправить ошибку, вам нужно пересматривать весь код, чтобы вспомнить, что вы изменяли, и убирать это.

Такой процесс займет очень много сил и времени, а пользователей оставит недовольными. Вам бы очень помогла система контроля версий. Вы бы загрузили в нее файлы с кодом до внесения изменений, а после обнаружения ошибки, откатились бы к ним за считанные секунды. Функция отката изменений позволила бы вам оперативно загрузить в магазины старую версию приложения, которая работает без ошибок.
2

Зачем нужен контроль версий?

Понятно, что проект для команды - это бесценные знания, накопленные за все время его существования, и никому бы не хотелось, чтобы с ними что-то случилось. Система контроля версий защищает эти накопления от человеческого фактора, непредвиденных последствий и разных форс-мажоров.

Обычно, работая в команде, каждый разработчик трудится над какой-то своей частью проекта: создает новые функции, оптимизирует уже существующие, исправляет ошибки в уже написанном коде. Сам проект обычно организован в виде дерева файлов. Контроль версий помогает сотрудникам одновременно работать над проектом, отслеживать, кто какие изменения внес, и избегать при этом различных конфликтов (например, когда два человека изменят один и тот же файл по-разному).

Помимо этого, как уже было сказано выше, любое изменение кода может привести к непредвиденным последствиям и сломать весь проект вообще. Система контроля версий защищает и от этого.
3

Разновидности архитектур VCS

Существует три основных разновидности архитектур систем контроля версий: локальная, централизованная и распределенная. Рассмотрим их все.

3.1. Локальная система контроля версий

Вы спросите: почему нельзя просто сохранять файл под разными именами, а затем открывать нужный? Да, так делать можно, но это вызовет массу проблем. Вы можете забыть, какой файл содержит итоговую версию, можете запутаться в миллионе одинаковых файлов, отличающихся парой строк кода. Вы не сможете быстро сравнить две версии, чтобы посмотреть, какие изменения были внесены.

Для решения этих проблем была придумана локальная система контроля версий. Схематически она представляет из себя следующее:
Smartiqa Git VCS types
Схема работы локальной системы контроля версий
Из рисунка видно, что есть несколько версий одного и того же файла. А сам файл сейчас находится в состоянии третьей версии.

Одной из самых популярных локальных систем контроля версий на сегодняшний день (не считая Git) остается система RCS. Она работает по принципу сохранения изменений в ваших файлах. То есть она хранит не целую новую версию, а только указания к изменению первоначального файла. Например, "добавить к предыдущей версии строку import math". Таким образом, последовательно изменяя файл, система воссоздает любую из его версий.
Подытожим:
Локальные VCS хранятся у вас на компьютере. Пример локальной VCS - RCS - одна из первых систем контроля версий, разработанная в 1985 году.

Составим список преимуществ и недостатков локальных VCS.

Преимущества:
1. Позволяет хранить историю изменения файлов локально, без интернета.
2. Вы независимы от сторонних серверов.

Недостатки:
1. Вы можете потерять все файлы, если с вашем компьютером что-то случится.
2. Вы не можете работать в команде, поскольку репозиторий доступен только вам.

3.2. Централизованная система контроля версий

Как было сказано выше, одна из проблем, с которой вы столкнетесь, работая в команде разработчиков - это то, что вам нужно делиться файлами (и их версиями) с другими разработчиками.

Например, чтобы старший разработчик проверил ваш код на ошибки, перед тем, как дать вам разрешение на внесение изменений в рабочий файл. Для решения этой проблемы была придумана централизованная система контроля версий. Схематически она устроена так:
Smartiqa Git VCS types
Схема работы централизованной VCS
Из рисунка видно, что есть один сервер с сохраненными версиями всех файлов, а разработчики обращаются к нему за файлами.

Такими системами были очень популярные в свое время CVS, Subversion и Perforce. Долгое время такой тип системы контроля версий считался стандартом. Такая система довольно удобна с точки зрения руководства компании. Она позволяет им следить, кто и чем занимается в текущий момент, позволяет настроить: кому какие файлы можно редактировать, а кому - нельзя.

Тем не менее, централизованная система контроля версий имеет множество недостатков. Если сервер отключится на несколько часов, то работа целой компании будет парализована: никто не сможет сохранять версии файлов с кодом.

Если будет поврежден жесткий диск сервера, на котором хранятся данные, то восстановить их не удастся (если только не были сделаны копии), и вся работа будет потеряна.

В этом плане такая система мало чем отличается от локальной: если вы храните все данные проекта только на одной машине, вы рискуете потерять все из-за непредвиденного сбоя в работе этой машины.

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

Примерами удаленных систем контроля версий являются CVS, Subversion и Perforce.

Преимущества централизованных VCS:
1. Вы можете работать в команде с другими разработчиками.
2. Ваше начальство видит, чем вы занимаетесь.
3. У администратора есть четкий контроль, кто и что может делать. Администрировать центральную VCS намного проще, чем локальные на каждой машине.

Недостатки централизованных VCS:
1. Все данные хранятся только на одном сервере. Если он выключится, то работу всей компании парализует.
2. Если с сервером что-то случится, а копий данных нет, то весь проект может быть потерян.
3. Для работы необходим хороший интернет на протяжении целого дня.

3.3. Распределенная система контроля версий

Распределенная система контроля версий решает все описанные выше проблемы. К этой группе систем относится Git, Mercurial, Bazaar и некоторые другие. На схеме распределенные системы контроля версий выглядят так:
Smartiqa Git VCS types
Схема работы распределенной VCS
Особенность этой архитектуры в том, что клиенты не хранят у себя отдельные файлы, они хранят полную копию всех версий проекта. Поэтому, если что-то случится с сервером, работа не остановится, а продолжится, как ни в чем не бывало. Работники будут сохранять версии у себя на компьютере, а как только сервер восстановится, они загрузят все эти версии на него.

Кроме того, почему сервер обязательно должен быть один? Правильный ответ: серверов может быть сколько угодно! Это открывает безграничные возможности для коллаборации разработчиков. Ведь это значит, что если вы делаете какое-нибудь открытое программное обеспечение и используете систему контроля версий, любой человек сможет скопировать данные с вашего сервера на свой, улучшить это ПО, не боясь ошибок (ведь можно откатиться к предыдущей версии), а затем (с вашего согласия) записать улучшенную версию на ваш сервер. И так с миллионами людей по всему миру.
Подытожим
Распределенные VCS - лидер по популярности на сегодняшний день. Примеры таких систем - это Git, Mercurial и Bazaar.

Преимущества распределенных VCS:
1. Работа компании теперь не зависит от работы сервера. Если сервер отключится, то каждый сотрудник продолжит работу с локальной копией репозитория, а после загрузит ее на сервер.
2. Можно работать с несколькими удаленными репозиториями, делиться кодом с другими людьми и коллаборировать целыми компаниями.
ОБЩИЙ ИТОГ

Для закрепления повторим все, что было сказано ранее. Итак, VCS открывает перед вами следующие возможности:

1. Сохранять все изменения в файлах в хронологическом порядке, при этом не путаясь в именах миллионов копий одного и того же файла.
2. Избегать неприятных ошибок в коде, вызванных непредвиденным поведением новых функций.
3. Отслеживать, над какими файлами вы работаете (и работаете ли вообще). Вам это вряд ли пригодится, а вот вашему начальству – очень.
4. Работать параллельно над одним и тем же проектом вместе с командой, не боясь конфликтов, например, одновременного изменения одного и того же файла.
5. Делиться своим кодом. А разработчики со всего мира могут улучшать его и записывать изменения на ваш сервер.

Как появился Git?

Git - это самая популярная на сегодня система контроля версий. Это развитый проект с открытым кодом, активно поддерживаемый и совершенствуемый. Как я уже говорил выше, Git устроен по принципу распределенной архитектуры, но поддерживает и локальную работу (в таком случае ваш компьютер будет единственным сервером, где хранятся все версии проекта).

Git был разработан командой Линуса Торвальдса в 2005 году, как open-source аналог уже существующим системам. Но разработка Git не была спонтанным решением. Дело в том, что с самого первого релиза в 1991 году разработка ядра Linux выполнялась по старинке: старая версия архивировалась, а новые патчи от разработчиков становились новой версией.

Но с ростом популярности рос и объем данных, поэтому в 2002 году было принято решение перевести ядро Linux на распределенную систему управления версиями BitKeeper от BitMover Inc. Однако между компаниями произошел разлад и BitMover Inc. отозвали лицензию на бесплатное использование своего ПО.

Этот инцидент и подстегнул Линуса Торвальдса с командой разработчиков создать свою открытую распределенную систему контроля версий. Ребята хотели разработать надежное решение, обладающее высокой скоростью работы и упрощающее командную разработку.

Основные требования к новой системе были следующими:
  1. Скорость
  2. Простота дизайна
  3. Поддержка нелинейной разработки (тысячи параллельных веток)
  4. Полная распределенность
  5. Возможность эффективной работы с такими большими проектами, как ядро Linux (как по скорости, так и по размеру данных)
Разработка новой системы контроля версий началась 3 апреля 2005 года, а первая версия Git была готова к 7 апрелю того же года. Ядро Linux было переведено на Git 16 июня. 25 июня Линус отказался от должности главного разработчика, но несмотря на это, проект до сих пор поддерживается мировым сообществом под руководством Джунио Хамано.
5

Почему именно Git?

Чтобы в полной мере понять, в чем заключаются все преимущества Git, надо уметь работать в Git. Ну а пока мы не умеем, просто пробежимся по основным возможностям этой системы. Не пугайтесь новых непонятных слов, все термины будут подробно описаны позднее. Сейчас наша задача понять, что Git - это самая крутая VCS на сегодняшний день.

Итак, Git обладает следующими преимуществами.

1. Полная копия репозитория лежит у вас на машине.

Отсюда вытекает два серьезных преимущества: все работает очень быстро, и вы получаете полный контроль над репозиторием:

  1. Чтобы создать репозиторий нужна всего одна команда - git init.
  2. Все файлы VCS хранятся только в одной папке .git. Никаких .svn в каждой директории.
  3. Вам не нужен постоянный и бесперебойный интернет. Утром - скачали данные с сервера к себе на машину, днем - поработали у себя, вечером - залили данные обратно на север. Проще, чем заливать каждый файл после изменения.
  4. В локальном репозитории вы можете создавать дополнительные ветки, тестировать что-то новое и делать все, что угодно. Никто не увидит этого, ведь репозиторий только ваш.
Smartiqa Ветки в Git
Ветки в Git

2. Контроль

В Git можно делать что угодно с коммитами:
  1. Удалить
  2. Изменить
  3. Поменять местами
  4. Объединить несколько коммитов в один
  5. Разделить один коммит на несколько
  6. Перетаскивать коммиты между ветками

3. Ветки

Ветки в Git - это настолько мощный и функциональный инструмент, что все выполняется в них. От маленьких задач до релиза.
  1. Создать ветку, переключиться между ветками, слить ветки, удалить ветку - рутинные операции.
  2. За исключением релизных, ветки живут 1-3 дня. Создали ветку, написали новую функцию, протестировали, убедились, что все работает, слили с основной и удалили.

4. Коммиты

Чтобы сделать коммит (фиксацию изменений), нужно указать, какие изменения в него необходимо добавить (именно изменения, а не файлы). Преимущество этого в следующем.

  1. Перед тем, как делать коммит, можно посмотреть и настроить, какие файлы в него попадут. Например, если вы хотите зафиксировать изменения только в одном файле из целого проекта - Git позволит вам это сделать.
  2. Вы можете занести в коммит только часть изменения в файле. А остальные изменения откатить, или положить в другой коммит.
  3. Просмотр истории коммитов и различий в файлах
  4. Можно посмотреть, какие изменения были внесены в файл в разных коммитах.
  5. Можно посмотреть историю коммитов всей ветки, чтобы проследить, как менялись файлы.

5. Stash

Stash - это очень удобная функция Git. Она позволяет заморозить текущие изменения и переключиться на другую ветку.

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

6. Работа в команде

Вся работа выполняется атомарно в соответствующих ветках. После завершения работы, она отправляется на ревью, и только после этого ветка может быть слита с основной. Это позволяет не допустить присутствие непроверенного кода на основной ветке.

Очень удобно проводить ревью задачи, которая выполнена в отдельной ветке. Посмотреть различия коммитов, что-то исправить, прокомментировать, отправить обратно на доработку, а потом объединить отдельные коммиты и слить в основную ветку.

7. GitHub, BitBucket etc.

Гитхаб, битбакет и другие бесплатные удаленные репозитории очень удобны и часто используются для open-source проектов. Там делают форки этих проектов, обсуждают их и развивают.

ПРАКТИЧЕСКИЙ БЛОК

1

Установка и настройка Git

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

Официальная страница Git по установке на разные системы: https://git-scm.com/book/ru/v2/Введение-Установка-Git

1.1. Установка для пользователей Windows

В целом процесс установки Git на Windows довольно стандартный. Необходимо:
  1. Скачать установщик с официального сайта Git
  2. Запустить его
  3. Выбрать подходящие опции из предлагаемых мастером установки

Остановимся на самых важных из настроек.

1. Выбор имени основной ветки
Обычно выбирают main или develop, но вы можете выбрать любое другое слово.
Советуем задать имя вручную, а не позволять Git самому решать. Потому что эта версия Git может называть основные ветки master, а следующее обновление будет называть их как-нибудь по-другому. Это вызовет путаницу. Но если вы сами зададите имя ветки, новая версия Git будет использовать его же.
Smartiqa Выбор имени основной ветки
Установка Git на Windows: задание имени основной ветки
2. Настройка запуска Git из консоли
Еще одна настройка, на которой стоит остановиться - разрешить Git запускаться из ПО других компаний. Это позволит вам запускать Git напрямую из консоли Windows или любых эмуляторов консолей.
Smartiqa Ветки в Git
Установка Git на Windows: настройка запуска Git из консоли

Остальные настройки в принципе должны быть понятны. Более того, после завершения установки вы все еще сможете отредактировать значение того или иного параметра с помощью утилиты git config. О ней мы подробнее расскажем в следующем уроке, но пример использования вы можете найти в следующем пункте про установку Git на Linux.

1.2. Установка Git в Linux

1. Установка Git
В линукс установку удобнее производить через консоль. Чтобы установить Git в Debian-based систему (напр. Ubuntu) наберите команду:
Терминал

$ sudo apt-get install git

Если у вас другая система, подробную информацию по установке вы найдете на официальном сайте Git.

2. Настройка Git
Чтобы настроить Git на линуксе, вам нужно отредактировать файл ~/.gitconfig. Сделать это можно напрямую через редактор или с помощью утилиты git config. Второй способ является более предпочтительным с точки зрения безопасности.

Список возможных команд утилиты git config:
Терминал

git config --list 
Чтобы задать имя начальной ветки выполните следующую команду:
Терминал

$ git config --global init.defaultBranch <имя_ветки> 
Более подробно про настройку можно почитать в официальном руководстве Git.
2

Видео: Установка и настройка Git

Также предлагаем вам посмотреть нашу видео-инструкцию к текущему уроку. В ней мы:
  1. Устанавливаем Git
  2. Настраиваем Git
  3. Создаем репозиторий Git
Хронометраж

ТЕОРИЯ
00:20 План видео
01:00 Три шага для начала работы с Git
01:25 Установка Git на Windows
03:05 Что такое Git Bash
05:10 Установка Git на Linux / MacOS
05:40 Настройки Git: Системные, глобальные и локальные
07:30 Файлы конфигурации GIt: gitconfig, .gitconfig, .git/config
08:20 Способы изменения настроек Git
08:50 Использование утилиты git config для изменения настроек Git
10:50 Способы создания репозитория Git
12:00 Использование команды git init для создания репозитория Git

ПРАКТИКА
12:45 Установка, настройка и создание репозитория Git на ОС Windows
24:10 Установка, настройка и создание репозитория Git на MacOS
3

Домашнее задание

Задание
Подготовьте рабочее окружение в соответствии с типом вашей операционной системы:
1. Установите Git
2. Выполните базовую настройку
Как вам материал?

Читайте также