Распределенная система управления версиями: Распределенная система управления версиями Git. Часть 1: Введение
История систем управления версиями / Хабр
В этой статье сравним с технической точки зрения самые известные системы управления версиями (в будущем планируем расширить список):
- Первое поколение
- Второе поколение
- Третье поколение
Системы контроля версий (VCS) первого поколения отслеживали изменения в отдельных файлах, а редактирование поддерживалось только локально и одним пользователем за раз. Системы строились на предположении, что все пользователи будут заходить по своим учётными записям на один и тот же общий узел Unix.
В VCS второго поколения появилась поддержка сети, что привело к централизованным хранилищам с «официальными» версиями проектов. Это был значительный прогресс, поскольку несколько пользователей могли одновременно работать с кодом, делая коммиты в один и тот же центральный репозиторий. Однако для коммитов требовался доступ к сети.
Третье поколение состоит из распределённых VCS, где все копии репозитория считаются равными, нет центрального репозитория. Это открывает путь для коммитов, ветвей и слияний, которые создаются локально без доступа к сети и перемещаются в другие репозитории по мере необходимости.
Хронология выхода VCS
Для контекста, вот график c датами появления этих инструментов:
SCCS (Source Code Control System): первое поколение
SCCS считается одной из первых успешных систем управления версиями. Она была разработана в 1972 году Марком Рочкиндом из Bell Labs. Система написана на C и создана для отслеживания версий исходного файла. Кроме того, она значительно облегчила поиск источников ошибок в программе. Базовая архитектура и синтаксис SCCS позволяют понять корни современных инструментов VCS.
Архитектура
Как и большинство современных систем, в SCCS есть набор команд для работы с версиями файлов:
- Внесение (check-in) файлов для отслеживания истории в SCCS.
- Извлечение (check-out) конкретных версий файлов для ревью или компиляции.
- Извлечение конкретных версий для редактирования.
- Внесение новых версий файлов вместе с комментариями, объясняющими изменения.
- Отмена изменений, внесённых в извлечённый файл.
- Основные ветвления и слияния изменений.
- Журнал изменений файла.
При добавлении файла для отслеживания в SCCS создаётся файл специального типа, который называется s-файл
или файл истории
. Он именуется как исходный файл, только с префиксом s.
, и хранится в подкаталоге SCCS
. Таким образом, для файла test.txt
будет создан файл истории s.test.txt
в директории ./SCCS/
. В момент создания файл истории содержит начальное содержимое исходного файла, а также некоторые метаданные, помогающие отслеживать версии. Здесь хранятся контрольные суммы для гарантии, что содержимое не было изменено. Содержимое файла истории не сжимается и не кодируется (как в VCS следующего поколения).
Поскольку содержимое исходного файла теперь хранится в файле истории, его можно извлечь в рабочий каталог для просмотра, компиляции или редактирования. В файл истории можно внести изменения, такие как добавления строк, изменения и удаления, что увеличивает его номер версии.
Последующие добавления файла хранят только дельты
или изменения, а не всё его содержимое. Это уменьшает размер файла истории. Каждая дельта сохраняется внутри файла истории в структуре под названием дельта-таблица
. Как упоминалось ранее, фактическое содержимое файла более или менее копируется дословно, со специальными управляющими последовательностями для маркировки начала и конца разделов добавленного и удалённого содержимого. Поскольку файлы истории SCCS не используют сжатие, они обычно имеют больший размер, чем фактический файл, в котором отслеживаются изменения. SCCS использует метод под названием чередующиеся дельты
(interleaved deltas), который гарантирует постоянное время извлечения независимо от давности извлечённой версии, то есть более старые версии извлекаются с той же скоростью, что и новые.
Важно отметить, что все файлы отслеживаются и регистрируются отдельно. Невозможно проверить изменения в нескольких файлах в виде одного атомарного блока, как коммиты в Git. У каждого отслеживаемого файла свой файл истории, в котором хранится его история изменений. В общем случае это означает, что номера версий различных файлов в проекте обычно не совпадают друг с другом. Однако эти версии можно согласовать путём одновременного редактирования всех файлов в проекте (даже не внося в них реальные изменения) и одновременного добавления всех файлов. Это одновременно увеличит номер версии для всех файлов, сохраняя их согласованность, но обратите внимание, что это не то же самое, что включение нескольких файлов в один коммит, как в Git. В SCCS происходит индивидуальное добавление в каждый файл истории, в отличие от одного большого коммита, включающего все изменения сразу.
Когда файл извлекается для редактирования в SCCS, на него ставится блокировка, так что его никто больше не может редактировать. Это предотвращает перезапись изменений другими пользователями, но также ограничивает разработку, потому что в каждый момент времени только один пользователь может работать с данным файлом.
SCCS поддерживает ветви, которые хранят последовательности изменений в определённом файле. Можно произвести слияние ветви с исходной версией или с другой веткой.
Основные команды
Ниже приведён список наиболее распространенных команд SCCS.
sccs create <filename.ext>
: добавить новый файл в SCCS и создать для него новый файл истории (по умолчанию в каталоге./SCCS/
).sccs get <filename.ext>
: извлечь файл из соответствующего файла истории и поместить его в рабочий каталог в режиме только для чтения.sccs edit <filename.ext>
: извлечь файл из соответствующего файла истории для редактирования. Блокировать файл истории, чтобы другие пользователи не могли его изменить.sccs delta <filename.ext>
: добавить изменения в указанный файл. Система запросит комментарий, сохранит изменения в файле истории и снимет блокировку.sccs prt <filename.ext>
: отобразить журнал изменений для отслеживаемого файла.sccs diffs <filename.ext>
: показать различия между текущей рабочей копией файла и состоянием файла, когда он был извлечён.
Для дополнительной информации о внутренних компонентах SCCS см. руководство от Эрика Аллмана и «Руководство Oracle по утилитам для программирования».
Пример файла истории SCCS
^Ah30562
^As 00001/00001/00002
^Ad D 1.3 19/11/26 14:37:08 jack 3 2
^Ac Here is a comment.
^Ae
^As 00002/00000/00001
^Ad D 1.2 19/11/26 14:36:00 jack 2 1
^Ac No.
^Ae
^As 00001/00000/00000
^Ad D 1.1 19/11/26 14:35:27 jack 1 0
^Ac date and time created 19/11/26 14:35:27 by jack
^Ae
^Au
^AU
^Af e 0
^At
^AT
^AI 1
Hi there
^AE 1
^AI 2
^AD 3
This is a test of SCCS
^AE 2
^AE 3
^AI 3
A test of SCCS
^AE 3
RCS (Revision Control System): первое поколение
RCS написана в 1982 году Уолтером Тихи на языке С в качестве альтернативы системе SCCS, которая в то время не была опенсорсной.
Архитектура
У RCS много общего со своим предшественником, в том числе:
- Ведение версий отдельно для каждого файла.
- Изменения в нескольких файлах нельзя сгруппировать в единый коммит.
- Отслеживаемые файлы не могут одновременно изменяться несколькими пользователями.
- Нет поддержки сети.
- Версии каждого отслеживаемого файла хранятся в соответствующем файле истории.
- Ветвление и объединение версий только для отдельных файлов.
Когда файл впервые добавляется в RCS, для него в локальном хранилище создаётся соответствующий файл истории в локальной директории ./RCS/
. К этому файлу добавляется расширение ,v
, то есть файл с названием test.txt
будет отслеживаться файлом под названием test.txt,v
.
Для хранения изменений RCS использует схему обратных дельт
(reverse-delta). При добавлении файла полный снимок его содержимого сохраняется в файле истории. Когда файл изменяется и возвращается снова, вычисляется дельта на основе существующего содержимого файла истории. Старый снимок отбрасывается, а новый сохраняется вместе с дельтой, чтобы вернуться в старое состояние. Это называется обратной дельтой
, так как для извлечения более старой версии RCS берёт последнюю версию и последовательно применяет дельты до тех пор, пока не достигнет нужной версии. Этот метод позволяет очень быстро извлекать текущие версии, так как всегда доступен полный снимок текущей ревизии. Однако чем старше версия, тем больше времени занимает проверка, потому что нужно проверить всё больше дельт.
В SCCS иначе: там извлечение любой версии занимает одинаково времени. Кроме того, в файлах истории RCS не хранится контрольная сумма, поэтому нельзя обеспечить целостность файла.
Основные команды
Ниже список наиболее распространённых команд RCS:
<filename.ext>
: добавить новый файл в RCS и создать для него новый файл истории (по умолчанию в каталоге./RCS/
).co <filename.ext>
: извлечь файл из соответствующего файла истории и поместить его в рабочий каталог в режиме только для чтения.co -l <filename.ext>
: извлечь файл из соответствующего файла истории для редактирования. Блокировать файл истории, чтобы другие пользователи не могли его изменить.ci <filename.ext>
: добавить изменения файла и создать для него новую редакцию в соответствующем файле истории.merge <file-to-merge-into.ext> <parent.ext> <file-to-merge-from.ext>
: произвести слияние изменений из двух изменённых дочерних элементов одного родительского файла.rcsdiff <filename.ext>
: отобразить различия между текущей рабочей копией файла и состоянием файла, когда он был извлечён.rcsclean
: удалить рабочие файлы, на которых не стоят блокировки.
Для дополнительной информации о внутренних компонентах RCS см. руководство по GNU RCS.
Пример файла истории RCS
head 1.2;
access;
symbols;
locks; strict;
comment @# @;
1.2
date 2019.11.25.05.51.55; author jstopak; state Exp;
branches;
next 1.1;
1.1
date 2019.11.25.05.49.02; author jstopak; state Exp;
branches;
next ;
desc
@This is a test.
@
1.2
log
@Edited the file.
@
text
@hi there, you are my bud.
You are so cool!
The end.
@
1.1
log
@Initial revision
@
text
@d1 5
a5 1
hi there
@
CVS (Concurrent Versions System): второе поколение
CVS создана Диком Груном в 1986 году с целью добавить в систему управления версиями поддержку сети. Она также написана на C и знаменует собой рождение второго поколения инструментов VCS, благодаря которым географически рассредоточенные команды разработчиков получили возможность работать над проектами вместе.
Архитектура
CVS — это фронтенд для RCS, в нём появился новый набор команд для взаимодействия с файлами в проекте, но под капотом используется тот же формат файла истории RCS и команды RCS. Впервые CVS позволил нескольким разработчикам одновременно работать с одними и теми же файлами. Это реализовано с помощью модели централизованного репозитория. Первый шаг — настройка на удалённом сервере централизованного репозитория с помощью CVS. Затем проекты можно импортировать в репозиторий. Когда проект импортируется в CVS, каждый файл преобразуется в файл истории ,v
и хранится в центральной директории: модуле
. Репозиторий обычно находится на удалённом сервере, доступ к которому осуществляется через локальную сеть или интернет.
Разработчик получает копию модуля, который копируется в рабочий каталог на его локальном компьютере. В этом процессе никакие файлы не блокируются, так что нет ограничения на количество разработчиков, которые могут одновременно работать с модулем. Разработчики могут изменять свои файлы и по мере необходимости фиксировать изменения (делать коммит). Если разработчик фиксирует изменение, другие разработчики должны обновить свои рабочие копии с помощью (обычно) автоматизированного процесса слияния перед фиксацией своих изменений. Иногда приходится вручную разрешать конфликты слияния, прежде чем выполнить коммит. CVS также предоставляет возможность создавать и объединять ветви.
Основные команды
export CVSROOT=<path/to/repository>
: задать корневой каталог репозитория CVS, так что его потом не нужно указывать в каждой команде.cvs import -m 'Import module' <module-name> <vendor-tag> <release-tag>
: импортировать директории с файлами в модуль CVS. Перед запуском этого процесса перейти в корневой каталог проекта.cvs checkout <module-name>
: копировать модуль в рабочую директорию.cvs commit <filename.ext>
: коммит изменённого файла обратно в модуль в центральном репозитории.cvs add <filename.txt>
: добавить новый файл для отслеживания изменений.cvs update
: обновить рабочую копию, объединив зафиксированные изменения, которые существуют в центральном репозитории, но не в рабочей копии.cvs status
: показать общую информацию об извлечённой рабочей копии модуля.cvs tag <tag-name> <files>
: добавить тег в файл или набор файлов.cvs tag -b <new-branch-name>
: создать новую ветвь в репозитории (перед локальной работой необходимо её извлечь).cvs checkout -r <branch-name>
: извлечь существующую ветвь в рабочий каталог.cvs update -j <branch-to-merge>
: объединить существующую ветвь с локальной рабочей копией.
Для дополнительной информации о внутренних компонентах CVS см. руководство по GNU CVS и статью Дика Груна.
Пример файла истории CVS
head 1.1;
branch 1.1.1;
access ;
symbols start:1.1.1.1 jack:1.1.1;
locks ; strict;
comment @# @;
1.1
date 2019.11.26.18.45.07; author jstopak; state Exp;
branches 1.1.1.1;
next ;
commitid zsEBhVyPc4lonoMB;
1.1.1.1
date 2019.11.26.18.45.07; author jstopak; state Exp;
branches ;
next ;
commitid zsEBhVyPc4lonoMB;
desc
@@
1.1
log
@Initial revision
@
text
@hi there
@
1.1.1.1
log
@Imported sources
@
text
@@
SVN (Subversion): второе поколение
Subversion создана в 2000 году компанией Collabnet Inc., а в настоящее время поддерживается Apache Software Foundation. Система написана на C и разработана как более надёжное централизованное решение, чем CVS.
Архитектура
Как и CVS, Subversion использует модель централизованного репозитория. Удалённым пользователям требуется сетевое подключение для коммитов в центральный репозиторий.
Subversion представила функциональность атомарных коммитов с гарантией, что коммит либо полностью успешен, либо полностью отменяется в случае проблемы. В CVS при неполадке посреди коммита (например, из-за сбоя сети) репозиторий мог остаться в повреждённом и несогласованном состоянии. Кроме того, коммит или версия в Subversion может включать в себя несколько файлов и директорий. Это важно, потому что позволяет отслеживать наборы связанных изменений вместе как сгруппированный блок, а не отдельно для каждого файла, как в системах прошлого.
В настоящее время Subversion использует файловую систему FSFS (File System atop the File System). Здесь создаётся база данных со структурой файлов и каталогов, которые соответствуют файловой системе хоста. Уникальная особенность FSFS заключается в том, что она предназначена для отслеживания не только файлов и каталогов, но и их версий. Это файловая система с восприятием времени. Кроме того, директории являются полноценными объектами в Subversion. В систему можно коммитить пустые директории, тогда как остальные (даже Git) не замечают их.
При создании репозитория Subversion в его составе создаётся (почти) пустая база данных файлов и папок. Создаётся каталог db/revs
, в котором хранится вся информация отслеживания версий для добавленных (зафиксированных) файлов. Каждый коммит (который может включать изменения в нескольких файлах) хранится в новом файле в каталоге revs
, и ему присваивается имя с последовательным числовым идентификатором, начинающимся с 1. При первом коммите сохраняется полное содержимое файла. Будущие коммиты одного и того же файла приведут к сохранению только изменений, которые также называются диффами
или дельтами — для экономии места. Кроме того, для уменьшения размера дельты сжимаются с помощью алгоритмов сжатия lz4
или zlib
.
Такая система работает только до определёного момента. Хотя дельты экономят место, но если их очень много, то на операции уходит немало времени, так как для воссоздания текущего состояния файла нужно обработать все дельты. По этой причине по умолчанию Subversion сохраняет до 1023 дельт на файл, а потом делает новую полную копию файла. Это обеспечивает хороший баланс хранения и скорости.
SVN не использует обычную систему ветвления и тегов. Обычный шаблон репозитория Subversion содержит три папки в корне:
Директория trunk/
используется для продакшн-версии проекта. Директория branches/
— для хранения вложенных папок, соответствующих отдельным ветвям. Директория tags/
— для хранения тегов, представляющих определённые (обычно значительные) версии проекта.
Основные команды
svn create <path-to-repository>
: создать новую пустую оболочку репозитория в указанном каталоге.svn import <path-to-project> <svn-url>
: импортировать каталог файлов в указанный репозиторий Subversion.svn checkout <svn-path> <path-to-checkout>
: скопировать репозиторий в рабочий каталог.svn commit -m 'Commit message'
: коммит набора изменённых файлов и папок вместе с сообщением.svn add <filename.txt>
: добавить новый файл для отслеживания изменений.svn update
: обновить рабочую копию, объединив зафиксированные изменения, которые существуют в центральном репозитории, но не в рабочей копии.svn status
: отобразить список отслеживаемых файлов, которые изменились в рабочем каталоге (если таковые имеются).svn info
: общие сведения об извлечённой копии.svn copy <branch-to-copy> <new-branch-path-and-name>
: создать новую ветку путём копирования существующей.svn switch <existing-branch>
: переключить рабочую директорию на существующую ветку. Это позволит забирать оттуда файлы.svn merge <existing-branch>
: объединить указанную ветвь с текущей, скопированной в рабочий каталог. Обратите внимание, что впоследствии нужно будет сделать коммит.svn log
: показать историю коммитов и соответствующие сообщения для активной ветви.
Дополнительные сведения о внутренних компонентах SVN см. в книге «Управление версиями в Subversion».
Пример файла истории SVN
DELTA
SVN^B^@^@ ^B
^A<89> hi there
ENDREP
id: 2-1.0.r1/4
type: file
count: 0
text: 1 3 21 9 12f6bb1941df66b8f138a446d4e8670c 279d9035886d4c0427549863c4c2101e4a63e041 0-0/_4
cpath: /trunk/hi.txt
copyroot: 0 /
DELTA
SVN^B^@^@$^B%^A¤$K 6
hi.txt
V 15
file 2-1.0.r1/4
END
ENDREP
id: 0-1.0.r1/6
type: dir
count: 0
text: 1 5 48 36 d84cb1c29105ee7739f3e834178e6345 - -
cpath: /trunk
copyroot: 0 /
DELTA
SVN^B^@^@'^B#^A¢'K 5
trunk
V 14
dir 0-1.0.r1/6
END
ENDREP
id: 0.0.r1/2
type: dir
pred: 0.0.r0/2
count: 1
text: 1 7 46 34 1d30e888ec9e633100992b752c2ff4c2 - -
cpath: /
copyroot: 0 /
_0.0.t0-0 add-dir false false false /trunk
_2.0.t0-0 add-file true false false /trunk/hi.txt
L2P-INDEX
^A<80>@^A^A^A^M^H^@ä^H÷^Aé^FDÎ^Bzè^AP2L-INDEX
^A<91>^E<80><80>@^A?^@'2^@<8d>»Ý<90>^C§^A^X^@õ ½½^N=
^@ü<8d>Ôã^Ft^V^@<92><9a><89>Ã^E;
^@<8a>åw|I^@<88><83>Î<93>^L`^M^@ù<92>À^Eïú?^[^@^@657 6aad60ec758d121d5181ea4b81a9f5f4 688 75f59082c8b5ab687ae87708432ca406I
Git: третье поколение
Систему Git разработал в 2005 году Линус Торвальдс (создатель Linux). Она написана в основном на C в сочетании с некоторыми сценариями командной строки. Отличается от VCS по функциям, гибкости и скорости. Торвальдс изначально написал систему для кодовой базы Linux, но со временем её сфера использования расширилась, и сегодня это самая популярная в мире система управлениями версиями.
Архитектура
Git является распределённой системой. Центрального репозитория не существует: все копии создаются равными, что резко отличается от VCS второго поколения, где работа основана на добавлении и извлечении файлов из центрального репозитория. Это означает, что разработчики могут обмениваться изменениями друг с другом непосредственно перед объединением своих изменений в официальную ветвь.
Кроме того, разработчики могут вносить свои изменения в локальную копию репозитория без ведома других репозиториев. Это допускает коммиты без подключения к сети или интернету. Разработчики могут работать локально в автономном режиме, пока не будут готовы поделиться своей работой с другими. В этот момент изменения отправляются в другие репозитории для проверки, тестирования или развёртывания.
Когда файл добавляется для отслеживания в Git, он сжимается с помощью алгоритма сжатия zlib
. Результат хэшируется с помощью хэш-функции SHA-1. Это даёт уникальный хэш, который соответствует конкретно содержимому в этом файле. Git хранит его в базе объектов
, которая находится в скрытой папке .git/objects
. Имя файла — это сгенерированный хэш, а файл содержит сжатый контент. Данные файлы называются блобами
и создаются каждый раз при добавлении в репозиторий нового файла (или изменённой версии существующего файла).
Git реализует промежуточный индекс
(staging index), который выступает в качестве промежуточной области для изменений, которые готовятся к коммиту. По мере подготовки новых изменений на их сжатое содержимое ссылаются в специальном индексном файле, который принимает форму объекта дерева
. Дерево — это объект Git, который связывает блобы с их реальными именами файлов, разрешениями на доступ к файлам и ссылками на другие деревья и таким образом представляет состояние определённого набора файлов и каталогов. Когда все соответствующие изменения подготовлены для коммита, индексное дерево можно зафиксировать в репозитории, который создаёт объект коммит
в базе данных объектов Git. Коммит ссылается на дерево заголовков для конкретной версии, а также на автора коммита, адрес электронной почты, дату и сообщение коммита. Каждый коммит также хранит ссылку на свой родительский коммит(-ы), и так со временем создаётся история развития проекта.
Как уже упоминалось, все объекты Git — блобы, деревья и коммиты — сжимаются, хэшируются и хранятся в базе данных объектов на основе их хэшей. Они называются свободными объектами
(loose objects). Здесь не используются никакие диффы для экономии места, что делает Git очень быстрым, поскольку полное содержимое каждой версии файла доступно как свободный объект. Однако некоторые операции, такие как передача коммитов в удалённый репозиторий, хранение очень большого количества объектов или ручной запуск команды сборки мусора Git вызывают переупаковку объектов в пакетные файлы
. В процессе упаковки вычисляются обратные диффы, которые сжимаются для исключения избыточности и уменьшения размера. В результате создаются файлы .pack
с содержимым объекта, а для каждого из них создаётся файл .idx
(или индекс) со ссылкой на упакованные объекты и их расположение в пакетном файле.
Когда ветви перемещаются в удалённые хранилища или извлекаются из них, по сети передаются эти пакетные файлы. При вытягивании или извлечении ветвей файлы пакета распаковываются для создания свободных объектов в репозитории объектов.
Основные команды
git init
: инициализировать текущий каталог как репозиторий Git (создаётся скрытая папка.git
и её содержимое).git clone <git-url>
: загрузить копию репозитория Git по указанному URL.git add <filename.ext>
: добавить неотслеженный или изменённый файл в промежуточную область (создаёт соответствующие записи в базе данных объектов).git commit -m 'Commit message'
: зафиксировать набор изменённых файлов и папок вместе с сообщением о коммите.git status
: показать статус рабочего каталога, текущей ветви, неотслеженных файлов, изменённых файлов и т. д.git branch <new-branch>
: создать новую ветвь на основе текущей извлечённой ветви.git checkout <branch>
: извлечь указанную ветвь в рабочий каталог.git merge <branch>
: объединить указанную ветвь с текущей, которая извлечена в рабочий каталог.git pull
: обновить рабочую копию, объединив в неё зафиксированные изменения, которые существуют в удалённом репозитории, но не в рабочей копии.git push
: упаковать свободные объекты для локальных коммитов активной ветви в файлы пакета и перенести в удалённый репозиторий.git log
: показать историю коммитов и соответствующие сообщения для активной ветви.git stash
: сохранить все незафиксированные изменения из рабочего каталога в кэш, чтобы извлечь их позже.
Если хотите узнать, как работает код Git, ознакомьтесь с руководством Git для начинающих. Дополнительные сведения о внутренних компонентах см. в соответствующей главе книги Pro Git.
Пример блоба, дерева и коммита Git
Блоб с хэшем 37d4e6c5c48ba0d245164c4e10d5f41140cab980
:
hi there
Объект дерева с хэшем b769f35b07fbe0076dcfc36fd80c121d747ccc04
:
100644 blob 37d4e6c5c48ba0d245164c4e10d5f41140cab980hi.txt
Коммит с хэшем dc512627287a61f6111705151f4e53f204fbda9b
:
tree b769f35b07fbe0076dcfc36fd80c121d747ccc04
author Jacob Stopak 1574915303 -0800
committer Jacob Stopak 1574915303 -0800
Initial commit
Mercurial: третье поколение
Mercurial создан в 2005 году Мэттом Макколлом и написан на Python. Он тоже разработан для хостинга кодовой базы Linux, но для этой задачи в итоге выбрали Git. Это вторая по популярности система управления версиями, хотя она используется гораздо реже.
Архитектура
Mercurial — тоже распределённая система, которая позволяет любому числу разработчиков работать со своей копией проекта независимо от других. Mercurial использует многие из тех же технологий, что и Git, в том числе сжатие и хэширование SHA-1, но делает это иначе.
Когда новый файл фиксируется для отслеживания в Mercurial, для него создаётся соответствующий файл revlog
в скрытом каталоге .hg/store/data/
. Можете рассматривать файл revlog
(журнал изменений) как модернизированную версию файлов истории
в старых VCS, таких как CVS, RCS и SCCS. В отличие от Git, который создаёт новый блоб для каждой версии каждого подготовленного файла, Mercurial просто создаёт новую запись в revlog для этого файла. Для экономии места каждая новая запись содержит только дельту от предыдущей версии. Когда достигается пороговое число дельт, снова сохраняется полный снимок файла. Это сокращает время поиска при обработке большого количества дельт для восстановления определённой версии файла.
Каждый revlog именуется в соответствии с файлом, который он отслеживает, но с расширением .i
или .d
. Файлы .d
содержат сжатую дельту. Файлы .i
используются в качестве индексов для быстрого отслеживания различных версий внутри файлов .d
. Для небольших файлов с малым количеством изменений индексы и содержимое хранятся внутри файлов .i
. Записи файла revlog сжимаются для производительности и хэшируются для идентификации. Эти хэш-значения именуются nodeid
.
При каждом коммите Mercurial отслеживает все версии файлов этого коммита в так называемом манифесте
. Манифест также является файлом revlog — в нём хранятся записи, соответствующие определённым состояниям репозитория. Вместо отдельного содержимого файла, как revlog, манифест хранит список имён файлов и nodeids, которые определяют, какие версии файла существуют в версии проекта. Эти записи манифеста также сжимаются и хэшируются. Хэш-значения тоже называются nodeid
.
Наконец, Mercurial использует ещё один тип revlog, который называется changelog, то есть журнал изменений. Это список записей, которые связывают каждый коммит со следующей информацией:
- nodeid манифеста: полный набор версий файла, которые существуют в конкретный момент времени.
- один или два nodeid для родительских коммитов: это позволяет Mercurial строить временную шкалу или ветвь истории проекта. В зависимости от типа коммита (обычный или слияние) хранится один или два родительских ID.
- Автор коммита
- Дата коммита
- Сообщение коммита
Каждая запись changelog также генерирует хэш, известный как его nodeid
.
Основные команды
hg init
: инициализировать текущий каталог как репозиторий Mercurial (создаёт скрытую папку.hg
и её содержимое).hg clone <hg-url>
: загрузить копию репозитория Mercurial по указанному URL.hg add <filename.ext>
: добавить новый файл для отслеживания изменений.hg commit -m 'Commit message'
: зафиксировать набор изменённых файлов и папок вместе с сообщением коммита.hg status
: отобразить информацию, связанную с состоянием рабочего каталога, неотслеженных файлов, изменённых файлов и т.д.hg update <revision>
: извлечь указанную ветвь в рабочий каталог.hg merge <branch>
: объединить указанную ветвь с текущей, извлечённой в рабочий каталог.hg pull
: скачать новые версии из удалённого репозитория, но не объединять их в рабочий каталог.hg push
: перенести новые версии в удалённый репозиторий.hg log
: показать историю коммитов и связанные с ней сообщения для активной ветви.
Пример файлов Mercurial
Манифест:
hey.txt208b6e0998e8099b16ad0e43f036ec745d58ec04
hi.txt74568dc1a5b9047c8041edd99dd6f566e78d3a42
Журнал изменений (changelog):
b8ee947ce6f25b84c22fbefecab99ea918fc0969
Jacob Stopak
1575082451 28800
hey.txt
Add hey.txt
Дополнительная информация об устройстве Mercurial:
Git для начинающих. Часть 1. Что такое системы контроля версий?
Система контроля версий (Version Control System, VCS) представляет собой программное обеспечение, которое позволяет отслеживать изменения в документах, при необходимости производить их откат, определять, кто и когда внес исправления и т.п. В статье рассмотрены виды VCS, принципы их работы, а также приведены примеры программных продуктов.
Что такое система контроля версий?
Наверное, всем знакома ситуация, когда при работе над проектом, возникает необходимость внести изменения, но при этом нужно сохранить работоспособный вариант, в таком случае, как правило, создается новая папка, название которой скорее всего будет “Новая папка” с дополнением в виде даты или небольшой пометки, в нее копируется рабочая версия проекта и уже с ним производится работа. Со временем количество таких папок может значительно возрасти, что создает трудности в вопросе отката на предыдущие версии, отслеживании изменений и т.п. Эта ситуация значительно ухудшается, когда над проектом работает несколько человек.
Для решения таких проблем как раз и используется система контроля версий, она позволяет комфортно работать над проектом как индивидуально, так в коллективе. VCS отслеживает изменения в файлах, предоставляет возможности для создания новых и слияние существующих ветвей проекта, производит контроль доступа пользователей к проекту, позволяет откатывать исправления и определять кто, когда и какие изменения вносил в проект. Основным понятием VCS является репозиторий (repository) – специальное хранилище файлов и папок проекта, изменения в которых отслеживаются. В распоряжении разработчика имеется так называемая “рабочая копия” (working copy) проекта, с которой он непосредственно работает. Рабочую копию необходимо периодически синхронизировать с репозиторием, эта операция предполагает отправку в него изменений, которые пользователь внес в свою рабочую копию (такая операция называется commit) и актуализацию рабочей копии, в процессе которой к пользователю загружается последняя версия из репозитория (этот процесс носит название update).
Централизованные и распределенные системы контроля версий
Системы контроля версий можно разделить на две группы: распределенные и централизованные.
Централизованные системы контроля версий
Централизованные системы контроля версий представляют собой приложения типа клиент-сервер, когда репозиторий проекта существует в единственном экземпляре и хранится на сервере. Доступ к нему осуществлялся через специальное клиентское приложение. В качестве примеров таких программных продуктов можно привести CVS, Subversion.
CVS (Concurrent Versions System, Система одновременных версий) одна из первых систем получивших широкое распространение среди разработчиков, она возникла в конце 80-х годов прошлого века. В настоящее время этот продукт не развивается, это в первую очередь связано с рядом ключевых недостатков, таких как невозможность переименования файлов, неэффективное их хранение, практически полное отсутствие контроля целостности.
Subversion (SVN) – система контроля версий, созданная на замену CVS. SVN была разработана в 2004 году и до сих пор используется. Несмотря на многие преимущества по сравнению с CVS у SVN все-таки есть недостатки, такие как проблемы с переименованием, невозможность удаления данных из хранилища, проблемы в операции слияния ветвей и т.д. В целом SVN был (и остается) значительном шагом вперед по сравнению с CVS.
Распределенные системы контроля версий
Распределенные системы контроля версий (Distributed Version Control System, DVCS) позволяют хранить репозиторий (его копию) у каждого разработчика, работающего с данной системой. При этом можно выделить центральный репозиторий (условно), в который будут отправляться изменения из локальных и, с ним же эти локальные репозитории будут синхронизироваться. При работе с такой системой, пользователи периодически синхронизируют свои локальные репозитории с центральным и работают непосредственно со своей локальной копией. После внесения достаточного количества изменений в локальную копию они (изменения) отправляются на сервер. При этом сервер, чаще всего, выбирается условно, т.к. в большинстве DVCS нет такого понятия как “выделенный сервер с центральным репозиторием”.
Большое преимущество такого подхода заключается в автономии разработчика при работе над проектом, гибкости общей системы и повышение надежности, благодаря тому, что каждый разработчик имеет локальную копию центрального репозитория. Две наиболее известные DVCS – это Git и Mercurial.
Начнем с Mercurial, эта система представляет собой свободную DVCS, которая построена таким образом, что в ней отсутствует понятие центрального репозитория, для работы с этой VCS используется (как правило) консольная утилита hg. Mercurial обладает всеми возможностями системы контроля версий, такими как ветвление, слияние, синхронизация с другими репозиториями. Данный проект используют и поддерживают большое количество крупных разработчиков, среди них Mozilla, OpenOffice, OpenJDK и многие другие. Сам продукт написан на языке Python и доступен на большинстве современных операционных систем (Windows, Mac OS, Linux), также существует значительное количество утилит с графическим интерфейсом для работы с Mercurial. Основным конкурентом Mercurial на рынке распределенных систем контроля версий является Git, который, на сегодняшний день, выиграл гонку за лидерство.
Git – распределенная система контроля версий, разработанная Линусом Торвальдсем для работы над ядром операционной системы Linux. Среди крупных проектов, в рамках которых используется git, можно выделить ядро Linux, Qt, Android. Git свободен и распространяется под лицензией GNU GPL 2 и, также как Mercurial, доступен практически на всех операционных системах. По своим базовым возможностям git схож с Mercurial (и другими DVCS), но благодаря ряду достоинств (высокая скорость работы, возможность интеграции с другими VCS, удобный интерфейс) и очень активному сообществу, сформировавшемуся вокруг этой системы, git вышел в лидеры рынка распределенных систем контроля версий. Необходимо отметить, что несмотря на большую популярность таких систем как git, крупные корпорации, подобные Google, используют свои VCS.
Это была вводная лекция по системам контроля версий. В дальнейшем, все изложение будет касаться только git.
Если вам больше нравится учиться по видео-лекциям, то рекомендуем классный курс по git от GeekBrains, перейдите по ссылке и найдите в разделе “Курсы” курс “Git. Быстрый старт”. Он бесплатный, нужно только зарегистрироваться на сайте. Рекомендуем повнимательнее посмотреть на этот ресурс, на нем ещё очень много чего интересного!
Часть 2. Установка Git >>>
Система контроля версий (cvs) 2020
У вас появилась новая замечательная бизнес-идея, связанная с разработкой ПО? Вам нужно разработать технологически сложное решение? Или у вас большая команда программистов, работающих над одной задачей? Тогда запомните эти три слова: система контроля версий.
Система контроля версий, или vcs — это то, что не даст проекту развалиться на куски, когда над ним работает много людей. Программисты, менеджеры, копирайтеры могут работать каждый над своим кусочком, не мешая друг другу и не нанося ущерба, который невозможно было бы исправить.
Если вы еще не знакомы с концепцией системы контроля версий, то вот здесь все очень наглядно показано.
Узнайте сегодня, как простая и эффективная программа учета рабочего времени Time Doctor может повысить продуктивность вашей компании.
Или посмотрите видео от GitHub.
Итак, какая система контроля версий подойдет для вашего проекта?
Мы сравнили несколько популярных решений, чтобы вам было проще сделать выбор.
Это узкоспециальная техническая тема. Мы постарались сделать наш обзор понятным для всех. Но если у вас нет опыта в программировании, обязательно посоветуйтесь с вашим отделом разработки, прежде чем принимать решения.
Системы контроля версий, в том числе широко известные SVN (Subversion) и Git, изначально создавались, чтобы команды разработчиков могли работать над совместными проектами, не создавая путаницы. В системе контроля не надо самостоятельно отслеживать ветви кода и изучать примечания к ним. Вместо этого используется центральный репозиторий, где всё упорядочено, структурировано. Здесь удобно обновлять файлы, добавлять комментарии и даже проводить слияние веток проекта.
Мнения в отношении того, какая система контроля версий самая лучшая, сильно разнятся, и это приводит к бурным спорам в среде программистов. Подбирая и изучая системы контроля версий для вашего проекта, не забывайте, что преимущества того или иного решения часто субъективны. Например, личные предпочтения программиста или, скажем, такие показатели как быстродействие, возможности плагинов IDE и т.д.
Главное отличие между системами контроля версий состоит в том, какие они: клиент-серверные или децентрализованные (p2p). Есть ли у них центральный репозиторий (сервер), откуда код берется и куда возвращается с внесенными изменениями. Или это копия в локальном хранилище, обновляемая посредством пиров: более децентрализованная сеть, используемая для синхронизации, обмена патчами (наборами изменений) и для поддержки текущего кода.
Стоит также учесть быстродействие, функциональность и порог вхождения/освоения конкретной системы контроля. Рассмотрим наиболее распространенные системы контроля версий и те причины, по которым программисты предпочитают те или иные решения.
Система одновременных версий (CVS)
CVS появилась в 1980-х и до сих пор популярна как у разработчиков коммерческих продуктов, так и у open-source разработчиков.
CVS распространяется на условиях Открытого лицензионного соглашения GNU и позволяет получать с сервера нужную версию проекта — «check-out» (извлечение), а затем пересылать обратно на сервер, «check-in» (возврат), с внесенными изменениями.
Изначально CVS была создана, чтобы избежать конфликта версий. Всем участникам для работы предоставлялась только самая последняя версия кода. Это была первая система контроля версий. Пользователю нужно было быстро фиксировать изменения в репозитории, пока другие не опередили его.
Сейчас CVS имеет поддержку работы над проектами с ветками кода. Получается несколько вариантов продукта с разными характеристиками, которые можно будет объединить позднее.
Сервера CVS обычно работают под управлением Unix, но CVS-клиенты доступны и в других популярных операционных системах. CVS — «зрелая», проверенная временем система контроля версий. Это по-прежнему опенсорсная система, но на сегодняшний день новые функции добавляются довольно редко.
При этом CVSNT, — выделившаяся в отдельный проект версия CVS для серверов Windows, — сейчас достаточно активно расширяет функционал.
Преимущества:
- Испытанная временем технология, которая удерживается на рынке десятки лет.
Недостатки:
- Переименование или перемещение файлов не отражается в истории
- Риски безопасности, связанные с символическими ссылками на файлы
- Нет поддержки атомарных операций, что может привести к повреждению кода
- Операции с ветками программного кода дорогостоящие, так как эта система контроля не предназначена для долгосрочных проектов с ветками кода
Apache Subversion (SVN)
SVN создавалась как альтернатива CVS с целью исправить недостатки CVS и в то же время обеспечить высокую совместимость с ней.
Как и CVS, SVN это бесплатная система контроля версий с открытым исходным кодом. С той лишь разницей, что распространяется под лицензией Apache, а не под Открытым лицензионным соглашением GNU.
Для сохранения целостности базы данных SVN использует так называемые атомарные операции. При появлении новой версии к финальному продукту применяются либо все исправления, либо ни одно из них. Таким образом, код защищают от хаотичных частичных правок, которые не согласуются между собой и вызывают ошибки.
Многие разработчики переключились на SVN, так как новая технология унаследовала лучшие возможности CVS и в то же время расширила их.
В то время как в CVS операции с ветками кода дорогостоящие и не предусмотрены архитектурой системы, SVN создана как раз для этого. То есть, для более крупных проектов с ветвлением кода и многими направлениями разработки.
В качестве недостатков SVN упоминаются сравнительно низкая скорость и нехватка распределенного управления версиями. Распределенный контроль версий использует пиринговую модель, а не централизованный сервер для хранения обновлений программного кода. И хотя пиринговая модель работает лучше в open source проектах, она не идеальна в других случаях. Недостаток серверного подхода в том, что когда сервер падает, то у клиентов нет доступа к коду.
Преимущества:
- Система на основе CVS
- Допускает атомарные операции
- Операции с ветвлением кода менее затратны
- Широкий выбор плагинов IDE
- Не использует пиринговую модель
Недостатки:
- Все еще сохраняются ошибки, связанные с переименованием файлов и директорий
- Неудовлетворительный набор команд для работы с репозиторием
- Сравнительно небольшая скорость
Git
Эта система была создана для управления разработкой ядра Linux и использует подход, который в корне отличается от CVS и SVN.
В основу Git закладывались концепции, призванные создать более быструю распределенную систему контроля версий, в противовес правилам и решениям, использованным в CVS. Так как Git разрабатывалась главным образом под Linux, то именно в этой ОС она работает быстрее всего.
Git также работает на Unix-подобных системах (как MacOS), а для работы на платформе Windows используется пакет mSysGit.
Программный код может быть недоступен, когда используется компьютер без репозитория. Для решения этой проблемы есть обходные пути и некоторые разработчики полагают, что быстродействие Git является справедливой платой за неудобства.
Кроме того, в Git есть множество инструментов для навигации по истории изменений. Каждая рабочая копия исходного кода содержит всю историю разработки, что крайне полезно, когда программируешь без Интернет-соединения.
Преимущества:
- Прекрасно подходит для тех, кто ненавидит CVS/SVN
- Значительное увеличение быстродействия
- Дешевые операции с ветками кода
- Полная история разработки доступная оффлайн
- Распределенная, пиринговая модель
Недостатки:
- Высокий порог вхождения (обучения) для тех, кто ранее использовал SVN
- Ограниченная поддержка Windows (по сравнению с Linux)
Mercurial
Mercurial была выпущена одновременно с Git. Это также распределенная система контроля версий.
Mercurial создавалась в качестве альтернативы Git для разработки модулей ядра Linux. Но так как выбрали все-таки Git, то Mercurial используется меньше. Тем не менее, многие ведущие разработчики работают именно с этой системой, например OpenOffice.org.
Система контроля версий Mercurial отличается от других систем контроля версий тем, что главным образом она написана на Python (а не С). Однако, некоторые части выполнены в качестве модулей-расширений на C.
Поскольку система децентрализованная и написана на Python, многие Python-программисты склоняются к переходу на Mercurial.
Пользователи отмечают, что Mercurial сохранила некоторые характеристики SVN, являясь при этом распределенной системой, и благодаря этой схожести, порог вхождения у нее ниже для тех, кто уже знаком с SVN. Также документация по Mercurial более полная, что помогает быстрее освоиться с различиями.
Один из существенных недостатков Mercurial заключается в том, что в отличии от Git в ней нельзя объединить две родительские ветки, так как Mercurial использует систему плагинов, а не поддержку скриптов. Это отлично подходит для некоторых программистов, но многие не хотят отказываться от возможностей Git.
Преимущества:
- По сравнению с Git легче в освоении
- Подробная документация
- Распределенная модель системы контроля версий
Недостатки:
- Нет возможности слияния двух родительских веток
- Использование плагинов, а не скриптов
- Меньше возможностей для нестандартных решений
Какая система контроля версий мне подходит?
В большинстве случаев разработчики используют CVS потому что это им привычнее. Если команда уже работает над проектом, то перспектива переноса всех наработок в другую систему контроля как-то не вдохновляет. Если бы им все-таки пришлось менять систему, то, скорее всего, они переключились бы на SVN.
CVS уже достигла статуса “зрелой технологии”, а это значит, что в ней уже не появится радикально новых функций и решений. Инерция привычки теряется, так как люди переходят на SVN. А значит CVS постепенно уходит в прошлое.
Сегодня SVN удерживает пальму первенства среди серверных систем контроля версий. Она включает в себя преимущества CVS и превосходит их. Если же говорить о распространенности, то вы, скорее всего, будете чаще сталкиваться с CVS или SVN, чем с Git или Mercurial. Таким образом, знание одной серверной технологии, хотя и не является необходимым, облегчит вам переход.
Благодаря широкому использованию и зрелости технологии, в SVN накоплена большая база знаний, что дает пользователям возможность легко получать помощь.
У Git явно выше быстродействие по сравнению с конкурентами. Для проектов, которые создаются под распределенные системы контроля версий, это очевидное улучшение.
Существенным недостатком Git является то, что порой трудно объяснить нюансы работы данной системы контроля, и это тормозит рабочий процесс, пока программисты привыкают к ней. Однако, как только «порог вхождения» преодолен, продуктивность возрастает и удобство управления ветками кода сполна окупит потраченное время.
Для тех, кто терпеть не может Git (а у этой системы есть свои противники в среде разработчиков), Mercurial — это компромисс между SVN и Git. Эта система используется во многих известных проектах, а также у нее хорошая документация.
Совместимая с Windows версия Git также прогрессирует, приближаясь по своему быстродействию к Linux-версии, так что эта система может быть для вас актуальна, даже если вы не ведете разработку в Linux.
Чтобы понять, какая же лучше для вас, учитывайте особенности проекта и вашей команды. Поговорите с разработчиками!
Если для проекта требуется единое дерево исходного кода, над которым будет работать небольшая группа программистов, то SVN – это ваш вариант. Она надежна и предназначена как раз для таких случаев.
Если же вы запускаете open-source проект, над которым в разное время будут трудиться несколько программистов или, если предполагается постоянное обновление кода, то выбирайте Git. Скорость и управление деревом исходного кода здесь намного лучше, чем в SVN.
Если вы на распутье или вам просто не нравится, как работают SVN или Git, тогда к вашим услугам Mercurial.
Все эти системы полностью функциональны. А также бесплатны. Они используются для создания программного обеспечения, сайтов и даже операционных систем, которыми вы пользуетесь, и которые вам известны.
Прежде всего, решите, подходит ли та или иная система контроля версий для вашего бизнеса, а затем — что не менее важно — убедитесь, что этот выбор не приведет в ярость программистов.
Приступая к работе с SVN
Если вы никогда не работали с SVN или Git, и понятия не имеете, как начать, то хостинговое решение в сочетании с графическим интерфейсом помогут вам быстро освоиться.
Как и в большинстве случаев, самое главное — начать работу, а там уже придет понимание. Эксплуатация системы контроля версий очень похожа на работу с файлами на сервере с использованием FTP-клиента.
ПРИМЕЧАНИЕ: Есть множество хостинговых решений для системы контроля версий, в том числе с бесплатным пробным периодом. Вы можете создать на их базе свой первый репозиторий (место для совместной работы с файлами кода) совершенно бесплатно. Вот некоторые из этих сервисов:
Хостинг SVN & GIT
Beanstalk
— безопасный, надежный и подходящий для хостинга Git и Subversion. Просмотр активности, файлов, сравнение ревизий. Отличный пользовательский интерфейс. Интеграция со многими популярными сервисами, включая Twitter! Цена вопроса: от $15 в месяц
Unfuddle
– популярный среди разработчиков ПО хостинг для SVN, Git и управления проектами с хостинговым решением. С помощью виджета для Mac OS с простым и понятным интерфейсом вы можете следить за активностью в аккаунте во всех ваших проектах. 2 пользователя бесплатно + 1 проект с хранилищем до 200MB
SlikSVN
– еще одна опция для бесплатного хостинга, но не такая хорошая как Unfuddle. 1 пользователь бесплатно + 1 проект с хранилищем до 100MB
XP-Dev.com
– хостинг Subversion, Git и Mercurial. Отличное соотношение цены и функционала. От $5 в месяц, неограниченное число проектов, пользователей и хранилище до 2GB
Создание первого репозитория
После того как вы создали аккаунт, необходимо создать репозиторий — для каждой платформы отдельно. Обычно это выглядит так:
- Войдите в свой аккаунт, кликните по вашим проектам.
- Создание проекта:
- В строке «Create a New Project» введите имя вашего проекта
- Кликните по кнопке «Create Project»
- Подключение SVN:
- После создания проекта, выберите вкладку «Source Control» (версиями исходного кода)
- Кликните по ссылке «Enable Source Control»
- Присвойте репозиторию имя
- Нажмите «Save»
Графические клиенты SVN и GIT
Итак, репозиторий создан. Теперь нужно, чтобы в нем все отображалось просто и наглядно. Для этого вам понадобится графический интерфейс.
TortoiseSVN
— удобная программа для работы с системами контроля версий в Microsoft Windows и, возможно, лучший из представленных Apache Subversion клиент. TortoiseSVN реализован как расширение оболочки Windows, что позволяет легко интегрировать его в браузер. Кроме того, это программа с открытым исходным кодом, для которой доступны 34 языковых пакета
SmartGit
– графический клиент Git (Open Source распределенная система контроля версий). Работает в Windows, Mac OS X и Linux. Стоимость лицензии — $39
Versions
– SVN клиент для MAC OS X – Versions: простейшая система контроля версий для Mac. По их собственным словам: «Благодаря нашему подходу, вы сможете начать без раскачки». Данный клиент прост в использовании. Цена вопроса: £39 (примерно $50 согласно текущему курсу)
Tower
– Клиент GIT для MAC OS X – еще одно элегантное решение, идеально подходящее для пользователей GIT, которые уже знакомы с синтаксисом командной строки. Есть также хороший ознакомительный обзор продукта, содержащий множество базовых концепций GIT (см. ниже). ~ примерно $50 за лицензию, доступны менее затратные мульти-лицензионные опции.
«Извлечение» репозитория (“Checkout”)
Итак, клиент выбран. Теперь необходимо создать репозиторий для системы контроля. Нужно ввести URL-адрес вашего репозитория, имя пользователя и пароль.
URL-адрес обычно выглядит так: https://svn<servernumber>.hostname.com/svn/<repository> (вы можете использовать https:// (SSL), если у вас платный аккаунт)
- Перейдите в корневую папку, нажмите кнопку «Check Out» («Извлечение») и создайте рабочую папку для клиента. Теперь вы можете добавлять в нее файлы.
- После извлечения файлов проекта вы сможете редактировать их в локальной директории на вашем компьютере.
После внесения изменений в файлы для их сохранения нажмите кнопку «Check-in» («Возврат») на панели инструментов. Вы можете просматривать изменения и добавлять к ним комментарии — это довольно хорошая идея, так как в дальнейшем вы будете точно знать, над чем работали, какие изменения внесены и будете держать в курсе других участников проекта.
В вашем клиенте также должна быть предусмотрена возможность в любой момент начать работу с ревизиями, открыв журнал ревизий или историю изменений — тогда, если понадобится, вы сможете сделать «откат» к предыдущей версии для каждого файла в отдельности. Теперь, когда вы знакомы с базовыми концепциями, документация системы контроля версий послужит вам хорошей отправной точкой для освоения ее расширенных функциональных возможностей.
Мнения Клиентов Тайм Доктор:
Rob Rawson
Роб Роусон является со-учредителем Time Doctor — программы по улучшению продуктивности и отслеживанию рабочего времени ваших сотрудников, где бы они не работали.
Введение в системы контроля версий — Блог HTML Academy
Основные понятия
Часто разработчики трудятся в команде над одним проектом, а значит, сразу несколько человек могут изменять один файл одновременно. Чтобы избежать путаницы, в таких случаях используют систему контроля версий, которая позволяет хранить историю изменений проекта и при необходимости помогает вернуться к предыдущей версии.
Версионирование
Чтобы лучше понять проблему версионирования, рассмотрим пример дизайнера, который закончил работать над проектом и отправил финальную версию заказчику. У дизайнера есть папка, в которой хранится финальная версия проекта:
source/ barbershop_index_final.psd
Всё хорошо, дизайнер закончил работу, но заказчик прислал в ответ правки. Чтобы была возможность вернуться к старой версии проекта, дизайнер создал новый файл barbershop_index_final_2.psd
, внёс изменения и отправил заказчику:
source/ barbershop_index_final.psd barbershop_index_final_2.psd
Этим всё не ограничилось, в итоге структура проекта разрослась и стала выглядеть так:
source/ barbershop_index_final.psd barbershop_index_final_2.psd … barbershop_index_final_19.psd … barbershop_index_latest_final.psd barbershop_index_latest_final_Final.psd
Вероятно, многие уже сталкивались с подобным, например, при написании курсовых работ во время учёбы. В профессиональной разработке создавать новые файлы для версионирования — плохая практика. Обычно у разработчиков в папке проекта хранится множество файлов. Также над одним проектом может работать несколько человек. Если каждый разработчик для версионирования будет создавать новый файл, немного изменяя название предыдущей версии, то в скором времени в проекте начнётся хаос и никто не будет понимать, какие файлы нужно открывать.
Git
Для решения проблемы с сохранением новой версии файлов удобно использовать системы контроля версий. Одна из самых популярных — Git. Работу Git можно сравнить с процессом сохранения и загрузки в компьютерных играх:
- если впереди ждёт тяжёлое сражение, то перед этим лучше заранее сохраниться;
- чтобы это сделать, нужно выполнить специальную команду;
- после чего сохранение попадает в специальную папку и содержит состояние игры;
- теперь при необходимости всегда есть возможность вернуться к предыдущей версии игры.
Папка, содержащая данные игры, могла бы выглядеть так:
SomeGame/ | - saves | | - save001.sav | | - save002.sav | | … | | папка с сохранениями | | - game.exe | ...файлы игры
Файлы, необходимые для работы приложения, хранятся в рабочей области. В папке saves
хранится история всех сохранений игры. Git сохраняет код вашего проекта по такому же принципу: сохранения попадают в специальную скрытую папку, а рабочей областью является содержимое корневой папки.
Основные понятия
Список терминов, которые будут вам полезны.
Репозиторий
Проект, в котором была инициализирована система Git, называется репозиторием. При инициализации в проект добавляется скрытая папка .git
. Репозиторий хранит все рабочие файлы и историю их изменений.
Рабочая область и хранилище
barbershop/ | - .git | | - bea0f8e | | - d516600 | | Хранилище | | - css | - index.html | Рабочая область
Корневая папка проекта — это рабочая область. В ней находятся все файлы и папки, необходимые для его работы.
Хранилище — это содержимое скрытой папки .git
. В этой папке хранятся все версии рабочей области и служебная информация. Этим версиям система автоматически даёт название, состоящее из букв и цифр. В примере выше — это bea0f8e
и d516600
. Не стоит проводить манипуляции с папкой .git
вручную. Вся работа с системой производится командами через специальные приложения или консоль.
Коммит
Точно так же, как и в игре, в системе контроля версий Git можно сохранить текущее состояние проекта. Для этого есть специальная команда — commit
. Она делает так, что новая версия проекта сохраняется и добавляется в хранилище. В файле с сохранением отображаются: все изменения, которые происходили в рабочей области, автор изменений и краткий комментарий, описывающий суть изменений. Каждый коммит хранит полное состояние рабочей области, её папок и файлов проекта.
В итоге проект работает так:
- Репозиторий хранит все версии проекта. В случае передачи этого проекта другому человеку, он увидит всё, что с ним происходило до этого.
- Ничего не теряется и не удаляется бесследно. При удалении файла в новой версии добавляется запись о том, что файл был удалён.
- Всегда можно вернуться к любой из версий проекта, загрузив её из хранилища в рабочую область.
Система контроля версий Git
Git — это распределённая и децентрализованная система управления версиями файлов. Децентрализованная система означает, что у каждого разработчика есть личный репозиторий проекта с полным набором всех версий. А все необходимые для работы файлы находятся на компьютере. При этом постоянное подключение к сети не требуется, поэтому система работает быстро. При командной разработке нужна синхронизация репозиториев, так как проект — один и его состояние должно быть у всех одинаковым.
Работа в команде
Как синхронизовать данные репозиториев между разработчиками? Изначально Git репозитории сами могут синхронизироваться от пользователя к пользователю. Дополнительные программы для этого не нужны. Есть специальные команды в консоли, позволяющие передавать данные из одного репозитория в другой.
Репозитории можно синхронизировать между пользователями.
Этот способ сложный и редко используется. Чаще всего разработчики синхронизируют локальный репозиторий с удалённым. Удалённый репозиторий — это тот же репозиторий, только его данные находятся в облаке.
Синхронизация через удалённый репозиторий.
Этапы синхронизации
Как сделать так, чтобы разработчик смог передать актуальную версию проекта коллеге?
Для взаимодействия с системой Git в консоль вводятся специальные команды. Не пугайтесь, работу с консолью можно будет заменить на работу с одной из программ, о которых расскажем ниже. Но чтобы лучше понимать суть, придётся запомнить несколько команд. Все они начинаются с ключевого слова git
. Для синхронизации есть две основных команды: pull
(англ. «тянуть») и push
(англ. «толкать»).
Pull
Если работа над проектом ведётся в команде, то перед тем как начать писать код, нужно получить последнюю версию проекта. Для этого нужно выполнить команду pull
. Так мы забираем все изменения, которые были совершены со времени последней синхронизации с удалённым репозиторием. Теперь они у нас в репозитории на локальном компьютере.
Push
Чтобы отправить коллегам последнюю версию проекта выполняем команду push
. Если в удалённом репозитории с момента последней синхронизации не было никаких изменений, то все сохранённые изменения успешно загрузятся в облако, и коллеги получат последнюю версию проекта, выполнив команду pull
. Если же были изменения, то Git попросит вас перед отправкой подтянуть последние версии, сделав pull
.
Синхронизация (push и pull) между локальными и удалённым репозиториями.
Типовой рабочий процесс с использованием Git
Разберём типовой процесс разработки сайта в команде. Представим, что Игорь и Алиса — разработчики на одном проекте. Игорь начал верстать проект и сделал первые коммиты, в которых зафиксировал изменения в файле index.html
. Для схематичности названия коммитов будут простые: B1 и B2.
Коммиты B1 и B2.
После того как Игорь сделал два коммита, он захотел отправить свои изменения в удалённый репозиторий. Чтобы их передать, Игорь выполнил команду git push
. После чего в облаке появилось две версии проекта. То есть Игорь отправил не только финальную версию проекта, но и все сохранённые изменения.
Игорь запушил свои коммиты.
После пуша данные синхронизировались с удалённым репозиторием. Но как Алисе теперь получить изменения? Для этого она выполняет команду git pull
и получает все изменения из облака к себе на компьютер. Таким образом, состояние проекта у Игоря и Алисы синхронизировались, и они могут дальше продолжить работать над ним.
Данные у обоих разработчиков синхронизировались.
Параллельные изменения
Что произойдёт, если разработчики изменят одинаковый файл и сделают push
? Предположим, что Игорь и Алиса изменили файл index.html
, сделали коммит с изменениями и запушили его. Игорь оказался быстрее Алисы и сделал push
первым.
Два пуша в одно время?
В этом случае Git сообщит Алисе, что нельзя пушить свои изменения, потому что она не делала pull
. Дело в том, что после того как Игорь синхронизировался с удалённым репозиторием, версия проекта Алисы стала отличаться от той, что находится на удалённом репозитории, и Git это видит. Система сообщает, что перед тем, как выполнить команду push
, нужно выполнить pull
, чтобы забрать изменения. Алиса делает pull
и ей вновь приходит уведомление от Git. В этот раз он сообщает Алисе о том, что произошёл конфликт.
Конфликт
Дело в том, что Игорь и Алиса изменили одинаковый файл и теперь Алисе предстоит решить конфликт.
Конфликт
Существуют два вида конфликтов:
- Автоматически разрешаемый конфликт.
- Конфликт, который нужно разрешить вручную.
Ниже рассмотрим оба варианта.
Слияние
Допустим, что на третьей строке Игорь добавил в проект шапку, а на четвёртой Алиса добавила футер.
Игорь сделал шапку и отправил коммит, а Алиса добавила подвал.
Git видит, что произведённые изменения не затрагивают друг друга. Он сам объединит две версии проектов в одну, совершив слияние. После этого Алиса спокойно синхронизируется с удалённым репозиторием, отправив новую версию проекта.
Изменения в проекте не пересекались и Git выполняет слияние сам.
Во время слияния Git не знает, в каком порядке расположить коммит В3 Игоря и коммит В4 Алисы, из-за которых случился конфликт. Поэтому Git разрешает существовать нескольким версиям проекта одновременно. Как раз для этого и нужен следующий коммит В5, в котором происходит слияние предыдущих параллельных версий. После того как Алиса запушит изменения, она отправляет все версии проектов на удалённый репозиторий. В следующий раз, когда Игорь сделает pull
, он получит полную историю со слиянием конфликта.
Слияние.
Допустим, что Игорь и Алиса продолжили работать над проектом, но в этот раз изменили одинаковую строку в файле index.html
. Вновь Игорь оказался быстрее и первым синхронизировал свои изменения с удалённым репозиторием. Алиса сделала pull
и получила сообщение о конфликте.
Алиса и Игорь изменили один и тот же блок.
В таком случае Git не знает чья версия проекта правильная и поступает очень просто. Он изменяет файл index.html
, добавляя в него изменения и Игоря и Алисы. После этого предупреждает Алису о конфликте и просит выбрать правильный вариант.
Версии файла.
Версии проектов разделяются строками второй, четвёртой и шестой. Их нужно удалить и оставить правильный вариант заголовка. После того как Алиса это сделает, она сможет закоммитить изменения и запушить их на удалённый репозиторий. Игорь же при следующей синхронизации с облаком получит тот вариант заголовка, который выбрала Алиса.
Окружение Git
Git — удобная система. Плюсом является то, что вокруг него создано множество сервисов, которые позволяют сделать работу с ним удобнее. Расскажем о тех, что будут вам полезны в начале работы.
GitHub
GitHub — это сайт, сервис и то самое облако, в котором можно хранить удалённые репозитории и через которое коллеги могут синхронизировать свои версии проектов. Как зарегистрироваться, мы рассказали в этой статье.
GUI
Облегчить работу с Git и GitHub могут специальные программы. Такие программы в удобной форме показывают изменения в коде, список коммитов и обладают другими удобными возможностями. Обычно в подобных программах есть возможность выполнять стандартные Git команды: pull
, push
, commit
и прочие — просто нажав на кнопку.
Баннер_финал_итоговый_2_final_1_2.html
Пройдите бесплатные курсы по фронтенду и узнайте, как верстать сразу хорошо.
Регистрация
Нажатие на кнопку — согласие на обработку персональных данных
Как развернуть систему контроля версий (VCS) без командной строки
Так как наша команда программистов ведет разработку сразу несколько проектов, довольно быстро возникла необходимость в системе контроля версий.
Естественно, поиски были начаты с изучения Хабра — и привели к неожиданному результату. Несмотря на то, что системы контроля версий появились ещё в 1986 году, большинство туториалов по работе с современными системами контроля версий оказались неполными и сильно завязанными на работу с командной строкой.
Мы ничего не имеем против командной строки в целом, но в нашей небольшой команде разработчиков (4 человека) фанатов работы с командной строкой нет :).
Почему мы считаем, что работа с командной строкой неэффективна?
- Трата времени на ввод данных. Набивать команды намного дольше, чем кликать мышкой.
- Трата времени на обучение. Изучение нового синтаксиса в эпоху понятных интерфейсов однозначно дольше, чем обучение графическому интерфейсу.
- Вероятность ошибки. Ошибиться при вводе данных через командную строку легче (человеческий фактор никто не отменял).
- Нарушение принципов автоматизации. Возможно, это самый главный пункт. Компьютер создан для ускорения работы и замене человека при выполнении рутинных операций. В случае с командной строкой мы всегда работаем вручную, по сути, приходится каждый раз писать один и тот же программный код (пусть и примитивный).
К сожалению, нам не удалось найти полноценного русскоязычного мануала по работе с современными системами контроля версий. Собрав информацию из разных статей и англоязычных видео на YouTube, мы решили сделать своё собственное руководство, которое:
- Будет пошаговой инструкций (по ней же будут работать наши программисты).
- Будет работать от начала и до конца (то есть по ней вы получите небольшой, но законченный результат — работающую распределенную систему контроля версий).
- Будет работать с использованием только графических интерфейсов (причины см. выше).
Вступление
Вопреки ожиданиям матерых сисадминов и прочих любителей и фанатов работы с командной строкой, в данной статье не будет никаких команд, выполняемых с помощью командной строки. Вся статья написана языком понятным даже тем, кто только недавно начал программировать, но уже задумался о внедрении VCS (системы контроля версий). Каждый шаг настройки VCS разжеван до мелочей с приведением принскринов и дополнительных пояснений.
Если вы не любитель мануалов «Для чайников», то можете не читать данную статью и пойти своим путем в решении задачи подъема VCS.
Используемые программы и сервисы
Для развертывания VCS (системы контроля версий) мы будем использовать следующие программы и сервисы:
- Mercurial — кроссплатформенная распределенная система управления версиями, разработанная для эффективной работы с очень большими репозиториями кода.
- TortoiseHg — графический фронтенд для системы контроля версий Mercurial.
- Bitbucket — веб-сервис для хостинга проектов и их совместной разработки, основанный на системе контроля версий Mercurial и Git.
Развертывание система контроля версий – пошаговая инструкция
1. Скачиваем и устанавливаем к себе на компьютер TortoiseHg с официального сайта: http://tortoisehg.bitbucket.org/
Данный клиент необходимо будет устанавливать на всех компьютерах, с которых будет вестись совместная разработка проектов.
В данной инструкции все шаги настройки и работы с системой контроля версий будут производиться с использованием TortoiseHg версии: 2.10.1 for Windows 64-bit with Mercurial 2.8.1.
2. Регистрируемся в веб-сервисе Bitbucket: https://bitbucket.org/
Весь процесс регистрации сводится к заполнению контактных данных (Username, Email и т.д.) и подтверждения указанного при регистрации email-адреса нажатием на кнопку «Confirm this email address» в полученном после регистрации письме.
Регистрироваться в сервисе Bitbucket потребуется также всем участникам вашей команды разработчиков. К великому счастью стартапов в данном сервисе есть бесплатный аккаунт, который позволяет создавать приватные репозитории с 5-ю пользователями. Также есть возможность увеличения максимального числа членов команды, участвующей в разработке на бесплатном тарифе до 8 человек.
С полным списком тарифов вы можете ознакомиться, пройдя по ссылке: https://bitbucket.org/plans
3. Зайдя в ваш аккаунт в сервисе Bitbucket, вы можете сразу изменить язык интерфейса вашего аккаунта на русский.
Для этого в верхнем правом углу главного меню из выпадающего списка выберите раздел «Manage account» и на открывшейся странице выберите из выпадающего списка «Language» нужный вам язык интерфейса
4. Для создание репозитория для вашего проекта вам необходимо перейдите на главную страницу вашего аккаунта (https://bitbucket.org/dashboard/overview) и нажмите на кнопку «Создайте ваш первый репозиторий»
5. На странице создания нового репозитория укажите следующие настройки:
— Имя – Укажите имя вашего нового репозитория. Данное имя используется для построения ссылки доступа к вашему репозиторию.
Важно! Лучше указывать имя латинскими буквами, иначе ссылка на репозитрий будет заканчиваться дефисами и иметь сложный к пониманию вид: httрs://вашлогин@bitbucket.org/вашлогин/———
— Описание – Укажите краткое описание вашего репозитория (поле не обязательное)
— Уровень доступа – Поставьте галочку, если вы хотите, чтобы доступ к вашему репозиторию имели только члены вашей команды разработчиков (приватный репозиторий).
— Создание форков – Поставьте «Разрешить только приватные форки»
— Тип репозитория – Выберите «Mercurial»
— Управление проектом – Поставьте галочки «Трекер задач» и «Вики»
— Язык – Выберите язык разработки, на котором написан ваш проект. В моем случае это PHP.
По завершению указания всех настроек страница будет выгладить приблизительно так:
Еще раз проверьте введенные данные и если все введено корректно, жмем кнопку «Создать репозиторий».
6. После создания нового репозитория вы попадете на страницу «Начало работы»:
Где, нажав на ссылку «Я начинаю с полного нуля», сможете получить ссылку для подключения к вашему репозиторию с помощью TortoiseHg.
Ссылка будет иметь вид: httрs://вашлогин@bitbucket.org/вашлогин/имярепозитория
7. У себя на компьютере создаете пустую папку, в которой будут в дальнейшем храниться файлы вашего проекта, подключенные к системе контроля версий Mercurial.
Важно! Папка должна быть пустой. Мне, например, для подключения папки с уже существующим проектом (кучей программного кода) пришлось временно перенести все файлы в другой каталог (сделать резервную копию — backup). Позже мы вернем все файлы на место, а пока нужно полностью очистить папку для подключения.
Далее нажимаем на пустой папке, предназначенной для хранения файлов проекта, подключенных к системе контроля версий Mercurial, правой кнопкой мыши и из выпадающего меню выбираем пункт «TortoiseHg->Clone…»
8. В открывшемся окне вам необходимо указать в поле «Источник» ссылку для подключения к созданному вами репозиторию из п. 6
И нажать кнопку «Клонировать».
9. Система запросит у вас пароль от вашего аккаунта в сервисе Bitbucket, укажите его.
10. Если все было сделано без отклонений от данной инструкции, то в папке появится новый каталог «.hg» со служебными файлами созданного репозитория.
11. Теперь можно смело возвращать файлы (программный код) вашего проекта в папку, предназначенную для хранения файлов проекта, подключенных к системе контроля версий Mercurial
Важно! Служебный каталог «.hg» не трогайте. Он нужен для работы VCS.
12. Снова нажимаем правой кнопкой мыши на нашей папке проекта и из выпадающего меню выбираем пункт «Hg Commit…»
13. Вы увидите диалоговое окно, предназначенное для фиксации всех сделанных изменений, произведенных над вашим проектом (в данном случае мы добавили в изначально пустую папку проекта наши программные коды).
Вам необходимо выделить все измененные (добавленные) файлы, указать комментарий (например, Версия 1.00) к изменению и нажать кнопку «Фиксировать».
Система попросит подтвердить добавление, жмите «Добавить».
14. Если все было сделано правильно, то система зафиксирует произведенные изменения, и вы увидите приблизительно такое окно:
Собственно, в дальнейшем, когда будете вести разработку, после завершения небольшого куска кода, вы будете выполнять действие из п. 12 (нажимать «Hg Commit…») для фиксации проделанного изменения в системе контроля версия. Это даст вам возможность в любой момент времени откатить систему до предыдущей фиксации.
Учитывая вышесказанное, на практике следует писать более развернутый, чем «Версия 1.00», комментарий к каждой из фиксаций.
15. Далее нажимаем правой кнопкой мыши на папке проекта и из выпадающего меню выбираем пункт «Hg Workbench…»
16. В открывшемся окне вы можете видеть всю историю сохраненных (зафиксированных) изменений в коде, можете откатить к нужной фиксации, а также отправить изменения в созданный вами ранее репозиторий.
Для этого в панели управления выберите кнопку «Протолкнуть входящие изменения в».
После этого вам будут показаны диалоговые окна с просьбой подтвердить «проталкивание» и просьбой указать пароль от вашего аккаунта в Bitbucket. Соглашайтесь и указывайте пароль.
Система начнет копирование файлов в ваш репозиторий на сервере Bitbucket. Не спешите и дождитесь завершения процесса.
17. Теперь копия файлов вашего проекта храниться в вашем репозитории на серверах Bitbucket. В вашем аккаунте Bitbucket вы можете видеть всю историю работы с вашим проектом.
Промежуточные итоги подключения системы контроля версий (VCS)
На данный момент мы создали репозиторий и поместили в него все файли нашего проекта. То есть теперь вы можете подключиться к вашему репозиторию с любого компьютера и получить стабильную версию файлов хранящихся в нем.
Процесс подключения вашего второго компьютера заключается в копировании файлов из репозитория на второй компьютер. Вам нужно пройти шаги 1 – Установка TortoiseHg и 7 – Импорт файлов репозитория, для копирования файлов на второй, третий и следующие ваши рабочие компьютеры.
Подключение сотрудников к вашему репозиторию.
Основная цель подключения системы контроля версий (VCS) к своему проекту — это организация совместной работы. Т.е. пока вы разрабатываете систему один, вы в большинстве случаев можете обойтись без VCS, но если разработчиков несколько, то вероятность регулярной потери (затирания) программных кодов и конфликтов версий системы очень высока.
Поэтому давайте сейчас подключим к нашему проекту еще одного программиста (пригласим участника) и настроим ему рабочее место.
Подключение сотрудника к нашему репозиторию
18. Все сотрудники, которые будут иметь доступ к вашему репозиторию, должны быть зарегистрированы на сервисе Bitbucket. А также у них на компьютерах должен быть установлен TortoiseHg.
Как зарегистрироваться на сервисе и установить TortoiseHg, я рассказывал чуть ранее в данной инструкции. Поэтому данный процесс не должен вызвать у вас и ваших коллег никаких трудностей.
19. Зайдите в ваш аккаунт на сервисе Bitbucket:
Нажмите на кнопку «Отправить приглашение», расположенную в разделе «Пригласить участника на этот репозиторий».
20. Система выведет вам диалоговое окно с просьбой указать электронный адрес пользователя, которому вы хотите дать доступ к репозиторию. Помимо этого, вам понадобится указать права доступа («чтение» или «запись»). Т.к. в данной инструкции мы показываем, как подключить к репозиторию еще одного разработчика, то укажите «запись».
После того, как ввели email сотрудника и указали права доступа, жмите кнопку «Share».
21. Приглашенный участник получит на свой email письмо со ссылкой на приглашение. Ему будет необходимо пройти по данной ссылке и принять приглашение на доступ к вашему репозиторию.
Еще раз повторю, все участники вашего репозитория должны быть зарегистрированы в сервисе Bitbucket.
22. После того, как приглашение принято, новый участник будет видеть у себя в аккаунте данный репозиторий и свою ссылку на доступ к нему с помощью TortoiseHg.
23. Дальше вашему сотруднику необходимо выполнить 7 пункт данной инструкции для получения файлов проекта к себе на компьютер.
Все изменения, сделанные вами и вашими помощниками, будут сохраняться в вашем репозитории. Вы сможете смотреть, что и когда было изменено и при желании в любой момент откатите ваш проект к нужной версии.
Я думаю, вводную статью о развертывании системы контроля версий без использования командной строки можно на этом заканчивать. Прохождение описанных выше шагов позволит вам внедрить у себя на проекте полноценную VCS, т.е. пройдя все шаги, вы получите хоть и не большой, но законченный результат.
Данный подход мы применили для разработки проекта: АвтоОфис – платформа для интернет бизнеса
Если у вас после прочтения статьи появились вопросы ко мне или уточнения и дополнения инструкций, то пишите в комментариях. Буду очень благодарен, если усилите статью своим пониманием VCS.
P.S.: В следующей статье постараюсь доступным языком расписать, что такое «Ветки», «Метки» и «Форки» и как с ними работать.
Сравнение централизованных и распределенных систем управления версиями [закрыто]
для тех, кто думает, что распределенные системы не позволяют авторитетным
копии обратите внимание, что есть много мест, где распространены
системы имеют авторитетные копии, идеальный пример, вероятно
Ядро дерева Лайнуса. Конечно, у многих людей есть свои деревья, но
почти все они текут к дереву Лайнуса.
это сказало, что я думаю, что распределенные SCM были полезны только для
многие разработчики делают разные вещи, но в последнее время решенный
что все, что может сделать централизованный репозиторий, может сделать распределенный
лучше.
например, скажем, вы являетесь сольным разработчиком, работающим над своим личным
проект. Централизованный репозиторий может быть очевидным выбором, но
рассмотрим этот сценарий. Вы находитесь вдали от доступа к сети (на самолете,
в парке и т. д.) и хотите работать над своим проектом. У вас есть свой местный
скопируйте, чтобы вы могли работать нормально, но вы действительно хотите совершить, потому что вы
закончили одну функцию и хотите перейти к другому, или вы нашли
ошибка для исправления или что-то еще. Дело в том, что с централизованным РЕПО
в конечном итоге вы либо смешиваете все изменения вместе и совершаете их
в нелогичном наборе изменений или вы вручную разделите их позже.
с распределенным РЕПО вы продолжаете работать как обычно, фиксируете, двигаетесь дальше,
когда у вас снова есть доступ к сети, вы нажимаете на свое «одно истинное РЕПО» и
ничего не изменилось.
не говоря уже о другой приятной вещи о распределенные РЕПО: полный
история доступна всегда. Вам нужно посмотреть журналы ревизий, когда
от сети? Вам нужно аннотировать источник, чтобы увидеть, как ошибка
был представлен? Все возможно с распределенными РЕПО.
пожалуйста, пожалуйста, не верьте, что распределенный vs централизованный о
собственность, или авторитетные копии, или что-то в этом роде. Реальность
распространяется является следующим шагом в эволюции SCM.
Mercurial – Распределённая система управления версиями / Хабр
Так как наша команда программистов ведет разработку сразу несколько проектов, довольно быстро возникла необходимость в системе контроля версий.
Естественно, поиски были начаты с изучения Хабра — и привели к неожиданному результату. Несмотря на то, что системы контроля версий появились ещё в 1986 году, большинство туториалов по работе с современными системами контроля версий оказались неполными и сильно завязанными на работу с командной строкой.
Мы ничего не имеем против командной строки в целом, но в нашей небольшой команде разработчиков (4 человека) фанатов работы с командной строкой нет :).
Почему мы считаем, что работа с командной строкой неэффективна?
- Трата времени на ввод данных. Набивать команды намного дольше, чем кликать мышкой.
- Трата времени на обучение. Изучение нового синтаксиса в эпоху понятных интерфейсов однозначно дольше, чем обучение графическому интерфейсу.
- Вероятность ошибки. Ошибиться при вводе данных через командную строку легче (человеческий фактор никто не отменял).
- Нарушение принципов автоматизации. Возможно, это самый главный пункт. Компьютер создан для ускорения работы и замене человека при выполнении рутинных операций. В случае с командной строкой мы всегда работаем вручную, по сути, приходится каждый раз писать один и тот же программный код (пусть и примитивный).
К сожалению, нам не удалось найти полноценного русскоязычного мануала по работе с современными системами контроля версий. Собрав информацию из разных статей и англоязычных видео на YouTube, мы решили сделать своё собственное руководство, которое:
- Будет пошаговой инструкций (по ней же будут работать наши программисты).
- Будет работать от начала и до конца (то есть по ней вы получите небольшой, но законченный результат — работающую распределенную систему контроля версий).
- Будет работать с использованием только графических интерфейсов (причины см. выше).
Что такое контроль версий: централизованный по сравнению с DVCS
В нашей первой статье мы изучили некоторые основы любой системы контроля версий — различия и исправления. Остановившись на различиях и исправлениях, мы теперь обсудим системы контроля версий. Многие из вас знакомы с централизованной системой управления версиями , такой как Subversion (SVN), CVS и Perforce, в то время как другие сразу перешли в миры распределенного управления версиями Git и Mercurial. Существует множество других разновидностей централизованного и распределенного контроля версий, каждая из которых имеет свои преимущества и недостатки.
Централизованный контроль версий
Существует множество систем контроля версий. Часто их делят на две группы: «централизованные» и «распределенные».
Централизованные системы контроля версий основаны на идее, что где-то существует единственная «центральная» копия вашего проекта (возможно, на сервере), и программисты будут «фиксировать» свои изменения в этой центральной копии.
«Подтверждение» изменения означает просто запись изменения в центральной системе. Другие программисты могут увидеть это изменение.Они также могут удалить изменения, и инструмент контроля версий автоматически обновит содержимое всех файлов, которые были изменены.
Большинство современных систем контроля версий имеют дело с «наборами изменений», которые просто представляют собой группы изменений (возможно, во многих файлах), которые следует рассматривать как единое целое. Например: изменение заголовочного файла C и соответствующего файла .c всегда следует хранить вместе.
Централизованный контроль версий решает проблемы, описанные в предыдущем посте на тему Что такое Контроль версий ?.Программистам больше не нужно вручную хранить множество копий файлов на своих жестких дисках, потому что инструмент контроля версий может взаимодействовать с центральной копией и получать любую нужную им версию на лету.
Некоторые из наиболее распространенных централизованных систем контроля версий, о которых вы, возможно, слышали или использовали, — это CVS, Subversion (или SVN) и Perforce.
Типичный процесс централизованного управления версиями
Когда вы работаете с централизованной системой контроля версий, ваш рабочий процесс для добавления новой функции или исправления ошибки в вашем проекте обычно будет выглядеть примерно так:
- Удалите с центрального сервера все изменения, внесенные другими пользователями.
- Внесите изменения и убедитесь, что они работают правильно.
- Сохраните ваши изменения на центральном сервере, чтобы другие программисты могли их увидеть.
Распределенный контроль версий
Примерно за последние пять лет появилось новое поколение инструментов: так называемые «распределенные» системы контроля версий (сокращенно DVCS). Три самых популярных из них — Mercurial, Git и Bazaar.
Эти системы не обязательно полагаются на центральный сервер для хранения всех версий файлов проекта.Вместо этого каждый разработчик «клонирует» копию репозитория и хранит полных истории проекта на собственном жестком диске. Эта копия (или «клон») содержит всех метаданных оригинала.
Этот метод может показаться расточительным, но на практике это не проблема. Большинство программных проектов состоят в основном из простых текстовых файлов (и, возможно, нескольких изображений), а дисковое пространство настолько дешево, что хранение большого количества копий файла не создает заметной вмятины в свободном пространстве жесткого диска.Современные системы также сжимают файлы, чтобы использовать еще меньше места.
Действие получения новых изменений из репозитория обычно называется «вытягиванием», а действие перемещения ваших собственных изменений в репозиторий — «проталкиванием». В обоих случаях вы перемещаете ревизии (изменения групп файлов как единое целое), а не отдельные файлы изменений.
Одно из распространенных заблуждений о распределенных системах контроля версий состоит в том, что не может быть центральным репозиторием проекта. Это просто неправда — ничто не мешает вам сказать «эта копия проекта — авторитетная».Это означает, что вместо того, чтобы центральный репозиторий был , требуемый инструментами, которые вы используете, теперь это необязательный и чисто социальный вопрос.
Преимущества перед централизованным контролем версий
Акт клонирования всего репозитория дает инструментам управления распределенными версиями несколько преимуществ по сравнению с централизованными системами:
- Выполнение действий, отличных от проталкивания и вытягивания ревизий, очень быстро, потому что инструменту нужен только доступ к жесткому диску, а не к удаленному серверу.
- Принятие новых наборов изменений может быть выполнено локально, и никто другой их не увидит. Когда у вас будет готова группа наборов изменений, вы можете отправить их все сразу.
- Все, кроме толкания и тяги, можно делать без подключения к Интернету. Таким образом, вы можете работать над планом, и вам не придется делать несколько исправлений одним большим набором изменений.
- Поскольку каждый программист имеет полную копию репозитория проекта, он может делиться изменениями с одним или двумя другими людьми одновременно, если они хотят получить обратную связь, прежде чем показывать изменения всем.
Недостатки по сравнению с централизованным контролем версий
Если честно, то недостатков в использовании распределенной системы контроля версий над централизованной почти нет. Распределенные системы не , а не мешают вам иметь единый «центральный» репозиторий, они просто предоставляют больше возможностей помимо этого.
Распределенная система имеет только два основных недостатка:
- Если ваш проект содержит много больших двоичных файлов, которые нельзя легко сжать, пространство, необходимое для хранения всех версий этих файлов, может быстро накопиться.
- Если ваш проект имеет очень долгую историю (50 000 ревизий или больше), загрузка всей истории может занять непрактичное количество времени и места на диске.
Авторы и соавторы современных распределенных систем контроля версий работают над решением этих проблем, но на данный момент никакие встроенные встроенные функции не решают их.
Заключение
Системы контроля версий
направлены на решение конкретной проблемы, с которой сталкиваются программисты: «хранение и совместное использование нескольких версий файлов кода.«Если вы программист любого рода и не пользуетесь никаким контролем версий, вам следует начать прямо сейчас. Это облегчит тебе жизнь.
Подробнее о темах git
.
Централизованные и распределенные системы контроля версий
Найджел Чешир
В те времена, когда Lotus Notes все еще носил короткие штаны, скажем, раньше, примерно в 1995 или 1996 годах, проблема контроля версий никогда не поднималась бы в разговорах вокруг воды команды разработчиков Notes. кулер. Фактически, тогда большинство разработчиков Notes, вероятно, даже не знали бы, что такое контроль версий, контроль версий, контроль исходного кода или как вы хотите это назвать.
Многие люди, создававшие и обслуживающие приложения Lotus Notes, не имели опыта традиционной разработки программного обеспечения, начав как «опытный пользователь» и развив свои навыки синхронно с развитием Notes как платформы приложений.По общему признанию, я давно учился в школе информатики (класс 1984 года!), Но даже тогда меня приучили использовать SCCS и Make для контроля версий и управления сборкой.
По иронии судьбы меня всегда поражало то, что Lotus Notes — приложение (платформа), основанное на сотрудничестве, — никогда не включало никаких функций, которые облегчили бы сотрудничество между разработчиками Notes. Это не обязательно было удивительно в первые дни Notes — среда программирования была настолько простой, что было бы довольно необычно иметь более одного разработчика, работающего над одним и тем же приложением одновременно.
Но со временем разработчики стали более амбициозными, и типы приложений, разрабатываемых на платформе Lotus Notes, стали более сложными. К середине-концу 90-х годов на Lotus Notes было поставлено несколько довольно сложных приложений для автоматизации продаж и обслуживания клиентов.
Как вы понимаете, эти приложения создавались группами людей, и задача отслеживания того, кто работал над тем, становилась все более проблематичной. По мере того, как возрастала сложность приложений, становилось все более важным отслеживать, какая версия приложения находится в производстве, даже если все приложение было разработано одним и тем же человеком.Так родилась Teamstudio CIAO !, наша система контроля версий для IBM Notes и Domino.
Но я забегаю вперед. Для непосвященных позвольте мне объяснить типы систем контроля версий (VCS) и почему так важно понимать различия между ними. Фактически существует два типа VCS: централизованная и распределенная.
Централизованный контроль версий
Централизованная система контроля версий работает по модели клиент-сервер.Существует единственная (централизованная) главная копия базы кода, и части кода, над которыми работают, обычно заблокированы (или «извлечены»), так что только одному разработчику разрешено работать с этой частью код в любой момент. Доступ к кодовой базе и блокировка контролируются сервером. Когда разработчик возвращает свой код, блокировка снимается, и другие могут его проверить.
Конечно, важной частью любой VCS является возможность отслеживать изменения, которые вносятся в элементы кода, и поэтому, когда элемент регистрируется, создается и регистрируется новая версия этой части.Когда все закончили работу над своими разными частями и пришло время сделать новый выпуск, создается новая версия приложения, что обычно означает просто регистрацию номеров версий всех отдельных частей, которые идут вместе, чтобы сделать эту версию приложения. .
Вероятно, наиболее известными примерами централизованных систем VCS являются CVS и Subversion, обе из которых имеют открытый исходный код, хотя было много коммерческих примеров (включая Rational ClearCase от IBM).
Teamstudio CIAO! тоже попадает в эту категорию, но я вернусь к этому позже.
Распределенный контроль версий
В последнее время наблюдается тенденция (или некоторые могут назвать это революцией) к распределенным системам контроля версий. Эти системы работают по одноранговой модели: кодовая база распределяется между компьютерами отдельных разработчиков. Фактически, вся история кода отражается в каждой системе.
Есть еще главная копия базы кода, но она хранится на клиентском компьютере, а не на сервере. Нет блокировки частей кода; разработчики вносят изменения в свою локальную копию, а затем, когда они будут готовы интегрировать свои изменения в мастер-копию, они отправляют владельцу мастер-копии запрос на слияние своих изменений с мастер-копией.
В DVCS акцент переключается с версий на изменения, и поэтому новая версия кода представляет собой просто комбинацию ряда различных наборов изменений. Это довольно фундаментальное изменение в способах работы многих разработчиков, поэтому DVCS иногда считается труднее для понимания, чем централизованные системы.
Самыми известными примерами распределенных VCS являются Git и Mercurial, оба из которых имеют открытый исходный код.
Плюсы и минусы
Ключевое различие между централизованными и распределенными VCS, на мой взгляд, заключается в том, что в распределенной системе нет блокировки элементов.Таким образом, каждый новый набор изменений, вносимых разработчиком, по сути, похож на новую ветвь кода, которую необходимо снова объединить в главный репозиторий. В распределенной модели два разработчика могут работать над одним и тем же исходным файлом одновременно.
Это одно фундаментальное различие означает следующее:
Производительность распределенных систем выше, потому что не нужно ждать блокировки потенциально медленных сетевых подключений. Кроме того, полная база кода уже находится в вашей локальной системе.
В распределенной системе гораздо проще выполнить ветвление и слияние, в основном потому, что они встроены в способ работы системы.
В распределенной системе нет необходимости постоянно подключаться к сети.
По этим причинам многие люди стали поклонниками DVCS и верят, что Git и Mercurial — это ответ на любой вопрос VCS. Однако централизованные системы, такие как Subversion, также имеют некоторые преимущества:
Централизованные системы обычно легче понять.
Контроль доступа проще, так как все управляется из одного места (сервера).
Если вы не хотите, вам не нужно объединять разные версии одного и того же кода, что может быть сложно.
VCS для Notes и Domino
Так что насчет нас, разработчиков IBM Notes и Domino? Какую систему контроля версий мы можем использовать лучше всего? Чтобы ответить на этот вопрос, вам нужно рассмотреть еще один аспект.
Практически каждая система VCS, о которой мы здесь говорили, работает в предположении, что отдельные фрагменты кода, которыми манипулируют, аккуратно отображаются в текстовые файлы, т.е.е. исходный код. Как вы, наверное, знаете, это не относится к вашему типичному приложению Lotus Notes. Отдельные элементы дизайна (формы, представления, библиотеки сценариев и т. Д.) В проекте базы данных Notes обычно содержатся в одном файле (NSF или NTF).
Это создает две проблемы, если вы хотите использовать распределенную VCS на основе файлов, такую как Git или Mercurial. Во-первых, элементы дизайна Notes не могут быть разделены и распределены по рабочим станциям отдельных разработчиков естественным образом. Во-вторых, даже если бы они могли, объединение их обратно в основную копию проекта базы данных было бы кошмаром без некоторых специализированных инструментов.
Теоретически вы можете экспортировать элементы дизайна Notes в DXL и использовать стандартную VCS для управления создаваемыми текстовыми файлами. Однако мы не знаем никого, кто смог бы создать рабочий процесс, который работает на практике, используя этот метод. Вот почему мы по-прежнему считаем, что если вы создаете или поддерживаете классические приложения Notes, Teamstudio CIAO! это путь.
CIAO! интегрируется в Domino Designer и позволяет блокировать или извлекать отдельные элементы дизайна Notes.Когда вы закончите вносить изменения, вы можете снова вернуть эти элементы, сняв блокировку. ЧАО! строит полную историю всех изменений каждого отдельного элемента, позволяя вам вернуться к предыдущим версиям. Вы также можете пометить все элементы номером версии, когда придет время выпускать новую версию приложения.
Таким образом, если вы создаете приложения с использованием традиционных текстовых исходных файлов, например, используя JavaScript и Node.js для доступа к данным Domino, то распределенная VCS, такая как Git, вероятно, является лучшим выбором.Но если ваши приложения являются классическими приложениями Notes, с формами, представлениями и библиотеками скриптов, вам стоит попробовать Teamstudio CIAO! (Посмотрите, что я там делал?)
Чтобы узнать больше о CIAO !, устройте демонстрацию или просто поговорите о любом аспекте управления версиями для IBM Lotus Notes и Domino, щелкните ниже. Всегда рады поболтать!
.
Что такое Git | Изучите средство управления распределенными версиями
Git — это бесплатный инструмент распределенной системы управления версиями с открытым исходным кодом, предназначенный для быстрой и эффективной обработки любых проектов, от небольших до очень крупных. Он был создан Линусом Торвальдсом в 2005 году для разработки ядра Linux. Git обладает функциональностью, производительностью, безопасностью и гибкостью, которые необходимы большинству команд и отдельных разработчиков. Он также служит важным инструментом распределенного контроля версий DevOps .Этот блог «Что такое Git» — первый из моей серии учебных пособий по Git. Я надеюсь, вам понравится. 🙂
В этом блоге «Что такое Git» вы узнаете:
Что такое Git — почему Git появился?
Все мы знаем, что «Необходимость — мать всех изобретений». Точно так же Git был изобретен для удовлетворения определенных потребностей, с которыми разработчики сталкивались до Git.
Какова цель Git?
Git в основном используется для управления вашим проектом, состоящим из набора кодовых / текстовых файлов, которые могут изменяться.
Но прежде чем мы пойдем дальше, давайте сделаем шаг назад и узнаем все о системах контроля версий (VCS) и о том, как появился Git.
Контроль версий — это управление изменениями в документах, компьютерных программах, крупных веб-сайтах и другом сборе информации.
Существует два типа VCS:
- Централизованная система контроля версий (CVCS)
- Распределенная система контроля версий (DVCS)
Централизованная VCS
Централизованная система контроля версий (CVCS) использует центральный сервер для хранения всех файлов и обеспечения совместной работы команды.Он работает в едином репозитории, к которому пользователи могут напрямую обращаться к центральному серверу.
Пожалуйста, обратитесь к диаграмме ниже, чтобы лучше понять CVCS:
Репозиторий на приведенной выше диаграмме указывает на центральный сервер, который может быть локальным или удаленным, который напрямую подключен к каждой рабочей станции программиста.
Каждый программист может извлечь или обновить своих рабочих станций данными, имеющимися в репозитории, или может внести изменения в данные или зафиксировать в репозитории.Каждая операция выполняется непосредственно в репозитории.
Хотя поддерживать единый репозиторий кажется довольно удобным, у него есть несколько серьезных недостатков. Некоторые из них:
- Локально недоступны; это означает, что вам всегда нужно быть подключенным к сети для выполнения любых действий.
- Поскольку все централизовано, в любом случае сбой или повреждение центрального сервера приведет к потере всех данных проекта.
Именно здесь на помощь приходит распределенная VCS.
Распределенная VCS
Эти системы не обязательно полагаются на центральный сервер для хранения всех версий файла проекта.
В распределенной VCS каждый участник имеет локальную копию или «клон» основного репозитория, то есть каждый поддерживает собственный локальный репозиторий, который содержит все файлы и метаданные, имеющиеся в основном репозитории.
Вы поймете это лучше, обратившись к диаграмме ниже:
Как вы можете видеть на диаграмме выше, каждый программист самостоятельно поддерживает локальный репозиторий, который на самом деле является копией или клоном центрального репозитория на своем компьютере. жесткий диск.Они могут фиксировать и обновлять свой локальный репозиторий без какого-либо вмешательства.
Они могут обновлять свои локальные репозитории новыми данными с центрального сервера с помощью операции « pull » и влиять на изменения в главном репозитории с помощью операции « push » из своего локального репозитория.
Клонирование всего репозитория на вашу рабочую станцию для получения локального репозитория дает вам следующие преимущества:
- Все операции (кроме push & pull) выполняются очень быстро, потому что инструменту нужен только доступ к жесткому диску, а не к удаленный сервер.Следовательно, вам не всегда нужно подключение к Интернету.
- Фиксация новых наборов изменений может быть выполнена локально без изменения данных в главном репозитории. Когда у вас будет готовая группа наборов изменений, вы можете отправить их все сразу.
- Поскольку у каждого участника есть полная копия репозитория проекта, они могут делиться изменениями друг с другом, если они хотят получить некоторую обратную связь, прежде чем влиять на изменения в главном репозитории.
- Если центральный сервер выйдет из строя в любой момент, потерянные данные можно легко восстановить из любого локального репозитория участника.
Познакомившись с распределенной VCS, пришло время погрузиться в то, что такое Git.
Что такое Git?
Git — это инструмент управления распределенными версиями, который поддерживает распределенные нелинейные рабочие процессы, обеспечивая гарантию данных для разработки качественного программного обеспечения. Прежде чем продолжить, посмотрите это видео на GIT, которое поможет вам лучше понять.
Учебное пособие по Git и Github, объясняющее науку, лежащую в основе рабочих процессов Git и Github | Основы Github
Git предоставляет пользователю все средства распределенной VCS, о которых упоминалось ранее.Репозитории Git очень легко найти и получить к ним доступ. Вы узнаете, насколько Git гибок и совместим с вашей системой, когда ознакомитесь с функциями, упомянутыми ниже:
Что такое Git — Особенности Git
Бесплатно и с открытым исходным кодом:
Git выпущен под лицензией GPL (Стандартная общественная лицензия) лицензия с открытым исходным кодом. Вам не нужно покупать Git. Это абсолютно бесплатно. А поскольку это открытый исходный код, вы можете изменить исходный код в соответствии с вашими требованиями.
Скорость:
Так как вам не нужно подключаться к какой-либо сети для выполнения всех операций, он выполняет все задачи очень быстро. Тесты производительности, проведенные Mozilla, показали, что она на порядок быстрее других систем контроля версий. Получение истории версий из локально хранимого репозитория может быть в сто раз быстрее, чем получение ее с удаленного сервера. Основная часть Git написана на C, что позволяет избежать накладных расходов времени выполнения, связанных с другими языками высокого уровня.
Масштабируемость:
Git очень масштабируемый. Так что, если в будущем количество соавторов увеличится, Git легко справится с этим изменением. Хотя Git представляет собой весь репозиторий, данные, хранящиеся на стороне клиента, очень малы, поскольку Git сжимает все огромные данные с помощью техники сжатия без потерь.
Надежно:
Поскольку каждый участник имеет свой собственный локальный репозиторий, в случае сбоя системы потерянные данные можно восстановить из любого локального репозитория.У вас всегда будет резервная копия всех ваших файлов.
Secure:
Git использует SHA1 (Secure Hash Function) для именования и идентификации объектов в своем репозитории. Каждый файл и фиксация проверяются и извлекаются по контрольной сумме во время проверки. История Git хранится таким образом, что идентификатор конкретной версии (фиксация в терминах Git) зависит от полной истории разработки, ведущей к этой фиксации.После публикации невозможно изменить старые версии, не заметив этого.
Экономичный:
В случае CVCS центральный сервер должен быть достаточно мощным, чтобы обслуживать запросы всей команды. Для небольших команд это не проблема, но по мере роста размера команды аппаратные ограничения сервера могут стать узким местом для производительности. В случае DVCS разработчики не взаимодействуют с сервером, если им не нужно отправлять или извлекать изменения. Вся тяжелая работа выполняется на стороне клиента, поэтому серверное оборудование действительно может быть очень простым.
Поддерживает нелинейную разработку:
Git поддерживает быстрое ветвление и слияние, а также включает специальные инструменты для визуализации и навигации по истории нелинейной разработки. Основное предположение в Git состоит в том, что изменение будет объединяться чаще, чем написано, поскольку оно передается различным рецензентам. Ветви в Git очень легкие. Ветка в Git — это всего лишь ссылка на одну фиксацию. С его родительскими коммитами можно построить полную структуру ветвей.
Легкое ветвление:
Управление ветвями с помощью Git очень простое. Создание, удаление и объединение веток занимает всего несколько секунд. Ветки функций обеспечивают изолированную среду для каждого изменения вашей кодовой базы. Когда разработчик хочет начать работу над чем-то, независимо от того, насколько он большой или маленький, он создает новую ветку. Это гарантирует, что основная ветвь всегда содержит код производственного качества.
Распределенная разработка:
Git предоставляет каждому разработчику локальную копию всей истории разработки, и изменения копируются из одного такого репозитория в другой.Эти изменения импортируются как дополнительные ветки разработки и могут быть объединены таким же образом, как и локально разработанные ветки.
Совместимость с существующими системами или протоколом
Репозитории могут публиковаться через http, ftp или протокол Git через простой сокет или ssh. Git также имеет эмуляцию сервера Concurrent Version Systems (CVS), которая позволяет использовать существующие клиенты CVS и плагины IDE для доступа к репозиториям Git.Репозитории Apache SubVersion (SVN) и SVK можно использовать напрямую с Git-SVN.
Что такое Git — роль Git в DevOps?
Теперь, когда вы знаете, что такое Git, вы должны знать, что Git является неотъемлемой частью DevOps.
DevOps — это практика повышения гибкости процесса разработки и эксплуатации. Это совершенно новая идеология, которая охватила ИТ-организации по всему миру, увеличивая жизненные циклы проектов и, в свою очередь, увеличивая прибыль. DevOps способствует общению между инженерами-разработчиками и производителями, участвуя вместе на протяжении всего жизненного цикла услуги, от проектирования до процесса разработки и поддержки производства.
На диаграмме ниже изображен жизненный цикл Devops и показано, как Git вписывается в Devops.
На диаграмме выше показан весь жизненный цикл Devops, начиная от планирования проекта до его развертывания и мониторинга. Git играет жизненно важную роль, когда дело доходит до управления кодом, который соавторы вносят в общий репозиторий. Затем этот код извлекается для выполнения непрерывной интеграции, чтобы создать сборку, протестировать ее на тестовом сервере и в конечном итоге развернуть в производственной среде.
Инструменты, такие как Git, позволяют общаться между разработчиками и командой эксплуатации. Когда вы разрабатываете большой проект с огромным количеством соавторов, очень важно поддерживать связь между соавторами при внесении изменений в проект. Сообщения коммитов в Git играют очень важную роль в общении между командой. Части и части, которые мы все развертываем, находятся в системе контроля версий, такой как Git. Чтобы добиться успеха в DevOps, вам необходимо иметь все коммуникации в системе управления версиями.Следовательно, Git играет жизненно важную роль в достижении успеха в DevOps.
Кто использует Git? — Популярные компании, использующие Git
Git заработал гораздо большую популярность по сравнению с другими инструментами контроля версий, доступными на рынке, такими как Apache Subversion (SVN), Concurrent Version Systems (CVS), Mercurial и т. Д. Вы можете сравнить интерес к Git по времени с другими инструментами контроля версий с графиком, собранным из Google Trends ниже:
В крупных компаниях продукты, как правило, разрабатывают разработчики со всего мира.Для обеспечения связи между ними решением является Git.
Некоторые компании, использующие Git для контроля версий: Facebook, Yahoo, Zynga, Quora, Twitter, eBay, Salesforce, Microsoft и многие другие.
В последнее время все новые разработки Microsoft были связаны с функциями Git. Microsoft переносит .NET и многие из своих проектов с открытым исходным кодом на GitHub, которыми управляет Git.
Одним из таких проектов является LightGBM. Это быстрая, распределенная, высокопроизводительная структура повышения градиента, основанная на алгоритмах дерева решений, которая используется для ранжирования, классификации и многих других задач машинного обучения.
Здесь Git играет важную роль в управлении этой распределенной версией LightGBM, обеспечивая скорость и точность.
На этом этапе вы знаете, что такое Git; Теперь давайте научимся использовать команды и выполнять операции в моем следующем блоге Git Tutorial .
Популярный вопрос:
В чем разница между Git и GitHub?
Git — это просто система контроля версий, которая управляет и отслеживает изменения исходного кода, тогда как GitHub — это облачная хостинговая платформа, которая управляет всеми вашими репозиториями Git.
Почему Git так популярен?
Git — это распределенная система контроля версий (VCS), которая позволяет разработчикам управлять изменениями в автономном режиме, а также позволяет при необходимости ветвиться и объединяться, предоставляя им полный контроль над локальной базой кода. Он быстр, а также подходит для обработки массивных баз кода, разбросанных между несколькими разработчиками, что делает его наиболее популярным инструментом.
Если вы нашли этот блог « Что такое Git » релевантным, ознакомьтесь с DevOps-тренингом от Edureka, надежной компании онлайн-обучения с сетью из более чем 250 000 человек. довольные учащиеся распространяются по всему миру.Курс Edureka DevOps Certification Training помогает учащимся получить опыт в различных процессах и инструментах DevOps, таких как Puppet, Jenkins, Nagios и GIT, для автоматизации нескольких этапов в SDLC.
.
Централизованные и распределенные системы контроля версий [CVCS vs DVCS]
Мы читали концепцию / преимущества / типы систем контроля версий в нашей последней статье.
Теперь я собираюсь пролить свет на различия между централизованными системами контроля версий и распределенными системами контроля версий.
Если вы новичок в SCM и системах контроля версий, вы можете направить свой браузер к этой статье, где мы рассмотрели несколько очень часто используемых терминов в VCS .
Итак, поехали…
Концепция централизованной системы заключается в том, что она работает на основе отношений клиент-сервер. Репозиторий находится в одном месте и предоставляет доступ множеству клиентов.
В то время как в распределенной системе каждый пользователь имеет локальную копию репозитория в дополнение к центральному репо на стороне сервера.
Централизованное управление версиями — это простейшая система с концепцией 1 центрального репозитория, серверы которого предоставляют последний код всем клиентам по всему миру.
Распределенный контроль версий обеспечивает гибкость и возник с концепцией, что у каждого есть свой собственный репозиторий, они не просто проверяйте снимок кода — они полностью отражают центральный репозиторий.
CVCS легко понять, тогда как DVCS предлагает сложный процесс для начинающих.
CVCS зависит от доступа к серверу, тогда как DVCS дает преимущества для работы в автономном режиме. Все, кроме нажатия и извлечения кода, можно выполнить без подключения к Интернету.
CVCS проста в администрировании и имеет больший контроль над пользователями и доступом, так как это сервер из одного места.
DVCS сравнительно быстр по сравнению с CVCS, так как вам не нужно связываться с центральным сервером для каждой команды.DVCS просто занимает много времени при первой проверке, так как он зеркалирует центральный репозиторий на вашем локальном компьютере.
Если ваш проект имеет очень долгую историю и наборы изменений, то загрузка всей истории может занять неоправданно много времени и дискового пространства в DVCS, тогда как CVCS позволяет вам проверить только несколько строк кода, если вам просто нужно поработать над несколькими модули.
DVCS обеспечивает мощное и подробное отслеживание изменений, что означает меньше конфликтов во время слияния.
DVCS дает возможность разработчикам обмениваться изменениями с одним или двумя другими членами команды одновременно, если они хотят получить обратную связь, прежде чем показывать изменения всем.
Версии в DVCS — это типичные большие гиды (например, fa333b7rer96cd6d3b0037d660) — это не инкрементные числа (которые предоставляются CVCS), которые затрудняют их обращение и запоминание.
DVCS дает преимущество, заключающееся в том, что в случае отказа репозитория главного сервера у вас все еще есть локальный репозиторий в локальном пространстве каждого разработчика, из которого вы можете создать основной репозиторий.
SVN и CVS — популярные инструменты CVCS
GIT и Mercurial — популярные инструменты DVCS
Я надеюсь, что теперь у вас есть хорошее представление о различиях между различными системами контроля версий — централизованной и распределенной.
.