Новости программы Industrial Software Engineering
Укажите свой email для того чтобы получать полезные материалы по индустриальной разработке программного обеспечения
Новости программы Industrial Software Engineering
Укажите свой email для того чтобы получать полезные материалы по индустриальной разработке программного обеспечения

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

Зачем нужна система контроля версий. Терминология. Индивидуальная и коллективная работа с программным проектом
Разберемся с тем, что такое система контроля версий и для чего она используется. Представьте, вы -- программист и вам нужно написать какую-то большую программу с большим количеством, функций и фич. Как вы будете делать эту работу работу? Скорее всего, будете делать эту работу по шагам. Сначала вы разработаете структуру программы, потом реализуете, какой-то очень маленький тест (пусть например программа печатает на экране Hello world). Затем вы все это скомпилируете и запустите на выполнение. Это будет уже законченный, пусть и очень маленький кусочек работы. Дальше, вы будете добавлять какие-то новые функции, новые тесты, и рано или поздно достигните результата.

Но, не всё так просто! В действительности, путь написания сложной программы довольно тернист и, разрабатывая ту или иную функцию, вы можете столкнуться с ситуацией, когда архитектурные ограничения не позволяют вам двигаться дальше. Что же делать в этом случае? Здесь приется сделать несколько я шагов назад, вернуться тому состоянию, когда ещё было возможно внести те изменения, которые сейчас вам требуются, а после этого повторить последний участок пути.

Так вот, система контроля версий (Revision Control System, RCS) это Машина времени для программистов! Делая маленькие кусочки работы, вы можете фиксировать их, создавая историю. С помощью системы контроля версий Вы можете вернуться в любое прошлое, которое вы создали. Более того, если вы захотите создать альтернативную реальность своей разработки, Вы можете это тоже сделать начиная с любого определенного момента в истории ваше вашего кода. Также как в компьютерной игре! В игре важно перед тем как вы начинаете играть в новый уровень сразиться с новым противником -- сохраниться. Именно это и позволяет сделать система контроля версий.

Кажется я достаточно убедил вас в том, что следует сохранять кусочки работы, чтобы с легкостью возвращаться к ним по необходимостию Давайте вернемся к про разработку: пусть она у вас очень большая и вы не можете справиться с с ней в одиночку. Что вы делаете? Вы будете работать с коллегами, -- с другими программистами. Здесь система контроля версий позволяет учитывать не только историю кода, который создаете вы сами, -- она позволяет это делать для любого количества программистов! И совершенно не важно, где создается код: на вашем компьютере или на компьютере соседа или даже в другой стране, важно -- важно когда он создается, а точнее, когда он фиксируется. И эта Машина времени (система контроля версий) сможет разобраться с этим и сделать соответствующие точки в истории вашего проекта.

Какие же бывают системы контроля версий? Они бывают распределенные и централизованные. Централизовваная, это когда есть какой-то один сервер и один репозитарий, который хранит всю историю проекта. Программисты, подключаясь к этому серверу, получают из репозитория код и работают с ним, а затем передают свои изменения обратно на сервер. Распределенная система контроля версий устроена немножко по-другому. У каждого разработчика есть копия истории проекта, и они могут в произвольном порядке обмениваться друг с другом изменениями, которые вносят в проект. Возможно реализовать как централизованную версию работы с кодом, так и полностью децентрализованную. Централизованную, это значит назначить какой-то из репозитаниев мастер-копией (сервером) и все программисты будут работать с этим сервером централизованo (будут обмениваться изменениями только с сервером). Обмен изменениями можно сделать и произвольным. Например Вася и Петя обмениваются друг с другом кодом напрямую, потому что они работают над одной задачей, а потом, когда этзадача готова, они обмениваются через сервер со всеми остальными.

Немного терминологии которая, вообще говоря, достаточно богатая. Однако, для того чтобы начать, достаточно всего лишь несколько определений. Я уже говорил, что хранилище с кодом называется репозитарием (или репозиторием , -- кому как нравится); фиксация изменений -- называется коммитом (commit), также коммитом, называется и конкретное версия вашего репозитория. Есть еще такое понятие как branch (или ветка) это как раз, альтернативная реальность вашего кода как история которая начинается от конкретного коммита -- альтернативная история изменений.