Изменения

Перейти к: навигация, поиск

Сравнение DVCS - несколько задач

107 байтов добавлено, 19:23, 28 ноября 2009
м
Mercurial
=== Mercurial ===
'''Mercurial''': было бы отлично (5-)! , но есть баги… Есть несколько расширений — [http://mercurial.selenic.com/wiki/HgSubversion hgsubversion], [http://pypi.python.org/pypi/hgsvn hgsvn], [http://mercurial.selenic.com/wiki/ConvertExtension convert], позволяющих работать с Subversion тем или иным образом, и не совместимых друг с другом. Самое вменяемое из них — '''hgsubversion''', хотя и заявлено, что но оно ещё сыроесыровато, и, к сожалению, не распространяется вместе с Mercurial’ом. Имеет фактически весь необходимый функционал — можно делать и <tt>push</tt>, и <tt>pull</tt> в/Тестировалась ревизия 500 из Subversion, можно клонировать SVN-репозиторий с сохранением веток и меток (правда, обязательно стандартное их расположение в корневых поддиректориях <tt>http:/trunk</tt>, <tt>bitbucket.org/branches<durin42/tt>, <tt>/tags</tt>), эти два метода совместимы, <tt>rebase</tt> также работает, а граф ветвлений сохраняется. Очень крут тот факт, что ветка, которая создавалась неполным копированием <tt>trunk</tt>'а, то есть, копированием некоторых его поддиректорий, успешно подцепилась в нужное место графа ветвлений. Ни Bazaar, ни Git этого не смоглиhgsubversion.
Вместо 5 всё-таки 5-, так как был обнаружен очень неприятный баг: Имеет основной необходимый функционал — можно делать и <tt>push </tt>, и <tt>pull</tt> в/из mercurialSubversion, можно клонировать SVN-копии репозитория без репозиторий с сохранением веток и меток (то есть вида просто одной директории) правда, обязательно стандартное их расположение в Subversion не работал вообще — [http:корневых поддиректориях <tt>/trunk</groups.google.comtt>, <tt>/groupbranches</hgsubversiontt>, <tt>/browse_threadtags</threadtt>), эти два метода совместимы, <tt>rebase</3749eb3cbf007855 обсуждение в группе hgsubversion]tt> работает, граф ветвлений сохраняется. К счастьюОчень крут тот факт, меня пропёрлочто ветка, я потратил час времени и баг этот пофиксил собственноручно — фикс очень простойкоторая создавалась неполным копированием <tt>trunk</tt>'а, на две строчкито есть, копированием некоторых его поддиректорий, успешно подцепилась в нужное место графа ветвлений. Ни Bazaar, ни Git этого не смогли. Поддержки svn:mergeinfo пока что нет, хотя она близится.
<div style="heightМинус расширения заключается в сырости — за время тестирования я нашёл уже несколько неприятных багов: 150px; overflow: scroll"* <tt>push<source lang="diff"/tt>из Mercurial--- hgsubversionклона репозитория без веток и меток (имеющего вид просто одного каталога) в Subversion не работал вообще — [http://pushmodgroups.py 2009-11-18 21:04:05google.697192616 +0300+++ com/group/hgsubversion/pushmodbrowse_thread/thread/3749eb3cbf007855 обсуждение в группе hgsubversion].py 2009К счастью, меня пропёрло, я потратил час времени и баг этот пофиксил собственноручно. [[hgsubversion-11fix-26 04:14:39.000000000 +0300@@ for-singledir-158,7 +158,7 @@ def commit(ui, repo.diff|Фикс]] очень простой, rev_ctxна две строчки, meta, baseи он уже находится в репозитории в виде ревизии r501 — за отзывчивость автору зачёт. file_data[file] = base_data* Течёт память, new_data, action  def svnpath(p):- return (что при клонировании '%s/%s' % (branch_path, p)).rstrip('/толстых')+ return ('%s/%s' % SVN-репозиториев (branch_pathнапример, p))[http://svn.strip('wikimedia.org/'svnroot/mediawiki/ репозитория MediaWiki] changeddirs = приводит к ошибкам <tt>Abort: out of memory</tt>, то есть нехватки памяти. Причина в дырявости [http://www.swig.org/ SWIG] for dSVN Python-библиотеке. Забавно, v1, v2 in extchangesчто аналогичная [http:@@ //www.swig.org/ SWIG] Perl-181библиотека ей,7 +181видимо,7 @@ def commit(uiне страдают, repo, rev_ctx, meta, base  new_target_files = [svnpathтак как Git этот репозиторий глотал (fпричём по 10 раз за раз) for f in file_data] for tfи не давился. ''Perl, ntf in zip(file_dataговорите, new_target_files):течёт? Ну хи- if tf in file_data:+ if tf in file_data and tf != ntf: file_data[ntf] = file_data[tf] if tf in props: props[ntf] = props[tf]хи, хи-хи.''* На ревизии 43380 MediaWiki <tt>hgsubversion</sourcett>свалился с ошибкой <tt>abort: phase3/divincludes/ConfigurationCache.php@a1335975fba6: not found in manifest!</ttНасколько я понимаю, он уже очень скоро попадёт в репозиторий, поэтому итоговая оценка почти не снижается. Тем не менее, такие грабли можно расценить как показатель некой «сырости» продукта — об этом всё-таки надо помнить.
Остальные два экстенжна «нинужны»: <tt>hgsvn</tt> — нечто более старое, работает сбоку от общего механизма, тоже позволяет делать push и pull, но не клонирует весь репозиторий, а только извлекает (checkout’ит) последнюю версию, чтобы далее можно было использовать Subversion и Mercurial вместе. Ну и конечно, оно не совместимо с <tt>hgsubversion</tt>. <tt>convert</tt> же предназначен для конвертации истории проекта из нескольких различных систем контроля версий в Mercurial, ни черта не совместим ни с <tt>hgsvn</tt>, ни с <tt>hgsubversion</tt> и не сохраняет граф ветвлений. Зато, правда, поддерживает возможность использования других имён поддиректорий <tt>trunk/branches/tags</tt>.

Навигация