hard

Мальчик заливает на FTP, мужчина поднимает Git

Зачем нужен контроль версий и что делать, если ваши друзья его используют.

Контроль версий — мегаполезная вещь, когда речь идёт о программировании в команде. Сегодня покажем, что это и как примерно пользоваться.

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

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

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

Через пару месяцев с блокнотом Вася понимает: надо что-то менять. Он идёт в интернет и читает статью про системы контроля версий (СКВ).

Что это такое

Системы контроля версий — это штуки, которые помогают разработчикам ориентироваться в коде и находить отслеживать изменения. СКВ могут вернуть нужные файлы в исходное состояние или показать вам только те изменения, которые вы сделали за определённое время.

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

В понедельник Вася понял, что не всё из того, что произошло на выходных, должно остаться в итоговом коде. Он открывает СКВ и видит все изменения, разложенные по времени, с подсветкой:

«Ага, тут я кодил пьяным. Вот место, которое я переписал. Нормально. Надо только поменять названия переменных».

«Это мои друзья кодили. Сносим всё, чертовы пижоны».

«А новый обработчик ошибок хорош. Возьму этот код в другие проекты».

СКВ прямо показывает: «Тогда-то было сделано такое-то изменение, вот, посмотри».

Как реализована

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

Самая простая реализация СКВ — локальная. Это значит, что все изменения и резервные копии хранятся у вас на компьютере в специальной базе данных. Вы не зависите от интернета, полностью контролируете код и можете разрабатывать секретные вещи.

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

Когда над одним файлом или модулем работают несколько программистов, сервер смотрит, какие изменения вносит каждый программист, и если они делают разные вещи в одном и том же месте — выдаёт сообщение или блокирует работу одного из них. Типа: «Вы исправляете один и тот же кусок кода, окститесь».

Можно сделать так, что каждый скачивает себе рабочую копию всего репозитория, работает в нём, а в конце дня отправляет его обратно на сервер. Сервер смотрит, можно ли объединить эти файлы без ошибок, и если нет — показывает конфликтные места, где два программиста написали в одном месте разный код.

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

Распределённые СКВ решают эти проблемы так: каждый разработчик получает не просто несколько нужных для работы файлов, а весь репозиторий целиком. Если сервер выйдет из строя, он просто возьмёт полный репозиторий у любого программиста и скачает его себе. Точно так же и с остальными членами команды — если что-то пошло не так, всегда можно взять актуальные файлы у других.

Совместная работа тоже стала проще: все программисты работают над своим кодом, а потом отправляют изменения на сервер. Но они не попадают сразу в репозиторий, а ждут одобрения главного разработчика или ответственного за продукт. Если он одобряет запрос на добавление кода — этот код становится частью репозитория и сразу доступен для скачивания другими участниками. Таких запросов на добавление может быть много, поэтому нужно постоянно проверять, что же именно делает новый код и нужно ли его добавлять в проект.

Причем тут Git

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

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

Сам по себе Git — это инструмент для командной строки, у него нет графического интерфейса. Но у него довольно много приложений с графическим интерфейсом, и в них всё бывает довольно красиво. На сайте Git есть ссылки на популярные клиенты:

Git — не единственная система контроля версий, но довольно распространённая.

Не путать с GitHub — это онлайн-сервис, который основан на технологии Git. Он хранит репозитории в интернете, автоматически синхронизирует их с репозиториями у разработчиков, следит за обновлениями кода, позволяет редактировать код прямо в репозитории и копировать себе чужие репозитории. Ещё там есть встроенный трекер задач, система уведомлений, форум, переписка между пользователями и комментариями. А всё потому, что GitHub задумывался как социальная сеть для программистов.

Даже высокооплачиваемые менеджеры ходят в GIT
Если у вас в планах карьера в ИТ, заходите на огонек. Курсы, практика и поддержка от наставников, всё сделано заботливыми руками людей из Яндекса.
Начать карьеру в ИТ
Даже высокооплачиваемые менеджеры ходят в GIT Даже высокооплачиваемые менеджеры ходят в GIT Даже высокооплачиваемые менеджеры ходят в GIT Даже высокооплачиваемые менеджеры ходят в GIT
Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
Попал программист в больницу, и началось

Бывает так, что написать код и узнать результат проще, чем делать всё руками.

easy
Нужно ли вам учить Swift?

Что особенного в этом языке и чем он выгоден.

easy
Как стать богатым программистом
Как стать богатым программистом

Четыре стратегии повышения дохода, если ты владеешь хотя бы одним языком программирования.

easy
Как считают процессоры: короткий рассказ про XOR и транзисторы
Как считают процессоры: короткий рассказ про XOR и транзисторы

Матлогика + железо = ❤️

hard
Лучшие языки программирования для старта в 2020 году

Что выбрать, если хочешь стать программистом в этом году.

easy
Как запустить операционку внутри операционки внутри операционки
Что такое виртуализация

Как запустить операционку внутри операционки внутри операционки

hard
Какой софт нужен, чтобы стать тестировщиком
Какой софт нужен, чтобы стать тестировщиком

Можно и без него, но с ним удобнее

easy
ООП для новичков: классы и объекты
ООП для новичков: классы и объекты

Объясняем без фруктов

easy
Всё, что важно знать про современный язык программирования 1C
Всё, что важно знать про современный язык программирования 1С

На нём работает половина автоматизаций в российских компаниях

easy
hard