Система контроля версий Git
Git – это система управления версиями (Version Control System, VCS) с распределенным контролем состояния репозитория. Это значит, что каждый разработчик имеет полную копию репозитория (директория, содержащая все файлы проекта и историю изменений этих файлов) на своем локальном компьютере. Это позволяет команде разработчиков работать с кодом проекта одновременно и без конфликтов.

Краткий исторический экскурс
Git — это система контроля версий, созданная Линусом Торвальдсом в 2005 году. Он был разработан как средство для обслуживания ядра Linux, но в настоящее время широко используется в различных проектах и доменах. Основная цель Git — предоставить быстрый и надежный способ хранения и контроля версий кода, чтобы разработчики могли легко отслеживать изменения, откатывать их и работать в команде.

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

Согласно отчету GitHub Octoverse за 2019 год, на GitHub было более 40 миллионов пользователей, и большинство из них используют Git в качестве своей системы контроля версий. Кроме того, в отчете говорится, что на GitHub было более 100 миллионов репозиториев, и только в 2019 году в эти репозитории было внесено более 2,1 миллиарда материалов.

Помимо GitHub, Git также используется на других платформах, таких как GitLab и Bitbucket, а также разработчиками, которые размещают свои собственные репозитории Git. Поэтому можно с уверенностью сказать, что миллионы разработчиков используют Git для контроля версий и совместной работы.

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

Мы команда IT стартапа. У нас есть исходный код нашего продукта. Мы планируем его развивать, а также добавлять новый функционал, расширяя его возможности. Также мы планируем постепенно подключать к работе новых разработчиков. Делиться кодом в соц. сетях, как и с помощью облачных сервисов, ненадежно и опасно для нашего проекта и пользователей нашего продукта. В таком случае всегда есть риск «порчи кода», кражи интеллектуальной собственности, роста числа ошибок и уязвимостей в коде из-за отсутствия единой системы контроля версий. Мы будем использовать тестовый код, представленный ниже.

Приступаем к использованию Git

Несмотря на то, что проприетарное ПО все еще занимает большую долю рынка ПО в образовательном и корпоративном софте, все чаще организации делают выбор в пользу open source разработок, которые подкупают их гибкостью и экономией средств.

Установка Git на Windows
Скачаем приложение git c официального сайта: https://git-scm.com/ и установим его на компьютер.

Рисунок 1 – Установка Git на Windows

После завершения установки убедимся, что git корректно установился на компьютер, и мы можем приступать к работе. Для этого откроем командную строку в Windows и введем команду git, как это показано на рисунке 2. В окне консоли должна отобразиться информация о командах git, как показано на риcунке 2.

Если у вас возникли проблемы, попробуйте удалить из системы приложение git и повторить процесс установки, внимательно следуя инструкциям и указаниям программы установщика git.

Рисунок 2 – Командная строка Windows с введеной командой git

Установка Git на Linux
Перейдем на официальный сайт git и откроем раздел «Установка git». Проще всего устанавливать git на Linux как бинарный пакет, используя стандартный менеджер пакетов вашего дистрибутива.
На рисунке 2.1 отображен пример для дистрибутива CentOs 7.

Рисунок 2.1 – Команда для установки git через стандартный менеджер пакетов

Если git установлен успешно, то при запуске команды git в командной строке вы увидите набор доступных команд (рисунок 2.2).

Рисунок 2.2 – Командная строка Linux с введеной командой git

Тестовый код программы
В качестве примера будем использовать код тестовый программы, разработанной на языке Python для наглядной работы с системой контроля версий git.

Тестовая программа выполняет запрос на сервис погоды OpenWeatherMap, используя обращение к сервису по API, затем полученный результат записывается в базу данных SQLite.

import requests
import sqlite3
	
