<?xml version='1.0' encoding='utf-8' ?>

<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>wizzard</title>
  <link>https://wizzard.dreamwidth.org/</link>
  <description>wizzard - Dreamwidth Studios</description>
  <lastBuildDate>Fri, 21 Mar 2014 15:23:42 GMT</lastBuildDate>
  <generator>LiveJournal / Dreamwidth Studios</generator>
  <lj:journal>wizzard</lj:journal>
  <lj:journaltype>personal</lj:journaltype>
  <image>
    <url>https://v2.dreamwidth.org/9951212/754492</url>
    <title>wizzard</title>
    <link>https://wizzard.dreamwidth.org/</link>
    <width>100</width>
    <height>100</height>
  </image>

<item>
  <guid isPermaLink='true'>https://wizzard.dreamwidth.org/361458.html</guid>
  <pubDate>Fri, 21 Mar 2014 15:23:42 GMT</pubDate>
  <title>Обобщение 3-way merge</title>
  <link>https://wizzard.dreamwidth.org/361458.html</link>
  <description>Допустим, у нас есть функция 3-way merge, которая из трех версий O[rigin], A, B однозначно&lt;sup&gt;1&lt;/sup&gt; делает версию C&lt;br /&gt;&lt;br /&gt;Как нетривиально&lt;sup&gt;2&lt;/sup&gt; обобщить эту функцию на такие случаи:&lt;br /&gt;&lt;br /&gt;1. есть R1 (предок) и 3 головы (Ra:R1, Rb:R1, Rc:R1)&lt;br /&gt;&lt;br /&gt;2. есть R1 (предок), Ra:R1, Rb:R1, и две головы (Rx:[Rb,Ra] и Rc:R1)&lt;br /&gt;&lt;br /&gt;Как-то так. Мне главное чтоб сохранилось свойство консистентности, т.е. чтобы &quot;в итоге&quot; все, получив все наборы ревизий, пришли без дополнительных коммуникаций к одинаковому исходу.&lt;br /&gt;&lt;br /&gt;Т.е. чтобы если ПОСЛЕ мержа примера (1) участники узнали что кто-то вбросил голову Ry:[Ra,Rb] то оно смержилось в то же самое, во что смержится пример (2)&lt;br /&gt;&lt;br /&gt;В терминах git/hg: мне надо чтобы после того как все один раз push --force, дождались когда пушнут все остальные и pull - автомерж выдал одинаковый результат&lt;br /&gt;&lt;br /&gt;В качестве дополнительной инфы у ревизии есть автор, все ревизии от одного автора упорядочены по времени &quot;до/после&quot;, но время ревизий двух разных авторов сравнивать нельзя. Т.е. vector clock.&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;1. т.е. merge(O,A,B) === merge(O,B,A), что достигнуто, например, лексикографическим упорядочиванием A, B по хэшу от их содержимого.&lt;br /&gt;НО мерж не коммутативен, т.е. m(A,m(B,C))!=m(m(A,B),C)&lt;br /&gt;2. решению задачи удовлетворяет тривиальная функция которая всегда возвращает null, но это, очевидно, не то)&lt;br /&gt;&lt;br /&gt;UPD: предложили посмотреть &lt;a href=&quot;http://en.wikipedia.org/wiki/C3_linearization&quot;&gt;http://en.wikipedia.org/wiki/C3_linearization&lt;/a&gt; , &lt;a href=&quot;http://en.wikibooks.org/wiki/Understanding_Darcs/Patch_theory&quot;&gt;http://en.wikibooks.org/wiki/Understanding_Darcs/Patch_theory&lt;/a&gt; , смотрю&lt;br /&gt;UPD2: да, я знаю про Operational Transformation и Commutative Replicated Data Types, это скорее второе.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=wizzard&amp;ditemid=361458&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://wizzard.dreamwidth.org/361458.html</comments>
  <category>dvcs</category>
  <category>merge</category>
  <category>вопрос</category>
  <category>crdt</category>
  <category>ot</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://wizzard.dreamwidth.org/251661.html</guid>
  <pubDate>Thu, 22 Nov 2012 00:18:16 GMT</pubDate>
  <title>git vs mercurial</title>
  <link>https://wizzard.dreamwidth.org/251661.html</link>
  <description>Накопился определенный опыт работы с одним и с другим.&lt;br /&gt;&lt;br /&gt;В общем:&lt;br /&gt;Git: it works, but you have to learn it, tune it and tweak it.&lt;br /&gt;&lt;br /&gt;Mercurial: it just works. you can tune it if you want, but it just works.&lt;br /&gt;&lt;br /&gt;Еще с гитом я успел повлетать в пачку неприятных моментов когда пуш/пулл тупо не проходили, или репозиторий корраптился. Хорошо, что есть reflog. &lt;br /&gt;&lt;br /&gt;Плюс, как показала практика, в меркуриал можно успешно засунуть TFS репозиторий с историей весом несколько Gb, и это не вызывает каких-то тормозов вообще. Очень, очень хорошо. Да, не факт что это нормальная ситуация, но легаси есть легаси, его не изменить.&lt;br /&gt;&lt;br /&gt;В гите такое же действие приходит к тому что эмм надо долго шаманить с настройками, прежде чем пройдут особо крупные коммиты. Можно? Можно. Удобно? Не очень.&lt;br /&gt;&lt;br /&gt;Хотя &quot;непроходимость коммитов&quot; случалась даже на мелких репозиториях, если делать рефакторинг.&lt;br /&gt;&lt;br /&gt;С меркуриалом &quot;history is sacred&quot;. Кому-то это нравится, кому-то нет. Мне - нравится.&lt;br /&gt;&lt;br /&gt;Гит, напротив, должен быть приятен тем, кто подрабатывает в министерстве правды и правит коммиты задним числом.&lt;br /&gt;&lt;br /&gt;Итого, для себя для продакшена - меркуриал. Гит неплох, но отвлекает. Меркуриал - просто и естественно становится частью рабочего процесса. &lt;br /&gt;&lt;br /&gt;Плюс, &quot;windows is a first-class citizen for mercurial&quot;. Hg Workbench на первый взгляд страшен, но уже через пару дней реально удобная тулза. Тестеров и джуниоров она тоже не пугает, что немаловажно.&lt;br /&gt;&lt;br /&gt;А, да. SVN остается для особо сикретне проектов, где важна необходимость ограничивать доступ с гранулярностью до папок и оправдан оверхед на неудобные мержи.&lt;br /&gt;&lt;br /&gt;Как-то вот так.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=wizzard&amp;ditemid=251661&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://wizzard.dreamwidth.org/251661.html</comments>
  <category>программирование</category>
  <category>dvcs</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
</channel>
</rss>
