{"id":7128,"date":"2013-03-14T17:10:51","date_gmt":"2013-03-14T22:10:51","guid":{"rendered":"http:\/\/mjtsai.com\/blog\/?p=7128"},"modified":"2013-03-16T14:03:12","modified_gmt":"2013-03-16T19:03:12","slug":"kiln-harmony","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2013\/03\/14\/kiln-harmony\/","title":{"rendered":"Kiln Harmony"},"content":{"rendered":"<p><a href=\"http:\/\/www.joelonsoftware.com\/items\/2013\/03\/11.html\">Joel Spolsky<\/a>:<\/p>\n<blockquote cite=\"http:\/\/www.joelonsoftware.com\/items\/2013\/03\/11.html\"><p>One of the biggest new features is Kiln Harmony, which lets you operate on Kiln repositories using either Git or Mercurial. So you can push changes to a Kiln repo using Git and then pull them using Mercurial. This means that you never have to decide whether you want to use Git or Mercurial. Religious war: averted.<\/p><\/blockquote>\n<p><a href=\"http:\/\/blog.fogcreek.com\/announcing-kiln-harmony-the-future-of-dvcs\/\">Benjamin Pollack<\/a>:<\/p>\n<blockquote cite=\"http:\/\/blog.fogcreek.com\/announcing-kiln-harmony-the-future-of-dvcs\/\"><p>There&rsquo;s a lot of magic that goes into Kiln Harmony. Rather than try to cram all that material into a little blog-post, we&rsquo;ll be running a series of articles in the coming days on how Kiln Harmony works. We&rsquo;ll take you under the covers into the details of our implementation, how we handle bizarre corner-cases, how we handle data formats that are more defined by their violations than their nominal structure, and more. <\/p>\n<\/blockquote>\n<p><a href=\"http:\/\/blog.fogcreek.com\/kiln-harmony-internals-the-basics\/\">Benjamin Pollack<\/a>:<\/p>\n<blockquote cite=\"http:\/\/blog.fogcreek.com\/kiln-harmony-internals-the-basics\/\"><p>Kiln Harmony had three iron requirements: it had to be repeatable (you couldn&rsquo;t get different repos on subsequent translation attempts), lossless (we couldn&rsquo;t discard data just because it was hard to preserve), and idempotent (a given Git commit or Mercurial changeset had to always generate exactly the same counterpart for a given repository, with no exceptions&mdash;even across Kiln installations or with a side-trip through a site like GitHub or Google Code). This suggested to us a pretty straightforward architecture: every single repository would be stored both as Git and Mercurial on-disk, and we would write a daemon that synchronized changes between the two repositories.<\/p><\/blockquote>\n<p>Though I&rsquo;m a happy FogBugz customer, I had previously ignored Kiln since I use Git. Now I&rsquo;m wondering whether it would be helpful for me.<\/p>\n<p>Update (2013-03-16): <a href=\"http:\/\/blog.fogcreek.com\/loving-the-code\/\">Benjamin Pollack<\/a>:<\/p>\n<blockquote cite=\"http:\/\/blog.fogcreek.com\/loving-the-code\/\"><p>We heard you, so beginning in Kiln Harmony, we&rsquo;ll start looking through changesets, code, and file names, beginning the second you start typing. Not only does this get you the results you want faster; the feedback you get as you type helps you figure out what you&rsquo;re looking for in the first place. On the Kiln team, we&rsquo;ve found instant searches so useful that we barely ever go to the &ldquo;real&rdquo; results page, and we bet you will, too.<\/p><\/blockquote>","protected":false},"excerpt":{"rendered":"<p>Joel Spolsky: One of the biggest new features is Kiln Harmony, which lets you operate on Kiln repositories using either Git or Mercurial. So you can push changes to a Kiln repo using Git and then pull them using Mercurial. This means that you never have to decide whether you want to use Git or [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"","apple_news_api_id":"","apple_news_api_modified_at":"","apple_news_api_revision":"","apple_news_api_share_url":"","apple_news_coverimage":0,"apple_news_coverimage_caption":"","apple_news_is_hidden":false,"apple_news_is_paid":false,"apple_news_is_preview":false,"apple_news_is_sponsored":false,"apple_news_maturity_rating":"","apple_news_metadata":"\"\"","apple_news_pullquote":"","apple_news_pullquote_position":"","apple_news_slug":"","apple_news_sections":"\"\"","apple_news_suppress_video_url":false,"apple_news_use_image_component":false,"footnotes":""},"categories":[4],"tags":[43,377,379,378,71,376],"class_list":["post-7128","post","type-post","status-publish","format-standard","hentry","category-programming-category","tag-fogbugz","tag-git","tag-kiln","tag-mercurial","tag-programming","tag-versioncontrol"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/7128","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/comments?post=7128"}],"version-history":[{"count":2,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/7128\/revisions"}],"predecessor-version":[{"id":7146,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/7128\/revisions\/7146"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=7128"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=7128"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=7128"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}