# Connect to the SQLite database
conn = sqlite3.connect("example.db")
cursor = conn.cursor()
# Create a table to store the data
cursor.execute(""" CREATE TABLE IF NOT EXISTS weather (id INTEGER PRIMARY KEY, city TEXT, temperature REAL) """)
# Make a request to the API
Response = requests.get("https://api.openweathermap.org/data/2.5/weather?q=London&appid=your_api_key")
data = response.json()
# Extract the relevant data
city = data["name"]
temperature = data["main"]["temp"]
# Insert the data into the table
cursor.execute("INSERT INTO weather (city, temperature) VALUES (?, ?)", (city, temperature))
# Commit the changes to the database
conn.commit()
# Close the connection to the database
conn.close()
Описание тестовой программы

Эта программа сначала подключается к базе данных SQLite с именем «example.db» и создает таблицу с именем «погода», если она еще не существует. Затем она делает запрос к общедоступному API (в данном случае API OpenWeatherMap), используя библиотеку запросов requests. Ответ от API анализируется как JSON, и из него извлекаются необходимые данные. Наконец, данные вставляются в таблицу «погода» в базе данных SQLite с помощью оператора вставки SQL, и изменения фиксируются.

Обратите внимание, что вам нужно заменить «your_api_key» на ваш собственный ключ API из OpenWeatherMap API, иначе код не будет работать. Кроме того, на вашем компьютере должна быть установлена библиотека sqlite3.

Важно иметь в виду, что этот код является примером, в котором отсутствуют многие важные детали, которые должны учитываться перед запуском проекта в штатном режиме. Например, обработка ошибок и исключительных ситуаций, такие как сбои соединения, ошибки API и возможные ошибки выполнения SQL запроса к СУБД. Также данный код не учитывает должным образом вопросы безопасности. Используя данный код, разработчики должны понимать, какие недостатки присутствуют в предоставленном тестовом коде.
Оформление рабочего каталога
Для удобства работы с файлами проекта создадим на диске D:\ папку и назовем ее «my_project». Можно выбрать другое расположение папки с проектом. В качестве примера далее будем считать, что путь к файлам проекта выгляди следующим образом: «D:\my_project».

Перейдем в папку с нашим проектом (my_project) и вызовем командную строку, как показано на рисунке 3. Для этого нужно нажать на строку, содержащую путь к текущей папке, ввести команду cmd и нажать на клавиатуре кнопку Enter.
Рисунок 4 – Вызов командной строки в текущей папке.
После выполнения данной команды должно отобразиться окно консоли (рисунок 5). В этом окне мы продолжим работу с git.

Рисунок 5 – Командная строка в текущей папке проекта.

Настройка конфигурации git
Перед тем, как приступить к работе с кодом, нужно выполнить краткую настройку git, а именно указать имя пользователя и почтовый адрес, эта информация используется системой git для отслеживания операций всех пользователей проекта в репозитории. Это нужно выполнить только один раз. При работе с другим проектом вам не нужно повторно указывать имя пользователя и почтовый адрес.
Репозиторий — это каталог, в котором располагаюся все файлы одного проекта. В нашем случае, у нас есть каталог «my_project» — его мы и будем использовать. В итоге у вас должно получиться так же, как показано на рисунке 6.

Рисунок 6 – Ввод имени и почты пользователя в настройках git

Если вы хотите проверить используемую конфигурацию, можете использовать команду:
git config --list, чтобы показать все настройки, которые git найдет:
user.name= Ivan Ivanov
user.email=my_email@example.com
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto

Также вы можете проверить значение конкретного ключа, выполнив
git config <key>:
git config user.name
Ivan Ivanov

Если вам нужна помощь при использовании git, есть три способа открыть страницу руководства по любой команде git:
git help <команда>
git <команда> --help
Например, так можно открыть руководство по команде: git config
git help config

После ввода имени пользователя и адреса электронной почты, можно закончить с настройкой git и перейти к знакомству с основными командами git. Для базового варианта использования Git достаточно знать всего несколько команд для ведения истории изменений.

