Персональные инструменты
 

Distributed Version Control Systems: A Not-So-Quick Guide Through — различия между версиями

Материал из CustisWiki

Перейти к: навигация, поиск
м
м (1 версия)
 
(не показаны 4 промежуточные версии 3 участников)
Строка 1: Строка 1:
Перевод статьи «[http://www.infoq.com/articles/dvcs-guide Distributed Version Control Systems: A Not-So-Quick Guide Through]» от ''Sebastien Auvray'' с портала InfoQ.
+
Перевод статьи «[http://www.infoq.com/articles/dvcs-guide Distributed Version Control Systems: A Not-So-Quick Guide Through]» от ''Sebastien Auvray'' с портала InfoQ.
  
 
[[Image:3-atlets-on-start.jpg|right|200px]]
 
[[Image:3-atlets-on-start.jpg|right|200px]]
  
{{note}} Sébastien Auvray — senior software designer и энтузиаст технологий. Его заставляли использовать [[CVS]] и [[SVN]], теперь он страдает на работе от ежедневного использования Perforce. Sébastien также один из редакторов InfoQ по теме Ruby.
+
{{note}} Sébastien Auvray — senior software designer и энтузиаст технологий. Его заставляли использовать [[CVS]] и [[SVN]], теперь он страдает на работе от ежедневного использования Perforce. Sébastien также один из редакторов InfoQ по теме Ruby.
  
  
{{caution}} К моменту перевода прошел уже год, и многие положения статьи изменились — самые очевидные исправлены переводчиком ([[Участник:StasFomin|Стас Фомин]]) (в частности, исправлены битые ссылки), часть снабжены сносками, указывающими на произошедшие изменения.
+
{{caution}} К моменту перевода прошел уже год, и многие положения статьи изменились — самые очевидные исправлены переводчиком ([[Участник:StasFomin|Стас Фомин]]) (в частности, исправлены битые ссылки), часть снабжены сносками, указывающими на произошедшие изменения.
  
 
После [[Линус Торвальдс о GIT на Google Talks|выступления Линуса Торвальдса в Google]] в мае 2007, просвященного GIT, постоянно растет интерес и число пользователей распределенных систем контроля версий (''Distributed Version Control Systems'', DVCS).
 
После [[Линус Торвальдс о GIT на Google Talks|выступления Линуса Торвальдса в Google]] в мае 2007, просвященного GIT, постоянно растет интерес и число пользователей распределенных систем контроля версий (''Distributed Version Control Systems'', DVCS).
Строка 185: Строка 185:
 
| Интернационализация
 
| Интернационализация
 
| {{No}}
 
| {{No}}
| {{No}} [http://www.selenic.com/mercurial/wiki/index.cgi/InternationalizationPlan Запланировано]
+
| {{Ok}}
 
| {{Ok}}
 
| {{Ok}}
 
|-
 
|-
Строка 270: Строка 270:
 
| Плагины к IDE
 
| Плагины к IDE
 
| {{Ok}} <tt>Idea</tt>, <tt>Eclipse</tt>, <tt>NetBeans</tt>
 
| {{Ok}} <tt>Idea</tt>, <tt>Eclipse</tt>, <tt>NetBeans</tt>
| {{Ok}} <tt>Idea</tt>, <tt>Eclipse</tt>, <tt>NetBeans</tt>
+
| {{Ok}} <tt>Idea</tt>, <tt>Eclipse</tt>, <tt>NetBeans</tt>, <tt>MS Visual Studio([http://visualhg.codeplex.com/ VisualHG], [http://www.newsupaplex.pp.ru/hgscc_news_eng.html hgcc])</tt>
 
| {{Caution}} <tt>Idea</tt>, <tt>Eclipse</tt>. Нет для <tt>NetBeans</tt>
 
| {{Caution}} <tt>Idea</tt>, <tt>Eclipse</tt>. Нет для <tt>NetBeans</tt>
 
|-
 
|-
Строка 373: Строка 373:
 
* <code>[http://www.kernel.org/pub/software/scm/git/docs/git-stash.html git-stash]</code> (поддержка прерывания для краткого баг-фикса в другом проекте),
 
* <code>[http://www.kernel.org/pub/software/scm/git/docs/git-stash.html git-stash]</code> (поддержка прерывания для краткого баг-фикса в другом проекте),
 
* <code>[http://www.kernel.org/pub/software/scm/git/docs/git-cherry-pick.html git-cherry-pick]</code> (для выбора отдельных коммитов, без полных веток),
 
* <code>[http://www.kernel.org/pub/software/scm/git/docs/git-cherry-pick.html git-cherry-pick]</code> (для выбора отдельных коммитов, без полных веток),
*<code>[http://www.kernel.org/pub/software/scm/git/docs/git-rebase.html git-rebase]</code> «Quilt-like changeset» типа [http://www.selenic.com/mercurial/wiki/index.cgi/MqExtension Mercurial Queues]).
+
* <code>[http://www.kernel.org/pub/software/scm/git/docs/git-rebase.html git-rebase]</code> «Quilt-like changeset» типа [http://www.selenic.com/mercurial/wiki/index.cgi/MqExtension Mercurial Queues]).
*<code>git add -i</code> аналог ''Mercurial RecordExtension''.
+
* <code>git add -i</code> аналог ''Mercurial RecordExtension''.
  
 
Похоже тут есть все команды, которые вы бы могли захотеть.
 
Похоже тут есть все команды, которые вы бы могли захотеть.
Строка 396: Строка 396:
 
* [http://www.markshuttleworth.com/archives/126 Переименование не так хорошо, как в bzr]
 
* [http://www.markshuttleworth.com/archives/126 Переименование не так хорошо, как в bzr]
 
<ref>
 
<ref>
См. например [http://automatthias.wordpress.com/2007/06/07/directory-renaming-in-scm/ Test Case]. Переводчик экспериментировал с  
+
См. например [http://automatthias.wordpress.com/2007/06/07/directory-renaming-in-scm/ Test Case]. Переводчик экспериментировал с
 
* svn 1.6.6
 
* svn 1.6.6
 
* bzr 2.0.2
 
* bzr 2.0.2
Строка 465: Строка 465:
 
[[Image:Gitsurvey.png|center|framed|Some User Statistics from Git Survey 2007]]
 
[[Image:Gitsurvey.png|center|framed|Some User Statistics from Git Survey 2007]]
  
{{caution}} Обратите внимание, что в этом отчете не было возможности выбрать ''Ruby'', неплохо было бы добавить его в опрос 2008 года<ref>Ruby добавлен в отчет 2008 года, и показал там очень большой результат — второе место с 43% (См. [http://git.or.cz/gitwiki/GitSurvey2008])</ref>.
+
{{caution}} Обратите внимание, что в этом отчете не было возможности выбрать ''Ruby'', неплохо было бы добавить его в опрос 2008 года<ref>Ruby добавлен в отчет 2008 года, и показал там очень большой результат — второе место с 43 % (См. [http://git.or.cz/gitwiki/GitSurvey2008])</ref>.
  
 
{{note}} Очень забавно, что треть людей используют DVCS взаимодействуюя с … 0 или 1 участниками!<ref>Пошлая шутка от [[User:StasFomin|переводчика]] — «…согласно опросу среди любителей группового секса, 70 % имеет 1 полового партнера, а 29.9 % оставшихся — 0…»</ref>.
 
{{note}} Очень забавно, что треть людей используют DVCS взаимодействуюя с … 0 или 1 участниками!<ref>Пошлая шутка от [[User:StasFomin|переводчика]] — «…согласно опросу среди любителей группового секса, 70 % имеет 1 полового партнера, а 29.9 % оставшихся — 0…»</ref>.
Строка 504: Строка 504:
 
=== Истории использования ===
 
=== Истории использования ===
  
==== Kelly O'Hair ====
+
==== Kelly O’Hair ====
Мне удалось расспросить [http://java.sun.com/developer/Meet-Eng/ohair/ Kelly O'Hair] из Sun на тему его выбора Hg для OpenJDK.
+
Мне удалось расспросить [http://java.sun.com/developer/Meet-Eng/ohair/ Kelly O’Hair] из Sun на тему его выбора Hg для OpenJDK.
  
 
{{question}} Я прочел [http://blogs.sun.com/kto/entry/mercurial_openjdk_questions причины] перехода с <tt>TeamWare</tt> на <tt>Mercurial</tt>, но остались вопросы. Вы просто последовали за выбором проекта ''OpenSolaris''?
 
{{question}} Я прочел [http://blogs.sun.com/kto/entry/mercurial_openjdk_questions причины] перехода с <tt>TeamWare</tt> на <tt>Mercurial</tt>, но остались вопросы. Вы просто последовали за выбором проекта ''OpenSolaris''?
  
{{note}} Ну, в некоторой степени да, но выбор для ''OpenSolaris'' стал также очень распространенным выбором в Sun для всех команд разработчиков желающих куда-нибудь смигрировать. Исследование для ''OpenSolaris'' было впечатляюще исчерпывающим, и их требования в точности совпадали с нашим. Ну а так как нам надо было куда-то переезжать с ''OpenJDK'', т.к. ''TeamWare'' для open-source проекта не подходит, выбор ''Mercurial'' стал для нас вполне очевидным.
+
{{note}} Ну, в некоторой степени да, но выбор для ''OpenSolaris'' стал также очень распространенным выбором в Sun для всех команд разработчиков желающих куда-нибудь смигрировать. Исследование для ''OpenSolaris'' было впечатляюще исчерпывающим, и их требования в точности совпадали с нашим. Ну а так как нам надо было куда-то переезжать с ''OpenJDK'', так как ''TeamWare'' для open-source проекта не подходит, выбор ''Mercurial'' стал для нас вполне очевидным.
  
{{question}} А вы пробовали освежить сравнение, и снова попробовать другие DVCS-системы (git, и т.п.)?
+
{{question}} А вы пробовали освежить сравнение, и снова попробовать другие DVCS-системы (git, и т. п.)?
  
 
{{note}} Нет, мы не занимались перепроверкой, это наверно пустая трата времени. Единственной альтернативной на мой взгляд был <tt>git</tt>, но там не уделяли достаточно внимания работоспособности под Windows, а это нам было нужно. Так что повторюсь, выбор был очевиден.
 
{{note}} Нет, мы не занимались перепроверкой, это наверно пустая трата времени. Единственной альтернативной на мой взгляд был <tt>git</tt>, но там не уделяли достаточно внимания работоспособности под Windows, а это нам было нужно. Так что повторюсь, выбор был очевиден.
  
{{question}} Так ведь [http://www.opensolaris.org/os/community/tools/scm/on-scm-tools/ отчету для ''OpenSolaris''], который был опубликован в апреле 2006, уже два года стукнуло…
+
{{question}} Так ведь [http://www.opensolaris.org/os/community/tools/scm/on-scm-tools/ отчету для ''OpenSolaris''], который был опубликован в апреле 2006, уже два года стукнуло…
  
 
{{note}} Да знаю я. Что-то поменялось, git обновился, но Земля вертится, и ''Mercurial'' тоже улучшился.
 
{{note}} Да знаю я. Что-то поменялось, git обновился, но Земля вертится, и ''Mercurial'' тоже улучшился.
Строка 525: Строка 525:
 
Еще мы столкнулись с проблемой, что использование триггеров (''hooks'') для отката или фильтрации ''push''-изменений создает некоторое временное окно, в течении которого кто-то может вытащить (''pull'') изменения, которые должны быть откачены. В результате мы завели пару репозитариев — один для публикации изменений (''push''), другой — для извлечения (''pull''), и настроили между ними автоматическую синхронизацию, которая срабатывала после выполнения всех триггеров.
 
Еще мы столкнулись с проблемой, что использование триггеров (''hooks'') для отката или фильтрации ''push''-изменений создает некоторое временное окно, в течении которого кто-то может вытащить (''pull'') изменения, которые должны быть откачены. В результате мы завели пару репозитариев — один для публикации изменений (''push''), другой — для извлечения (''pull''), и настроили между ними автоматическую синхронизацию, которая срабатывала после выполнения всех триггеров.
  
Использование лесов (''forests'') также приводило к проблемам, т.к. ''forest-push'' по сути набор отдельных push-операций, и если одна из них падает, то по уму надо бы откатить и все остальные. Однако никто этого не делает, все надеются на удачу.
+
Использование лесов (''forests'') также приводило к проблемам, так как ''forest-push'' по сути набор отдельных push-операций, и если одна из них падает, то по уму надо бы откатить и все остальные. Однако никто этого не делает, все надеются на удачу.
 
Впрочем, если репозитории в лесе достаточно независимы, это не будет реальной проблемой.
 
Впрочем, если репозитории в лесе достаточно независимы, это не будет реальной проблемой.
  
Строка 540: Строка 540:
 
Состояние репозитория в Mercurial достаточно целостное, в отличие от ''TeamWare'', который разрешал частичные workspac-ы, да и вообще TeamWare всего лишь дырявая авоська с индивидуально учитываемыми (SCCS-) файлами.
 
Состояние репозитория в Mercurial достаточно целостное, в отличие от ''TeamWare'', который разрешал частичные workspac-ы, да и вообще TeamWare всего лишь дырявая авоська с индивидуально учитываемыми (SCCS-) файлами.
  
Понятие набора изменений (''changeset'') в TeamWare отсутствует, вместе с понятием определенного состояния репозитария целиком (т.е. просто ''id''-а, ''changeset''-а).
+
Понятие набора изменений (''changeset'') в TeamWare отсутствует, вместе с понятием определенного состояния репозитария целиком (то есть просто ''id''-а, ''changeset''-а).
  
 
{{question}} Так есть что-то, что вам не хватает от ''TeamWare''?
 
{{question}} Так есть что-то, что вам не хватает от ''TeamWare''?
Строка 551: Строка 551:
 
{{note}} Да мы все проекты переносим, как внутренние, так и внешние, там где это имеет смысл разумеется. Вижу, что растет интерес решившихся на это проектов.
 
{{note}} Да мы все проекты переносим, как внутренние, так и внешние, там где это имеет смысл разумеется. Вижу, что растет интерес решившихся на это проектов.
  
==== Pierre d'Herbemont ====
+
==== Pierre d’Herbemont ====
  
Также мне удалось расспросить на тему <tt>git</tt> и ''Pierre d'Herbemont'' из [http://www.videolan.org/vlc/ VLC].
+
Также мне удалось расспросить на тему <tt>git</tt> и ''Pierre d’Herbemont'' из [http://www.videolan.org/vlc/ VLC].
  
 
{{question}} Для начала, какую систему управления версиями вы использовали до <tt>git</tt>?
 
{{question}} Для начала, какую систему управления версиями вы использовали до <tt>git</tt>?
Строка 571: Строка 571:
 
{{question}} Были у вас какие-нибудь специфические проблемы с миграцией? А с ежедневным использованием?
 
{{question}} Были у вас какие-нибудь специфические проблемы с миграцией? А с ежедневным использованием?
  
{{note}} Были проблемы с <tt>Trac</tt> и <tt>buildbot</tt>. У них поддержка Git была минимальной, особенно в их релизных версиях. Нам пришлось вытаскивать последние версии ''Builbot'' из исходников. Для ''Trac'' мы использовали убогий Git-плагин, который требовал <tt>Trac 0.11</tt>. Но <tt>Trac 0.11</tt> еще не стабилен, там есть несколько известных утечек памяти, которые удерживают нас от переключения. В общем, мы ждем, когда они это починят...
+
{{note}} Были проблемы с <tt>Trac</tt> и <tt>buildbot</tt>. У них поддержка Git была минимальной, особенно в их релизных версиях. Нам пришлось вытаскивать последние версии ''Builbot'' из исходников. Для ''Trac'' мы использовали убогий Git-плагин, который требовал <tt>Trac 0.11</tt>. Но <tt>Trac 0.11</tt> еще не стабилен, там есть несколько известных утечек памяти, которые удерживают нас от переключения. В общем, мы ждем, когда они это починят…
  
 
Некоторым контрибьюторам требуется некоторое время, чтобы освоится с Git. Но через пару дней, все оказывается в порядке.
 
Некоторым контрибьюторам требуется некоторое время, чтобы освоится с Git. Но через пару дней, все оказывается в порядке.
Строка 582: Строка 582:
 
DVCS определенно изменят практику вашей работы, как индивидуальной, так и командной.
 
DVCS определенно изменят практику вашей работы, как индивидуальной, так и командной.
  
''Subversion'', один из лидеров CVCS [http://blog.red-bean.com/sussman/?p=79 не сдается]<ref>Мы сделали переводы этих статей, см. [[:Категория:Статьи о Subversion]]</ref> и в производительности, и по функционалу и [http://subversion.tigris.org/roadmap.html версия 1.5] уже должна быть неплохим компромиссом. Он может рассчитывать на существущих пользователей и дух простоты (за счет некоторых неудобств). В определенных случаях, как например в работе с большими бинарными файлами, ''Subversion'' должен быть лучше, чем DVCS т.к. пространство под рабочии копии остается неизменным. Также он эффективней, если вы активно используете частичные ''checkout''-ы, (хотя если это происходит часто — это явная проблема недостаточного разбиения вашего проекта на модули).
+
''Subversion'', один из лидеров CVCS [http://blog.red-bean.com/sussman/?p=79 не сдается]<ref>Мы сделали переводы этих статей, см. [[:Категория:Статьи о Subversion]]</ref> и в производительности, и по функционалу и [http://subversion.tigris.org/roadmap.html версия 1.5] уже должна быть неплохим компромиссом. Он может рассчитывать на существущих пользователей и дух простоты (за счет некоторых неудобств). В определенных случаях, как например в работе с большими бинарными файлами, ''Subversion'' должен быть лучше, чем DVCS так как пространство под рабочии копии остается неизменным. Также он эффективней, если вы активно используете частичные ''checkout''-ы, (хотя если это происходит часто — это явная проблема недостаточного разбиения вашего проекта на модули).
  
Даже если вы сделаете свой выбор в пользу DVCS или CVCS, то будет сложно сравнить конкурентов в выбранной области, т.е.  реализация (например, команды) и соответственно их производительность, будет существенно отличаться. Нет ни одного теста производительности даже для общих операций.
+
Даже если вы сделаете свой выбор в пользу DVCS или CVCS, то будет сложно сравнить конкурентов в выбранной области, то есть реализация (например, команды) и соответственно их производительность, будет существенно отличаться. Нет ни одного теста производительности даже для общих операций.
В этой жесткой битве, ''Bazaar'' потерял многих, очень важных и влиятельных ранних пользователей-энтузиастов (Mozilla, Solaris, OpenJDK) из-за плохой начальной производительности.  
+
В этой жесткой битве, ''Bazaar'' потерял многих, очень важных и влиятельных ранних пользователей-энтузиастов (Mozilla, Solaris, OpenJDK) из-за плохой начальной производительности.
Еще стоит заметить, что вебсайт Bazaar был слишком «маркетинговым»: публиковались не совсем честные сравнения с конкурентами, или тесты производительности по отдельным параметрам, в которых система превосходила конкурентов (см. например [http://bazaar-vcs.org/Benchmarks/SpaceEfficiency Space efficiency]), при том, что не было сравнений по времени для ежедневных команд: <tt>diff</tt>, <tt>add</tt>, ...
+
Еще стоит заметить, что вебсайт Bazaar был слишком «маркетинговым»: публиковались не совсем честные сравнения с конкурентами, или тесты производительности по отдельным параметрам, в которых система превосходила конкурентов (см. например [http://bazaar-vcs.org/Benchmarks/SpaceEfficiency Space efficiency]), при том, что не было сравнений по времени для ежедневных команд: <tt>diff</tt>, <tt>add</tt>,
 
Мне кажется, что хотя все эти три проекта стартовали примерно в одно и то же время, <tt>bzr</tt> с самого начала столкнулся с множеством проблем в производительности и архитектуре, что привело к тому, что он сейчас чуть менее зрел и надежен, чем его конкуренты.
 
Мне кажется, что хотя все эти три проекта стартовали примерно в одно и то же время, <tt>bzr</tt> с самого начала столкнулся с множеством проблем в производительности и архитектуре, что привело к тому, что он сейчас чуть менее зрел и надежен, чем его конкуренты.
  
Строка 596: Строка 596:
  
 
=== Благодарности ===
 
=== Благодарности ===
Благодарю тех, кто любезно согласился на мое интервью: ''Kelly O'Hair'', ''Pierre d'Herbemont''.
+
Благодарю тех, кто любезно согласился на мое интервью: ''Kelly O’Hair'', ''Pierre d’Herbemont''.
 
''Ian Clatworthy'' за его оперативную помощь в преобразовании hg-репозитория Mozilla в <tt>Bzr</tt>.
 
''Ian Clatworthy'' за его оперативную помощь в преобразовании hg-репозитория Mozilla в <tt>Bzr</tt>.
  
Строка 602: Строка 602:
 
Картинка с бегунами от [http://flickr.com/photos/antoniojuez/384183109/ Antonio Juez].
 
Картинка с бегунами от [http://flickr.com/photos/antoniojuez/384183109/ Antonio Juez].
  
=== Случайные цитаты ===  
+
=== Случайные цитаты ===
 
;Linus Torvald:
 
;Linus Torvald:
:* «Subversion has been the most pointless project ever started».  
+
:* «Subversion has been the most pointless project ever started».
 
:* «If you like using CVS, you should be in some kind of mental institution or somewhere else»<ref>См. наш перевод этой речи Линуса Торвальдса — [[Линус Торвальдс о GIT на Google Talks]]</ref>.
 
:* «If you like using CVS, you should be in some kind of mental institution or somewhere else»<ref>См. наш перевод этой речи Линуса Торвальдса — [[Линус Торвальдс о GIT на Google Talks]]</ref>.
  
;Mark Shuttleworth (Ubuntu / Canonical Ltd.):
+
;Mark Shuttleworth (Ubuntu / Canonical Ltd.):
 
:* «Merging is the key to software developer collaboration».
 
:* «Merging is the key to software developer collaboration».
  
;Ian Clatworthy (Canonical / Bazaar):  
+
;Ian Clatworthy (Canonical / Bazaar):
* «By 2011-2012, I predict this technology will be widely adopted and many teams will wonder how they once managed without it.»
+
* «By 2011—2012, I predict this technology will be widely adopted and many teams will wonder how they once managed without it.»
  
 
;Assaf Arkin в [http://blog.labnotes.org/2008/04/30/git-forking-for-fun-and-profit/ Git forking for fun and profit originally]: «Apache built a great infrastructure around SVN, lots of sweat and tears went into making it happen, and at first I felt like we’re circumventing all of that. But the longer I thought about it, the more I realized that Git is just more social than SVN, and that’s exactly what Apache is about.»
 
;Assaf Arkin в [http://blog.labnotes.org/2008/04/30/git-forking-for-fun-and-profit/ Git forking for fun and profit originally]: «Apache built a great infrastructure around SVN, lots of sweat and tears went into making it happen, and at first I felt like we’re circumventing all of that. But the longer I thought about it, the more I realized that Git is just more social than SVN, and that’s exactly what Apache is about.»
  
 
Статья была обновлена 2008-05-12 после коммантариев от [http://article.gmane.org/gmane.comp.version-control.bazaar-ng.general/41384 Ian Clatworthy] и портала [http://reddit.com/r/programming/info/6iiny/comments/ reedit].
 
Статья была обновлена 2008-05-12 после коммантариев от [http://article.gmane.org/gmane.comp.version-control.bazaar-ng.general/41384 Ian Clatworthy] и портала [http://reddit.com/r/programming/info/6iiny/comments/ reedit].
* Добавлены плагины Bzr и Windows GUI: <tt>rebase</tt>, ..., <tt>Wildcat BZR</tt>, ...
+
* Добавлены плагины Bzr и Windows GUI: <tt>rebase</tt>, , <tt>Wildcat BZR</tt>,
 
* Добавлен <tt>Hg Shelve</tt>.
 
* Добавлен <tt>Hg Shelve</tt>.
 
* Обновлены SLOC для Hg (надо было еще учесть HTML-документацию, и оставил <tt>contrib</tt>, отвественный за поддержку Lisp и Tcl/Tk).
 
* Обновлены SLOC для Hg (надо было еще учесть HTML-документацию, и оставил <tt>contrib</tt>, отвественный за поддержку Lisp и Tcl/Tk).
Строка 622: Строка 622:
  
 
=== Извинения ===
 
=== Извинения ===
[http://darcs.net/ darcs], [http://monotone.ca/ Monotone]! Простите, что не рассматривал вас в этом сравнении, т.к. мне и так пришлось неслабо поработать чтобы собрать всю эту информацию и протестировать эти три DVCS. Да, странно получилось, что хотя вы самые старые на DVCS-сцене, актуальны теперь в основном те DVCS, которых я рассматривал тут (конечно, вряд ли эта ситуация измениться, но добро пожаловать пользователям <tt>darcs</tt> и <tt>Monotone</tt> с комментариями и рекламой!).
+
[http://darcs.net/ darcs], [http://monotone.ca/ Monotone]! Простите, что не рассматривал вас в этом сравнении, так как мне и так пришлось неслабо поработать чтобы собрать всю эту информацию и протестировать эти три DVCS. Да, странно получилось, что хотя вы самые старые на DVCS-сцене, актуальны теперь в основном те DVCS, которых я рассматривал тут (конечно, вряд ли эта ситуация измениться, но добро пожаловать пользователям <tt>darcs</tt> и <tt>Monotone</tt> с комментариями и рекламой!).
  
==Ссылки==
+
== Ссылки ==
  
 
* Очень исчерпывающие [http://en.wikipedia.org/wiki/Git_%28software%29 Wikipedia page about Git].
 
* Очень исчерпывающие [http://en.wikipedia.org/wiki/Git_%28software%29 Wikipedia page about Git].
Строка 630: Строка 630:
 
[http://en.wikipedia.org/wiki/Comparison_of_revision_control_software Comparison of Revision Control Software Wikipedia page].
 
[http://en.wikipedia.org/wiki/Comparison_of_revision_control_software Comparison of Revision Control Software Wikipedia page].
  
* [http://ianclatworthy.files.wordpress.com/2007/10/dvcs-why-and-how3.pdf Distributed Version Control - Why and How ] от Ian Clatworthy, ''Canonical'' (Bazaar).
+
* [http://ianclatworthy.files.wordpress.com/2007/10/dvcs-why-and-how3.pdf Distributed Version Control Why and How ] от Ian Clatworthy, ''Canonical'' (Bazaar).
  
 
* [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ Intro to Distributed Version Control (Illustrated)].
 
* [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ Intro to Distributed Version Control (Illustrated)].
Строка 640: Строка 640:
 
* [http://www.opensolaris.org/os/community/tools/scm/ Source Code Management for OpenSolaris]. [http://www.opensolaris.org/os/community/tools/scm/history/ OpenSolaris SCM Project History] (2005).
 
* [http://www.opensolaris.org/os/community/tools/scm/ Source Code Management for OpenSolaris]. [http://www.opensolaris.org/os/community/tools/scm/history/ OpenSolaris SCM Project History] (2005).
  
* [http://blogs.sun.com/kto/entry/mercurial_openjdk_questions Mercurial OpenJDK Questions] от ''Kelly O'Hair'', ''Sun''.
+
* [http://blogs.sun.com/kto/entry/mercurial_openjdk_questions Mercurial OpenJDK Questions] от ''Kelly O’Hair'', ''Sun''.
 
* [http://plasmasturm.org/log/487/ Why I chose git].
 
* [http://plasmasturm.org/log/487/ Why I chose git].
 
* [http://live.gnome.org/DistributedSCM Distributed SCM] от команды Gnome.
 
* [http://live.gnome.org/DistributedSCM Distributed SCM] от команды Gnome.
Строка 652: Строка 652:
 
Ну и все URLы, так или иначе упомянутые в этой статье.
 
Ну и все URLы, так или иначе упомянутые в этой статье.
  
===Шпаргалки===
+
=== Шпаргалки ===
  
 
* [http://ktown.kde.org/%7Ezrusin/git/git-cheat-sheet-medium.png Git Cheat Sheet]
 
* [http://ktown.kde.org/%7Ezrusin/git/git-cheat-sheet-medium.png Git Cheat Sheet]
Строка 658: Строка 658:
 
* [http://doc.bazaar-vcs.org/bzr.1.3/en/quick-reference/quick-start-summary.pdf Bazaar Quick Start Card]
 
* [http://doc.bazaar-vcs.org/bzr.1.3/en/quick-reference/quick-start-summary.pdf Bazaar Quick Start Card]
  
===Условия тестов===
+
=== Условия тестов ===
 
''Benchmark conditions''
 
''Benchmark conditions''
  
 
Тесты были проведены с использованием:
 
Тесты были проведены с использованием:
* <tt>AMD Athlon(tm) 64 Processor 3500+</tt>
+
* <tt>AMD Athlon™ 64 Processor 3500+</tt>
 
* <tt>1GB RAM</tt>
 
* <tt>1GB RAM</tt>
 
* <tt>Linux Kubuntu 6.10 Edgy x86_64 with ext3 fs</tt>.
 
* <tt>Linux Kubuntu 6.10 Edgy x86_64 with ext3 fs</tt>.
Строка 674: Строка 674:
 
* [http://doc.bazaar-vcs.org/bzr.1.2/en/release-notes/NEWS.html Bazaar 1.3.1] от 2008-04-10
 
* [http://doc.bazaar-vcs.org/bzr.1.2/en/release-notes/NEWS.html Bazaar 1.3.1] от 2008-04-10
  
Репозиторий содержал слепок из 12456 ''changeset''-ов (от 20080303, 70853 полных версий из hg-репозитория), ≈30000 файлов из репозитория Mozilla (изначально они были в hg-формате и сконвертированы в git-репозиторий с помощью <tt>hg-fast-export.sh</tt>, и
+
Репозиторий содержал слепок из 12456 ''changeset''-ов (от 20080303, 70853 полных версий из hg-репозитория), ≈30000 файлов из репозитория Mozilla (изначально они были в hg-формате и сконвертированы в git-репозиторий с помощью <tt>hg-fast-export.sh</tt>, и
в Bazaar-репозиторий с помощью <tt>hg-fast-export.sh</tt> плюс плагин <tt>fast-import</tt>).
+
в Bazaar-репозиторий с помощью <tt>hg-fast-export.sh</tt> плюс плагин <tt>fast-import</tt>).
Для репозиториев использовались файловые форматы по умолчанию, и размер репозитория <tt>git</tt> оставался постоянными, при запуске <tt>git-gc</tt> (что в общем, считается нормальным для свежемигрировавшего репозитория). Правился один файл (<code>dom/src/base/nsDOMClassInfo.cpp</code>), точно как в [http://weblogs.mozillazine.org/jst/archives/2006/11/vcs_performance.html тесте проводимом ''Jst'' полтора года назад].
+
Для репозиториев использовались файловые форматы по умолчанию, и размер репозитория <tt>git</tt> оставался постоянными, при запуске <tt>git-gc</tt> (что в общем, считается нормальным для свежемигрировавшего репозитория). Правился один файл (<code>dom/src/base/nsDOMClassInfo.cpp</code>), точно как в [http://weblogs.mozillazine.org/jst/archives/2006/11/vcs_performance.html тесте проводимом ''Jst'' полтора года назад].
  
 
== Примечания ==
 
== Примечания ==

Текущая версия на 04:00, 14 марта 2010

Перевод статьи «Distributed Version Control Systems: A Not-So-Quick Guide Through» от Sebastien Auvray с портала InfoQ.

3-atlets-on-start.jpg

Sébastien Auvray — senior software designer и энтузиаст технологий. Его заставляли использовать CVS и SVN, теперь он страдает на работе от ежедневного использования Perforce. Sébastien также один из редакторов InfoQ по теме Ruby.


К моменту перевода прошел уже год, и многие положения статьи изменились — самые очевидные исправлены переводчиком (Стас Фомин) (в частности, исправлены битые ссылки), часть снабжены сносками, указывающими на произошедшие изменения.

После выступления Линуса Торвальдса в Google в мае 2007, просвященного GIT, постоянно растет интерес и число пользователей распределенных систем контроля версий (Distributed Version Control Systems, DVCS).

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

Так что же это?

Системы управления версиями (СУВ, SCM, Source Control Management) следят за всеми версиями каждой информационной единицы. Обычно они используются в разработке ПО для ведения исходных кодов проекта. Самой древней из широко известных СУВ была CVS, разработка началась в 1986 году.

С тех пор выросло множество СУВ, различным образом улучшающих CVS:

Braches-in-vcs.png

В декабре 1999, для ведения основного ствола исходников Ядра Линукса Линус выбрал BitKeeper, характеризовав его как «Лучший инструмент для этой работы».

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

Все предшественники BitKeeper работали в централизованной модели «Клиент—(Центральный)Сервер», и BitKeeper был первой VCS разрешивший полную распределенность, когда каждый имеет собственный репозиторий. Но из-за лицензионных конфликтов, BitKeeper был отринут в пользу git (апрель 2005).

Теперь есть и другие системы, использующие ту же модель:

Зачем все это?

Или даже более конкретно: «А чем не устраивают CVCS (Централизованные СУВ)? Subversion-то чем не угодил?»

Вот в чем обвиняют Subversion:

  • Главное: ветвится стало легко, но слияние-то по-прежнему мучительно (а ведь зачем «ветвление без слияний?»). Наверняка во всех проектах вам придется развлекаться с ветками разработки и тестирования. А у Subversion нет «безопасного повторного» слияния, пользователей заставляют вручную отслеживать интервалы ревизий, которые уже были интегрированы в другие ветки, и все это разумеется подвержено ошибкам.
  • Никак не послать изменения другому пользователю минуя центральный сервер.
  • Subversion не может интегрировать измененения при переименовании файлов или каталогов[1].
  • Нужно специально придерживаться «trunk/tags/branches»-соглашения о ветках (См. misleading).
  • Нет оффлайн-коммитов.
  • Подкаталоги .svn замусоривают рабочую копию.
  • Обработка свойства svn:external может быть опасна.
  • Производительность: Performance

Современные DVCS-системы все это исправили, как собственными фишками реализации, так и самой идеологией распределенности.

Но, как мы увидим дальше, Subversion еще не сдается!

Как?

Децентрализация

Распределенные системы управления версиями выигрывают за счет «peer-to-peer»-подхода. Участники могут взаимодействовать друг с другом и поддерживать их локальные ветки без необходимости в центральном сервере и даже репозитории. То есть синхронизация идет между равными участниками, самостоятельно решившими, какими изменениями обменяться.

CVCSvsDVCS.png

Это приводит к сущетвенным отличиями и преимуществам над централизованными системами:

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

Даже если есть какой-нибудь центральный сервер (например, для релизов, бэкапов или стандартных версий), если правильно задействовать Распределенность, его не будут так же часто дергать, как в случае CVCS.

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

Для введения в непосредственно практики DVCS-разработки, можете взглянуть на статьи Intro to Distributed Version Control (Illustrated) или возможно Collaboration workflows.

С другой стороны, стоит предупредить вас о некоторых проблемах выбора DVCS, особенно о проблеме сложности использования: этот децентрализованный подход весьма отличается от старого доброго Централизованного Мира, и может потребоваться время, чтобы ваши разработчики смогли им воспользоваться. Отслеживание наборов изменений (changeset) вместо ведения истории файлов тоже может запутать, несмотря на свою мощность, благодаря которой он сможет отслеживать такие вещи, как перемещение функции между файлами.

Кто?

А теперь контрольверсийсрач! «Что такое хорошо, и что такое плохо».

Все эти плюсы и минусы собраны в основном из (вычитанной и проверенной, ибо многие аргументы устаревали) компиляции блогов и личного опыта.

Учтите, что это весьма краткий лист свойств (например, у git более 150 команд), и что важность их разная.

Для простоты, приведем сначала общие свойства всех трех систем:

  • Модель конкурентного взаимодействия: «Слияние»
  • Лицензия: GPL
  • Бесплатны
  • Основные возможности:
    • Атомарные коммиты
    • Слияния переименований файлов
    • Поддержка симлинков
    • Пре- и пост- триггеры (hooks) на события
    • Отслеживание слияний
    • Теги

Теперь приведем сводную таблицу различающихся свойств:

git Mercurial Bzr
Git-logo.png http://git.or.cz/ Mercurial-logo.png http://www.selenic.com/mercurial/ Bzr-logo.png http://bazaar-vcs.org/
ГлавАвтор Junio C Hamano Matt Mackall Canonical Ltd. (идет переход в GNU project)
Платформы POSIX, Windows, Mac OS X Unix-like, Windows, Mac OS X Unix-like, Windows, Mac OS X
Версия > 1.0 (1.6.5.1) > 1.0 (1.3.1) > 1.0 (2.0.0)
Запуск проекта апрель 2005 апрель 2005 март 2005
Реализация
SLOC (без тестов) Git-sloc.png Hg-sloc.png Bzr-sloc.png
SLOC Count 130550 38172 79864
Покрытие тестами (% исходников относящихся к тестам) ~20 % ~25 % ~50 %
Модель истории Snapshot Changeset Snapshot
Рост репозитория O(patch) O(patch) O(patch)
Сетевые протоколы HTTP, FTP, email bundles, custom, ssh, rsync HTTP, ssh, email HTTP, SFTP, FTP, ssh, custom, email bundles
Подпись ревизий Частично/Ручная проверка[2]
Слияние изменений
EOL-соглашения Запланировано в 1.6[3]
Интернационализация
Частичный checkout Используйте вместо этого подмодули Запланировано Запланировано
Модель / Архитектура
Файлы Один подкаталог .git вверху Один подкаталог .hg вверху Один подкаталог .bzr вверху
Модель Простая модель ветвлений (ветка=клон) Простая модель ветвлений (ветка=клон)
Особенности репозиториев Разделяемые репозитории для совместного использования ревизий в разных ветках Supposed-to-be Better Storage Model
Версионирование каталогов
Подмодули git-submodule Forest extension (as used by OpenJDK Решаемо через сторонние инструменты ConfigManager
Индивидуальные коммиты для отдельного файла Противоречит архитектуре Противоречит архитектуре Противоречит архитектуре
Rebase/Queue rebase Mercurial Queues Rebase plugin, Loom plugin (comp. with Quilt)
Web-доступ
Read-only доступ можно дать публикацией статических файлов по HTTP. Read-only доступ можно дать публикацией статических файлов по HTTP. Не так хорошо. Теперь доступен более быстрый Smart Server.
gitweb, wit, cgit hgweb (single rep), hgwebdir (multi rep) webserve, trac, Loggerhead
Интеграция
Интеграция (API) Скорее скриптуем, чем API-интегрируем (хотя есть некий заброшенный API-frontend: Ruby/Git) Богатый API
Миграция Хороша. git-svn тоже весьма мощная штука, представляет двухсторонний прокси между Subversion и Git, позволяет исползовать Git поверх существующего репозитория Subversion. Хороша. Но hgsvn не настолько отлажен, как git-svn. Неплохо реализована, но медленная.
Интеграция с Issue-трекерами Есть для Trac, паллиатив для Bugzilla. Для JIRA увы нет. Есть для Trac, Bugzilla, JIRA. Есть для Trac и Bugzilla, нет для JIRA.
Плагины к IDE Idea, Eclipse, NetBeans Idea, Eclipse, NetBeans, MS Visual Studio(VisualHG, hgcc) Idea, Eclipse. Нет для NetBeans
Плагины Emacs / Vim / … Emacs / Vim / … Emacs / Vim / …
Производительность
git всегда был быстрее bzr всегда самый медленный из этой троицы.
Навороты
С 150 выполняемыми файлами-командами нетрудно найти любую суперкоманду, о которой вы всегда мечтали (хотя это конечно увеличивает сложность)
Сложность
Bzr декларирует скрытие сложности поддержанием четкого и ясного пользовательского интерфейса, при этом адаптируясь к различным моделям взаимодействия workflows и даже их эволюции в каждой команде.
Именование версий/ревизий Ревизии — SHA-1 хеши, что не особо юзер-френдли, если например, запрашивать различия между версиями. Так сделано, чтобы гарантировать надежность и целостность данных, а также чтобы избежать конфликтов при слиянии с другими участниками. Простое именование Простое именование: r1, r2, etc
Команды Понятные, за рядом исключений типа команды rename, которая отличается от других SCM (и уже не поменяют из-за поддержки обратной совместимости). git это наиболее навороченная по командам СУВ, но очень сложно овладеть полным набор всех его команд и опций.

Существование инструментов типа Easy Git только подтверждает исключительную сложность Git.

Понятные (похожие на команды Subversion) Понятные
Число пользователей
Большое / Много (и крупных) проектов на git[4] Большое / Много (и крупных) проектов на hg. Меньше предыдущих: кроме проектов Canonical (Ubuntu, Launchpad), особо крутых проектов нет.
Linux kernel, Cairo, Wine, X.Org, Rails, Rubinius, Compiz Fusion Xine, OpenJDK, OpenSolaris, NetBeans, (Part of) Mozilla Ubuntu (частично), Launchpad
Документация Хороша. Хороший man с кучей примеров. Хороша. Хороша.
Платформы
Плохая Windows-поддержка Кроссплатформенный Кроссплатформенный
Полезные особенности
git скорее скриптуем, чем расширяем, что с одной стороны хорошо, а с другой — плохо. Легко использовать из скрипта, например, все тесты можно сделать из bash. Весьма настраиваем в продвинутом администрировании:
  • Промежуточные области [5],
  • Заброшенные объекты [6],
  • detached heads[7],
  • plumbing vs porcelain[8],
  • reflogs [9].

Возможны локальные (внутрирепозитарные) ветки.

Robust Renaming. Robust Renaming. Поддержка легких checkouts (без истории). Bound branches. Возможны локальные (внутрирепозитарные) ветки. Patch Queue Manager (управление несколькими ветками, выполнение слияний для разработчиков)
Несколько крутых команд/расширений
  • git-stash (поддержка прерывания для краткого баг-фикса в другом проекте),
  • git-cherry-pick (для выбора отдельных коммитов, без полных веток),
  • git-rebase «Quilt-like changeset» типа Mercurial Queues).
  • git add -i аналог Mercurial RecordExtension.

Похоже тут есть все команды, которые вы бы могли захотеть.

  • RecordExtension — позволяет выбрать, какую часть изменений рабочего каталога вы собираетесь закоммитить.
  • Hg Shelve Extension — аналог git-stash: — интерактивно выбрает изменения, чтобы их «обойти».
  • Shelf — аналог git-stash: поддержка прерывания для краткого баг-фикса в другом проекте, но похоже помирает — последнее изменение в марте 2007.
  • bzr-dbus — для броадкаста ревизий и триггеров.
Проблемы

[10].

  • Настройка статического read-only HTTP-доступа слегка туповата (--bare и update-server-info).
  • Обработка файлов в Unicode (UTF-16).
  • Модель хранения. Git хранит каждый отдельный объект как отдельный файл, без обязательного вычисления дельты между ревизиями (это делает отдельная команда). Обязательно настройте, чтобы регулярно запускалась команда pack.
  • Мешанина из C, Perl и скриптов на bash, что очень затрудняет полноценный перенос на другие системы.
  • Renaming not handled as good as bzr. [FIXED]
  • Нет локальных веток, нужно использовать клон. Чтобы сэкономить место, Hg использует hardlinking, из-за чего возникают проблемы при pull (и еще под Windows).
  • Расширение «Forest» (для подмодулей) неродное, и плохо документировано.
GUI
Windows Уже не так все плохо[11] TortoiseHg Сложновато. TortoiseBzr (нет коммитов после Aug 2007, хотя проект пока жив)[12]. WildcatBZR[13].
Linux gitk, git-gui, tig, … TortoiseHg, Hgtk, hgct bzr-gtk, …
Инсталляция
Нужен либо cygwin либо специальный git-дистрибутив типа Git on MSys
Бесплатные хостинги
GitHub, gitorious FreeHg[14] Launchpad

Полно еще споров, например, от том, что каталоги в Bzr это ветки, а не контейнеры веток, как в git.

А то, что Mercurial использует внешние инструменты для слияний, критикуют стороники Bazaar. Это исправлено с версии Mercurial v1.0.

Есть и другие нексколько предвзятые сравнения от Bazaar-команды:

и соответственно, ответ на это:

Some User Statistics from Git Survey 2007

Обратите внимание, что в этом отчете не было возможности выбрать Ruby, неплохо было бы добавить его в опрос 2008 года[15].

Очень забавно, что треть людей используют DVCS взаимодействуюя с … 0 или 1 участниками![16].

GUI

Графический интерфейс ко всем системам хороший и примерно одинаковый, хотя gitk наверное эффективней.

TortoiseHg (с активированной опцией «folder watch») сильно тормозит на больших репозиториях, типа Мозилловского.

gitk on Linux
TortoiseHg on Windows
OliveGtk on Linux

Краткий взгляд на производительность (не претендует на истину в последней инстанции)

git по прежнему лидирует в битве за производительность, но Hg и Bzr существенно улучшились за последний год.

Обратите внимание, что Mercurial удваивает количество файлов в вашем репозитории (история хранится по-файлово в .hg/store/data). Это не шибко хороший выбор для Windows-систем, живущих на NTFS.

Также интересно видеть, что у git большое преимущество за счет операционной системы при выполнении команд. Hg и Bzr не тратят большую часть времени в системных вызовах, а Git проводит в них до 10-40 % времени. Возникает ожидаемый вопрос, о том, будет ли его производительность также хороша под Windows, где git-разработчики не имеют доступа к ко всем возможностям системы, как у них было под Linux.

Надо тестировать как отдельные слияния, так и слияние очередями, это связанная часть тестов.

Бенчмарки надо также гонять под Windows, ибо:

  1. Даже если ваш сервер работает на *nix, многие разработчики по прежнему живут под Windows, и основная DVCS-работа идет именно у разработчиков под Windows.
  2. Производительность под виндами точно должна отличаться.
DVCS-benchs.png

См. #Условия тестов

Когда?

Истории использования

Kelly O’Hair

Мне удалось расспросить Kelly O’Hair из Sun на тему его выбора Hg для OpenJDK.

Я прочел причины перехода с TeamWare на Mercurial, но остались вопросы. Вы просто последовали за выбором проекта OpenSolaris?

Ну, в некоторой степени да, но выбор для OpenSolaris стал также очень распространенным выбором в Sun для всех команд разработчиков желающих куда-нибудь смигрировать. Исследование для OpenSolaris было впечатляюще исчерпывающим, и их требования в точности совпадали с нашим. Ну а так как нам надо было куда-то переезжать с OpenJDK, так как TeamWare для open-source проекта не подходит, выбор Mercurial стал для нас вполне очевидным.

А вы пробовали освежить сравнение, и снова попробовать другие DVCS-системы (git, и т. п.)?

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

Так ведь отчету для OpenSolaris, который был опубликован в апреле 2006, уже два года стукнуло…

Да знаю я. Что-то поменялось, git обновился, но Земля вертится, и Mercurial тоже улучшился.

Какие особые проблемы встретились вам при миграции?

Права и владения файлами могут быть проблемой при разделении репозитария через сетевые файловые системы, типа NFS или UFS, так что мы в конец концов настроили нормальный сервер для работы с разделяемыми репозитариями, так лучше. Это несложно.

Еще мы столкнулись с проблемой, что использование триггеров (hooks) для отката или фильтрации push-изменений создает некоторое временное окно, в течении которого кто-то может вытащить (pull) изменения, которые должны быть откачены. В результате мы завели пару репозитариев — один для публикации изменений (push), другой — для извлечения (pull), и настроили между ними автоматическую синхронизацию, которая срабатывала после выполнения всех триггеров.

Использование лесов (forests) также приводило к проблемам, так как forest-push по сути набор отдельных push-операций, и если одна из них падает, то по уму надо бы откатить и все остальные. Однако никто этого не делает, все надеются на удачу. Впрочем, если репозитории в лесе достаточно независимы, это не будет реальной проблемой.

И как оно в повседневном использовании?

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

Понятие «рабочих наборов файлов» (working set files, с чем работает hg update) и необходимость интеграции changeset-ов, которые непонятно с чем сливать, путает народ. Также идея пересылать changeset-ы а не отдельные файлы, для некоторых людей приводит к проблеме «Почему нельзя просто переслать вот этот вот один файл?».

И чем это лучше, чем TeamWare?

Много-много-много быстрее чем TeamWare. В перспективе наши команды в Китае и России перейдут на единую инфраструктуру сборки и интеграции, так как им не потребуется держать зеркала для серверов интеграции. Обновления (pulls) очень быстры даже при медленных соединениях.

Состояние репозитория в Mercurial достаточно целостное, в отличие от TeamWare, который разрешал частичные workspac-ы, да и вообще TeamWare всего лишь дырявая авоська с индивидуально учитываемыми (SCCS-) файлами.

Понятие набора изменений (changeset) в TeamWare отсутствует, вместе с понятием определенного состояния репозитария целиком (то есть просто id-а, changeset-а).

Так есть что-то, что вам не хватает от TeamWare?

Ребятам не хватает оповещений через email, и еще истории транзакций «putback/bringover», хотя многое из этого можно вытащить из changeset. Возможно еще не хватает чего-то типа истории транзакций с репозиторием, но опять таки, почтовых архивов событий от Mercurial было бы достаточно.

Так Hg стал избранной Sun-ом СУВ для всего, включая внутренние проекты? Или Sun использоует ее только для публичных проектов, которым требуется открытость?

Да мы все проекты переносим, как внутренние, так и внешние, там где это имеет смысл разумеется. Вижу, что растет интерес решившихся на это проектов.

Pierre d’Herbemont

Также мне удалось расспросить на тему git и Pierre d’Herbemont из VLC.

Для начала, какую систему управления версиями вы использовали до git?

SVN, затем зеркало git-svn.

А когда вы мигрировали?

Мы открыли git-зеркало для svn-репозитория, чтобы облегчить участие VLC в Google Summer of Code. Это что предшествало этому. Затем мы полностью мигрировали на git 1-2го марта 2008.

А почему вы выбрали Git, а не его конкурентов?

По пунктам:

  • Лучше SVN: Git быстр. Ветка дешевая. Атомарные коммиты[17]. Можно делать rebasing относительно вершины другого дерева.
  • Лучше других DVCS: Проверенная пользовательская база (Linux Kernel). Я успешно использовал его, когда работал над Wine. Git sexy. И несколько ключевых разработчиков имело опыт с Git, и никто с Mercurial или чем-то подобным. Вобщем, тут не технические соображения сработали.

Были у вас какие-нибудь специфические проблемы с миграцией? А с ежедневным использованием?

Были проблемы с Trac и buildbot. У них поддержка Git была минимальной, особенно в их релизных версиях. Нам пришлось вытаскивать последние версии Builbot из исходников. Для Trac мы использовали убогий Git-плагин, который требовал Trac 0.11. Но Trac 0.11 еще не стабилен, там есть несколько известных утечек памяти, которые удерживают нас от переключения. В общем, мы ждем, когда они это починят…

Некоторым контрибьюторам требуется некоторое время, чтобы освоится с Git. Но через пару дней, все оказывается в порядке.

И многие git-ньюбы начинают действительно им наслаждаться.

Ну и что?

Выбор между распределенными и централизованными СУВ далек от простоты. DVCS определенно изменят практику вашей работы, как индивидуальной, так и командной.

Subversion, один из лидеров CVCS не сдается[18] и в производительности, и по функционалу и версия 1.5 уже должна быть неплохим компромиссом. Он может рассчитывать на существущих пользователей и дух простоты (за счет некоторых неудобств). В определенных случаях, как например в работе с большими бинарными файлами, Subversion должен быть лучше, чем DVCS так как пространство под рабочии копии остается неизменным. Также он эффективней, если вы активно используете частичные checkout-ы, (хотя если это происходит часто — это явная проблема недостаточного разбиения вашего проекта на модули).

Даже если вы сделаете свой выбор в пользу DVCS или CVCS, то будет сложно сравнить конкурентов в выбранной области, то есть реализация (например, команды) и соответственно их производительность, будет существенно отличаться. Нет ни одного теста производительности даже для общих операций. В этой жесткой битве, Bazaar потерял многих, очень важных и влиятельных ранних пользователей-энтузиастов (Mozilla, Solaris, OpenJDK) из-за плохой начальной производительности. Еще стоит заметить, что вебсайт Bazaar был слишком «маркетинговым»: публиковались не совсем честные сравнения с конкурентами, или тесты производительности по отдельным параметрам, в которых система превосходила конкурентов (см. например Space efficiency), при том, что не было сравнений по времени для ежедневных команд: diff, add, … Мне кажется, что хотя все эти три проекта стартовали примерно в одно и то же время, bzr с самого начала столкнулся с множеством проблем в производительности и архитектуре, что привело к тому, что он сейчас чуть менее зрел и надежен, чем его конкуренты.

И еще ранее не наблюдавшийся феномен — похоже, что многие делают выбор в зависимости от языка программирования сообщества:

  • Java и разработка связанная с Sun более интересуется Mercurial
  • C/Linux/Ruby/Rails -проекты сооблазняются git.

Надеюсь, эта статья вас просветила, и я всегда рад узнать о вашем опыте и иным отзывам!

Благодарности

Благодарю тех, кто любезно согласился на мое интервью: Kelly O’Hair, Pierre d’Herbemont. Ian Clatworthy за его оперативную помощь в преобразовании hg-репозитория Mozilla в Bzr.

IRC-каналы #git, #mercurial, #bzr на Freenode IRC, #mozilla на Mozilla IRC. Картинка с бегунами от Antonio Juez.

Случайные цитаты

Linus Torvald
  • «Subversion has been the most pointless project ever started».
  • «If you like using CVS, you should be in some kind of mental institution or somewhere else»[19].
Mark Shuttleworth (Ubuntu / Canonical Ltd.)
  • «Merging is the key to software developer collaboration».
Ian Clatworthy (Canonical / Bazaar)
  • «By 2011—2012, I predict this technology will be widely adopted and many teams will wonder how they once managed without it.»
Assaf Arkin в Git forking for fun and profit originally
«Apache built a great infrastructure around SVN, lots of sweat and tears went into making it happen, and at first I felt like we’re circumventing all of that. But the longer I thought about it, the more I realized that Git is just more social than SVN, and that’s exactly what Apache is about.»

Статья была обновлена 2008-05-12 после коммантариев от Ian Clatworthy и портала reedit.

  • Добавлены плагины Bzr и Windows GUI: rebase, …, Wildcat BZR, …
  • Добавлен Hg Shelve.
  • Обновлены SLOC для Hg (надо было еще учесть HTML-документацию, и оставил contrib, отвественный за поддержку Lisp и Tcl/Tk).
  • Обновлен размер репозитория для git после правильной команды repack (git repack -a -f -d --window=100 --depth=100 после которой размер стал постоянным) (Спасибо за комментарий dhamma vicaya).

Извинения

darcs, Monotone! Простите, что не рассматривал вас в этом сравнении, так как мне и так пришлось неслабо поработать чтобы собрать всю эту информацию и протестировать эти три DVCS. Да, странно получилось, что хотя вы самые старые на DVCS-сцене, актуальны теперь в основном те DVCS, которых я рассматривал тут (конечно, вряд ли эта ситуация измениться, но добро пожаловать пользователям darcs и Monotone с комментариями и рекламой!).

Ссылки

Distributed Revision Control Wikipedia page. Comparison of Revision Control Software Wikipedia page.

Ну и все URLы, так или иначе упомянутые в этой статье.

Шпаргалки

Условия тестов

Benchmark conditions

Тесты были проведены с использованием:

  • AMD Athlon™ 64 Processor 3500+
  • 1GB RAM
  • Linux Kubuntu 6.10 Edgy x86_64 with ext3 fs.

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

Использовались следующие версии:

Репозиторий содержал слепок из 12456 changeset-ов (от 20080303, 70853 полных версий из hg-репозитория), ≈30000 файлов из репозитория Mozilla (изначально они были в hg-формате и сконвертированы в git-репозиторий с помощью hg-fast-export.sh, и в Bazaar-репозиторий с помощью hg-fast-export.sh плюс плагин fast-import). Для репозиториев использовались файловые форматы по умолчанию, и размер репозитория git оставался постоянными, при запуске git-gc (что в общем, считается нормальным для свежемигрировавшего репозитория). Правился один файл (dom/src/base/nsDOMClassInfo.cpp), точно как в тесте проводимом Jst полтора года назад.

Примечания

  1. Появилось в версии 1.6 (примечание переводчика).
  2. Подпись происходит автоматически, но проверка полуручная http://bazaar-vcs.org/BzrGpgSigning
  3. Есть начиная с версии 1.14 http://doc.bazaar-vcs.org/bzr.1.14/en/release-notes/NEWS.html#bzr-1-14
  4. См.
  5. Промежуточные области, staging area или index — оригинальная концепция git, расширяющее стандартный двудольный подход РабочаяКопия-Репозитарий, еще одной промежуточной областью, в которой можно решать в какие именно изменения и в каком порядке пойдут в репозитарий: index1.png http://gitready.com/beginner/2009/01/18/the-staging-area.html
  6. Заброшенные объекты — dangling objects (слепки файлов, так и не ставших частью ни одного коммита, см. http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#dangling-objects)
  7. Detached heads — концепция работы не с последними версиями каждой ветви, а с произвольными коммитами на стволе. http://sitaramc.github.com/concepts/detached-head.html
  8. plumbing vs porcelain — вероятно автор имел ввиду существование низкоуровнего, сантехнически-канализационного уровня git, для построения собственного фреймворка управления версиями, так и высокоуровнего «мойдодырного» пользовательского уровня
  9. reflogs — http://www.kernel.org/pub/software/scm/git/docs/git-reflog.html
  10. См. например Test Case. Переводчик экспериментировал с
    • svn 1.6.6
    • bzr 2.0.2
    • hg 1.4.1
    • git 1.6.5.2
    • darcs 2.3.0
    git и svn тест не прошли.
  11. Появился и развивается «черепаховый» интерфейс — TortoiseGit
  12. Все развивается, более того, TortoiseBzr входит в стандартный windows-дистрибутив Bzr
  13. Увы, проект https://launchpad.net/wildcat-bzr похоже заброшен.
  14. http://freehg.org/ увы помер, но вместо него есть http://bitbucket.org/ !
  15. Ruby добавлен в отчет 2008 года, и показал там очень большой результат — второе место с 43 % (См. [1])
  16. Пошлая шутка от переводчика — «…согласно опросу среди любителей группового секса, 70 % имеет 1 полового партнера, а 29.9 % оставшихся — 0…»
  17. Удивительная претензия к SVN, в котором это есть (примечание переводчика).
  18. Мы сделали переводы этих статей, см. Категория:Статьи о Subversion
  19. См. наш перевод этой речи Линуса Торвальдса — Линус Торвальдс о GIT на Google Talks



Репликация: База Знаний «Заказных Информ Систем» → «Distributed Version Control Systems: A Not-So-Quick Guide Through»

Любые правки этой статьи будут перезаписаны при следующем сеансе репликации. Если у вас есть серьезное замечание по тексту статьи, запишите его в раздел «discussion».