Система контроля версий. Звучит страшно. Но давай разберемся, что это такое.
Представь, ты создаешь многостраничный документ, с красивым форматированием, с тонной важной информации и сохраняешь его где-то на общем пространстве с коллегами. А твой коллега открывает этот документ ночью и засыпает, нажав ухом на Backspace. Да еще и ворочается на клавиатуре так, что сохраняет и закрывает твой документ. Твоя реакция на утро?
Так вот, в программировании та же история: одновременно один и тот же файл с кодом может понадобиться нескольким разработчикам и чтобы потом один не затер изменения другого и есть эта самая система контроля версий. Она содержит в себе все версии каждого файла проекта, который программист выгрузил в репозиторий (такое общее место, где лежат все важные файлы проекта). И ты можешь взять версию этого файла хоть от царя Гороха, если тот когда-то что-то программировал для вашего проекта.
Давай разберемся как происходит работа, на самом деле, эта штука удобна не только для программирования, с VCS (Version Control System):
- Ты скачиваешь все последние изменения из репозитория (так называемый pull request)
- Меняешь, что надо, удостоверяешься, что программа работает
- Сохраняешь пачку изменений на своей локальной версии репозитория (commit)
- Отправляешь измененные файлы в репозиторий (push request)
В конце может появиться еще один пункт, если кто-то успел изменить тот же файл одновременно с тобой, но тогда надо будет решать так называемый “конфликт версий”. То есть, как сохранить одновременно и те и другие изменения.
Самых популярных систем контроля версий всего три: Subversion (SVN), Git и Mercurial. В рамках данного материала их различия не видны, но одно из главных, что Subversion - централизованная, то есть есть только один общий репозиторий, а Mercurial и Git - децентрализованные, то есть у каждого на компьютере по своему репозиторию. Тут надо думать, в зависимости от ситуации: что нужно получить, но в любом случае это уже нюансы. Моя задача - дать общее понимание, так что и эту тему позволь считать закрытой как минимум в общем смысле термина.
#vcs #git #svn