· git init
Команда git init создает в текущем каталоге новый подкаталог с именем .git, содержащий все необходимые файлы репозитория и структуру git репозитория. На этом этапе ваш проект еще не находится под версионным контролем.

· git add <название файла_1, название файла_2>
Команда git add добавляет содержимое рабочего каталога в индекс (staging area) для последующего коммита. По умолчанию git commit использует лишь этот индекс, так что вы можете использовать git add для сборки слепка вашего следующего коммита. Это одна из ключевых команд Git.

· git status
Команда git status показывает состояния файлов в рабочем каталоге и индексе: какие файлы изменены, но не добавлены в индекс; какие ожидают коммита в индексе. Вдобавок к этому выводятся подсказки о том, как изменить состояние файлов.

· git commit
Команда git commit берет все данные, добавленные в индекс с помощью git add, и сохраняет их слепок во внутренней базе данных, а затем сдвигает указатель текущей ветки на этот слепок.

· git push
Команда git push используется для установления связи с удаленным репозиторием, определения локальных изменений, отсутствующих в текущей версии кода, и их передачи на удаленный репозиторий, например, GitHub или Bitbucket.

· git pull
Команда git pull работает как комбинация команд git fetch и git merge, т.е. Git вначале забирает изменения из указанного удаленного репозитория, а затем пытается объединить (выполнить слияние) их с текущим кодом (веткой).


Первый пример работы с git
Отлично! Теперь, когда мы настроили параметры нашего git и познакомились с основными командами, выполним следующие действия:
1. Выполним инициализацию репозитория в папке с проектом.
2. Проверим статус нашего репозитория.
3. Добавим файл с тестовым кодом test_project.py для отслеживания его изменений в git.
4. Создадим первый коммит и посмотрим, как изменится статус git.
Шаг 1. Инициализация нашего рабочего каталога (репозитория)
Когда вы инициализируете репозиторий командой git init, git создает ветку с именем master по умолчанию. В результате мы настроили рабочее окружение git и выполнили инициализацию репозитория (рисунок 6). Git создает ветку с именем master по умолчанию.

Рисунок 7 – Вызов команды git init

Шаг 2. Проверка статуса репозитория
После того, как был создан репозиторий, мы можем отслеживать все изменения (статус) в рабочей папке нашего проекта, вызвав команду «git status». Что это значит? Дело в том, что после выполнения команды «git init» все изменения в нашей папке «my_project» будут контролироваться (отслеживаться) системой управления версиями git. В нашей папке есть файл «test_project.py» с тестовым кодом на языке Python. Давайте выполним команду «git status», как показано на рисунке 8.

Рисунок 8 – Вызов команды "git status"

В результате работы команды «git status» мы видим несколько сообщений, давайте поподробней разберемся, что они означают
С этого места давайте поподробней. Команда git status вывела нам подробную информацию о том, в каком состоянии в данный момент находится наш проект с точки зрения системы контроля версий git. В нашей папке есть файл «test_project.py» с тестовым кодом, и пока что изменения этого файла никак не отслеживаются. Поскольку мы планируем работать с этим кодом и хотим знать, какие измения были внесены нами либо кем-то из разработчиков нашей команды, нам нужно добавить его под контроль git.
Шаг 3. Добавление файла для отслеживания изменений git
Чтобы добавить файл для отслеживания его изменений, выполним команду:
git add test_project.py как показано на рисунке 9.

Рисунок 9 – Вызов команды "git add"

Выполним повторно вызов команды "git status" и посмотрим что изменилось (рисунок 10).

Рисунок 10 – Вызов git status после выполнения команды git add

Видим, что теперь текст сообщения несколько изменился. Строка с названием нашего тестового файла изменилась. Ранее она была выделена красным цветом (рисунок 7).
Сейчас же эта строка выделена зеленым цветом и добавилась приставка «new file: test_project.py». Это означает, что теперь git начал следить за изменениями этого файла, но пока мы их не зафиксировали. Другими словами, git увидел файл и готов зафиксировать это изменение. Для этого нам надо выполнить коммит (commit).
Шаг 4. Создаем коммит
Чтобы выполнить коммит, выполним следующую команду:
git commit –m «текст сообщения – начинаем использовать git!».

На рисунке 11 видим, что git обработал нашу команду и вернул результат, в котором сказано, что в ветке master изменен 1 файл, в нем добавлено 26 строк.

Рисунок 11 – Создание первого коммита

Другими словами, до того как мы добавили файл (git add) и создали коммит (git commit), нашей системе git нечего было отследживать, поскольку в нем не было ни одного коммита. Теперь немного остановимся на самой команде «git commit».

После команды git commit мы использовали параметр –m и в кавычках " " написали текст.
Это очень полезная фишка для комментирования изменений кода. Например, мы добавили в код новую функцию или исправили ошибку в работе программы и хотим зафиксировать это улучшение, кратко сформулировав смысл вносимых изменений в код. Сейчас в нашем проекте «test_project.py» нет проверок корректности данных, как и проверки наличия связи с удаленным сервером погоды (OpenWeatherMap).
Когда мы дабавим проверку корректности данных, нужно будет создать коммит и в качестве комментария указать:
"Добавлена проверка кода ответа от сервера OpenWeatherMap. Если код ответа: 200, данные корректны, в другом случае возникает обарботки исключительной ситуации".
Конечно, помимо сообщения при создании коммита рекомендуется использовать комментарии в коде программы и вести документацию.

Для отслеживания всех изменений git удобно использовать утилиту git-show — это утилита командной строки, которая используется для просмотра подробных данных об объектах Git (рисунок 12).

Рисунок 12 – Отображение подробной информации вызовом команды git show --pretty

Что делать, если ошибочно внесли неполное или некорректное описание коммита?
На этот случай не стоит паниковать. Всегда можно изменить содержание коммита.
Чтобы изменить последний коммит, используйте комманду: git commit –amend. После вызова команды откроется текстовый редактор, в котором можно изменить текст сообщения (рисунок 13).

Рисунок 13 – Окно редактора текста, в котором можно изменить последний коммит

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

Рисунок 14 – Отображение изменений коммита

Попробуйте внести изменения в файл «test_project.py». Например, изменив его следующим образом:

import requests
import sqlite3
	
# Connect to the SQLite database
conn = sqlite3.connect("example.db")
cursor = conn.cursor()
# Create a table to store the data
cursor.execute("""CREATE TABLE IF NOT EXISTS weather (id INTEGER PRIMARY KEY, city TEXT, temperature REAL)""")
# Make a request to the API
try:
    Response = requests.get("https://api.openweathermap.org/data/2.5/weather?q=London&appid=your_api_key")
    Response.raise_for_status()
 
    data = response.json()
    # Extract the relevant data
    city = data["name"]
    temperature = data["main"]["temp"]
    # Insert the data into the table
    cursor.execute("INSERT INTO weather (city, temperature) VALUES (?, ?)", (city, temperature))
    # Commit the changes to the database
    conn.commit()
    # Close the connection to the database
     conn.close()
except requests.exceptions.HTTPError as err:
     print(err):


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

Практическое задание:
· сохраните изменения в файле с кодом и вызовите команду git status;
· посмотрите на результат;
· как применить эти изменения в системе git?
· создайте новый коммит, чтобы зафиксировать это изменение



Вот несколько шагов, которые помогут начать работу с Git:

Изучите основы: начните с изучения основных команд Git, таких как «git init», «git add», «git commit», «git branch», «git checkout», «git merge» и «git push».
В Интернете есть множество ресурсов, таких как учебные пособия, видеоролики и документация, которые могут помочь понять основные концепции и команды.
Лучший способ изучить Git – это использовать его. Создайте новый проект, возьмите наш тестовый проект или найдите проект с открытым исходным кодом и начните экспериментировать с командами Git. Совершайте коммиты, создавайте ветки и пробуйте разные сценарии рабочего процесса Git.

Что такое публичный и приватный репозиторий?
В Git репозиторий (или сокращенно «репо») — это набор файлов и каталогов, которые отслеживаются системой контроля версий. Репозиторий может быть как общедоступным, так и частным.

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

2. Частный репозиторий — это тот, который недоступен никому, кроме людей, которым был предоставлен доступ. Эти репозитории часто используются для проектов с закрытым исходным кодом, где код не предназначен для общего доступа. Частные репозитории также используются для хранения кода, который не готов к публичному выпуску, или для конфиденциальной информации, которой не следует делиться с общественностью.
Основное различие между двумя типами репозиториев заключается в том, что общедоступные репозитории видны и доступны всем, а частные репозитории видны и доступны только избранной группе людей.
Стоит отметить, что большинство служб хостинга Git, таких как GitHub, GitLab, Bitbucket, предлагают как общедоступные, так и частные репозитории с разными ценами и ограничениями, некоторые из них предлагают бесплатные планы для общедоступных репозиториев и взимают плату за частные.

В Git репозиторий (или для краткости «repo») — это набор файлов, каталогов и истории их версий. В Git есть два типа репозиториев: общедоступные и частные.

3. Публичный репозиторий – это репозиторий, доступный для всех. Любой может просматривать, клонировать и вносить свой вклад в код в общедоступном репозитории. Публичные репозитории обычно используются для проектов с открытым исходным кодом, где код предназначен для совместного использования и использования широким сообществом разработчиков.
4. Частный репозиторий – это репозиторий, доступный только для определенной группы людей. Только авторизованные пользователи могут просматривать, клонировать и вносить свой вклад в код в частном репозитории. Частные репозитории обычно используются для проектов с закрытым исходным кодом или для проектов, которые не предназначены для общего доступа.

GitHub, GitLab и Bitbucket — популярные платформы хостинга Git, которые предоставляют как общедоступные, так и частные репозитории. На этих платформах вы можете сделать свой репозиторий общедоступным или частным при его создании. Вы также можете изменить видимость репозитория позже, но изменить его обратно может быть немного сложнее, если он общедоступный.
Важно помнить, что термины «общедоступные» и «частные» репозитории относятся к хостинговой платформе и пользователям, имеющим доступ к репозиторию, а не к Интернету в целом.



Статистика использования git
Git – одна из наиболее широко используемых систем контроля версий в мире, и статистика ее использования отражает это. Вот некоторая статистика использования Git:
1. Популярность. Согласно опросу разработчиков Stack Overflow 2020, Git – самая популярная система контроля версий, которую используют более 88% разработчиков.
2. Проекты с открытым исходным кодом. По данным GitHub, на их платформе размещено более 100 миллионов репозиториев, и большинство из них представляют собой проекты с открытым исходным кодом, использующие Git в качестве системы контроля версий.
3. Использование в отрасли: Git используется в самых разных отраслях, включая разработку программного обеспечения, финансы, здравоохранение и правительство.
4. Кроссплатформенность: Git можно использовать в операционных системах Windows, Mac и Linux, что делает его кроссплатформенным инструментом.
5. Интеграция: Git можно интегрировать с широким спектром инструментов и сервисов, таких как GitHub, GitLab, Bitbucket, Jenkins и другими.
6. Совместная работа: Git позволяет нескольким людям одновременно работать над одной кодовой базой и имеет встроенные инструменты для совместной работы, такие как запросы на вытягивание и проверки кода.
7. Принятие: согласно официальному веб-сайту Git, более 100 000 организаций по всему миру используют Git для контроля версий.
Эти статистические данные показывают, что Git является широко распространенным и универсальным инструментом, который используется большим количеством разработчиков и организаций по всему миру.