<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Some more git, mercurial, and darcs</title>
	<atom:link href="http://changelog.complete.org/archives/596-some-more-git-mercurial-and-darcs/feed" rel="self" type="application/rss+xml" />
	<link>http://changelog.complete.org/archives/596-some-more-git-mercurial-and-darcs</link>
	<description>Viewpoints on technology, society, and government</description>
	<lastBuildDate>Sun, 05 Feb 2012 03:11:59 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: Martin</title>
		<link>http://changelog.complete.org/archives/596-some-more-git-mercurial-and-darcs/comment-page-1#comment-1504</link>
		<dc:creator>Martin</dc:creator>
		<pubDate>Sat, 21 Apr 2007 04:10:59 +0000</pubDate>
		<guid isPermaLink="false">http://changelog2.complete.org/archives/596-some-more-git-mercurial-and-darcs.html#comment-1504</guid>
		<description>Bazaar makes it easy to send bundles that preserve history:

  bzr merge-directive 

generates a bundle containing all the new changes compared to the parent branch.  In the typical use of branching to implement a feature or fix which is then integrated back in, you don&#039;t need to give any other arguments.  

People often save this to a file and then post through their regular mail agent, but you can also send it directly with --mail-to.

I believe git added support for this after a crossposted thread which discussed how well it worked in Bazaar.</description>
		<content:encoded><![CDATA[<p>Bazaar makes it easy to send bundles that preserve history:</p>
<p>  bzr merge-directive </p>
<p>generates a bundle containing all the new changes compared to the parent branch.  In the typical use of branching to implement a feature or fix which is then integrated back in, you don&#8217;t need to give any other arguments.  </p>
<p>People often save this to a file and then post through their regular mail agent, but you can also send it directly with &#8211;mail-to.</p>
<p>I believe git added support for this after a crossposted thread which discussed how well it worked in Bazaar.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Thomas Arendsen Hein</title>
		<link>http://changelog.complete.org/archives/596-some-more-git-mercurial-and-darcs/comment-page-1#comment-1488</link>
		<dc:creator>Thomas Arendsen Hein</dc:creator>
		<pubDate>Thu, 29 Mar 2007 07:25:57 +0000</pubDate>
		<guid isPermaLink="false">http://changelog2.complete.org/archives/596-some-more-git-mercurial-and-darcs.html#comment-1488</guid>
		<description>RevlogNG is just a different on-disk representation of the same data structure. While older hg versions can&#039;t read this directly, you can use &#039;hg serve&#039; on this repo and pull with an old client.

If you use bundle repositories with hg (which are again just a different representation of the same data), you can shrink the size of current e2fsprogs repo to 7948K, though using it is only partly wired to the UI:

cd e2fsprogs
hg bundle --base null ../e2fsprogs.hg
hg init ../dummy
cd ../dummy
hg -R ../e2fsprogs.hs &lt;something&gt;

One &quot;small&quot; downside is, that the bundle repository is read-only, but that doesn&#039;t matter if we&#039;re just comparing repository sizes.</description>
		<content:encoded><![CDATA[<p>RevlogNG is just a different on-disk representation of the same data structure. While older hg versions can&#8217;t read this directly, you can use &#8216;hg serve&#8217; on this repo and pull with an old client.</p>
<p>If you use bundle repositories with hg (which are again just a different representation of the same data), you can shrink the size of current e2fsprogs repo to 7948K, though using it is only partly wired to the UI:</p>
<p>cd e2fsprogs<br />
hg bundle &#8211;base null ../e2fsprogs.hg<br />
hg init ../dummy<br />
cd ../dummy<br />
hg -R ../e2fsprogs.hs <something></p>
<p>One &#8220;small&#8221; downside is, that the bundle repository is read-only, but that doesn&#8217;t matter if we&#8217;re just comparing repository sizes.</something></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Frank Bauer</title>
		<link>http://changelog.complete.org/archives/596-some-more-git-mercurial-and-darcs/comment-page-1#comment-1484</link>
		<dc:creator>Frank Bauer</dc:creator>
		<pubDate>Tue, 27 Mar 2007 17:12:30 +0000</pubDate>
		<guid isPermaLink="false">http://changelog2.complete.org/archives/596-some-more-git-mercurial-and-darcs.html#comment-1484</guid>
		<description>Yes, but only for conflicting patches. The rest will remain the same nice pool.</description>
		<content:encoded><![CDATA[<p>Yes, but only for conflicting patches. The rest will remain the same nice pool.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: beza1e1</title>
		<link>http://changelog.complete.org/archives/596-some-more-git-mercurial-and-darcs/comment-page-1#comment-1483</link>
		<dc:creator>beza1e1</dc:creator>
		<pubDate>Tue, 27 Mar 2007 08:56:50 +0000</pubDate>
		<guid isPermaLink="false">http://changelog2.complete.org/archives/596-some-more-git-mercurial-and-darcs.html#comment-1483</guid>
		<description>Darcs will change to a &quot;tree of changesets&quot;, because you need it for some merging techniques or something.</description>
		<content:encoded><![CDATA[<p>Darcs will change to a &#8220;tree of changesets&#8221;, because you need it for some merging techniques or something.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Theodore Ts'o</title>
		<link>http://changelog.complete.org/archives/596-some-more-git-mercurial-and-darcs/comment-page-1#comment-1481</link>
		<dc:creator>Theodore Ts'o</dc:creator>
		<pubDate>Tue, 27 Mar 2007 03:57:22 +0000</pubDate>
		<guid isPermaLink="false">http://changelog2.complete.org/archives/596-some-more-git-mercurial-and-darcs.html#comment-1481</guid>
		<description>Good point, yes, I hadn&#039;t converted e2fsprogs to use revlog-NG.  I had forgotten about that; I had run across the new format a week or two, and wasn&#039;t sure what the compatibility story was with revlog NG, since I run bleeding-edge development tip for both hg and git, and I couldn&#039;t find any documentation about what the backwards compatibility impacts might be of using the new format.   But yes, it would be much fairer to use the revlog-HG size when comparing against git (although if you are willing to set repack.UseDeltaBaseOffset, which will make your local repo directory incompatible with git versions older than 1.4.3, the git repository shrinks from 11,996k to 10,740k, and if you pass --window=100 --depth=30 and manually run git-repack, you can push the repository size down to 9,988k, although with the tradeoff that certain repository operations will be slowed down --- although with some of the new optimizations in git 1.5.1, not by as much, so perhaps we need to revisit the default settings of --window and --depth when repacking.)

The trouble with &quot;hg strip&quot; is that it can only strip the most recent revisions that are closest to the tip.   If you create internal branches in hg, and then later commit or pull new revisions on top of your changes, and then you want to drop the internal drop, I believe right now the only way to do it require rewriting the whole repository.</description>
		<content:encoded><![CDATA[<p>Good point, yes, I hadn&#8217;t converted e2fsprogs to use revlog-NG.  I had forgotten about that; I had run across the new format a week or two, and wasn&#8217;t sure what the compatibility story was with revlog NG, since I run bleeding-edge development tip for both hg and git, and I couldn&#8217;t find any documentation about what the backwards compatibility impacts might be of using the new format.   But yes, it would be much fairer to use the revlog-HG size when comparing against git (although if you are willing to set repack.UseDeltaBaseOffset, which will make your local repo directory incompatible with git versions older than 1.4.3, the git repository shrinks from 11,996k to 10,740k, and if you pass &#8211;window=100 &#8211;depth=30 and manually run git-repack, you can push the repository size down to 9,988k, although with the tradeoff that certain repository operations will be slowed down &#8212; although with some of the new optimizations in git 1.5.1, not by as much, so perhaps we need to revisit the default settings of &#8211;window and &#8211;depth when repacking.)</p>
<p>The trouble with &#8220;hg strip&#8221; is that it can only strip the most recent revisions that are closest to the tip.   If you create internal branches in hg, and then later commit or pull new revisions on top of your changes, and then you want to drop the internal drop, I believe right now the only way to do it require rewriting the whole repository.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Theodore Ts'o</title>
		<link>http://changelog.complete.org/archives/596-some-more-git-mercurial-and-darcs/comment-page-1#comment-1480</link>
		<dc:creator>Theodore Ts'o</dc:creator>
		<pubDate>Tue, 27 Mar 2007 03:24:04 +0000</pubDate>
		<guid isPermaLink="false">http://changelog2.complete.org/archives/596-some-more-git-mercurial-and-darcs.html#comment-1480</guid>
		<description>Oh, one more thought.  Neither git or hg is doing anything more intelligent with merging other than using 3-way merges.  For example, neither is using the Codeville merge algorithm, which works out to be equivalent to what Bitkeeper is using.   However, git does have one trick up its sleeve which as far as I know hg doesn&#039;t have today.   

If you create the directory .git/rr-cache, then if you have a long-lived branch where you are developing some feature that isn&#039;t quite ready for mainline, but while you are developing it, you are constantly pulling and merging from the mainline, this can result in the same conflicts needing to be resolved over and over again.  This is sometimes called &quot;cross-cross merges&quot;, and if the .git/rr-cache directory is created, git will remember how particular merge conflicts were resolved, and try to resolve them the same way in the future, automatically.  More information about this can be found &lt;A href=&quot;http://www.kernel.org/pub/software/scm/git/docs/git-rerere.html   &quot;&gt;here&lt;/a&gt;.</description>
		<content:encoded><![CDATA[<p>Oh, one more thought.  Neither git or hg is doing anything more intelligent with merging other than using 3-way merges.  For example, neither is using the Codeville merge algorithm, which works out to be equivalent to what Bitkeeper is using.   However, git does have one trick up its sleeve which as far as I know hg doesn&#8217;t have today.   </p>
<p>If you create the directory .git/rr-cache, then if you have a long-lived branch where you are developing some feature that isn&#8217;t quite ready for mainline, but while you are developing it, you are constantly pulling and merging from the mainline, this can result in the same conflicts needing to be resolved over and over again.  This is sometimes called &#8220;cross-cross merges&#8221;, and if the .git/rr-cache directory is created, git will remember how particular merge conflicts were resolved, and try to resolve them the same way in the future, automatically.  More information about this can be found <a href="http://www.kernel.org/pub/software/scm/git/docs/git-rerere.html   ">here</a>.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: John Goerzen</title>
		<link>http://changelog.complete.org/archives/596-some-more-git-mercurial-and-darcs/comment-page-1#comment-1479</link>
		<dc:creator>John Goerzen</dc:creator>
		<pubDate>Tue, 27 Mar 2007 03:21:20 +0000</pubDate>
		<guid isPermaLink="false">http://changelog2.complete.org/archives/596-some-more-git-mercurial-and-darcs.html#comment-1479</guid>
		<description>Hi Ted,

Thanks as always for your feedback.

Regarding #1, I hg cloned your e2fsprogs repo and get 15,676K in Mercurial.  I wonder if your repo hasn&#039;t yet switched to hg&#039;s revlog-NG?  Still bigger than git, but about half the difference as before.

Regarding #6, the transplant extension does the rebase.  hg strip can prune of unwanted revisions out of hg trees as well.</description>
		<content:encoded><![CDATA[<p>Hi Ted,</p>
<p>Thanks as always for your feedback.</p>
<p>Regarding #1, I hg cloned your e2fsprogs repo and get 15,676K in Mercurial.  I wonder if your repo hasn&#8217;t yet switched to hg&#8217;s revlog-NG?  Still bigger than git, but about half the difference as before.</p>
<p>Regarding #6, the transplant extension does the rebase.  hg strip can prune of unwanted revisions out of hg trees as well.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Theodore Tso</title>
		<link>http://changelog.complete.org/archives/596-some-more-git-mercurial-and-darcs/comment-page-1#comment-1478</link>
		<dc:creator>Theodore Tso</dc:creator>
		<pubDate>Tue, 27 Mar 2007 02:58:33 +0000</pubDate>
		<guid isPermaLink="false">http://changelog2.complete.org/archives/596-some-more-git-mercurial-and-darcs.html#comment-1478</guid>
		<description>1.  Actually, in terms of speed, usually git is slightly faster than hg.  There are two reasons for this.  First, git repositories now are more disk efficient than hg.  An e2fsprogs repository in .hg is currently 20,420k, while the same repository converted to git takes 11,996k.  So there is simply less disk to read.  In addition, there are a number of optimizations which are based on git&#039;s tree/subtree revision control model which doesn&#039;t work as well given how hg stores each revision separately on a per-file basis; git can determine that two subtrees are identical by comparing a single SHA1 hash, whereas hg requires checking every single file&#039;s SHA1 hash.

2.  Simplicity --- no contest.  Hg is simpler, but part of this is it has less functionality.  Still, if it has the functionality you care about, the lack of extra commands is a virtue.

3.  &quot;git bundle&quot; will be in git 1.5.1, which will be releases shortly; git 1.5.1-rc2 is quite stable, and is available already today.

4.  &quot;git mergetool&quot; was written by yours truly, and will also be in git 1.5.1.   It has pretty much all of the functionality of hg&#039;s merge integration, with the exception of MacOS&#039;s opendiff/FileMerge, for which someone has submitted patches but I haven&#039;t had a chance to download MacOS&#039;s developers tool so I can test the patch.

5.  The mercurial community is probably more receptive to ideas, yes.  The active community on the git list seems slightly larger, but that&#039;s hard to judge.  The git list is definitely more active.  As far as being receptive to new ideas, part of it is that Linus has pretty strong ideas over what will work and not with SCM systems.   If you try to do something that doesn&#039;t agree with his philosphy, he isn&#039;t afraid to say you&#039;re wrong.  The thing is, very often he&#039;s right, although sometimes I wish he would do so with a tad bit more diplomacy. 

6.  Does mercurial have rebase functionality at all?   I didn&#039;t think it did.  You can pull a branch and merge it into tip of another branch, and it won&#039;t lose the history, yes, but you can do the exact same thing with git.   &quot;git rebase&quot; is an option, but you don&#039;t have to use it.

I&#039;ll note that sometimes trashing history is specifically one of the things that various development processes actually want.  For example, requests have come from more than one project to both mercurial and git that they implement &quot;bk collapse&quot;, which takes a series of commits, and makes them disappear into a single commit.  It turns out it&#039;s much harder to implement this in hg, because of how it stores its file-level revision information.   Fundamentally, hg makes it harder to drop changesets, which can either be viewed as a feature or a bug.  Myself, I like to be able to do development in internal branches, and then drop them later on without penalty, and that&#039;s something which in the hg model is best done by cloning an entire separate repository.  But everyone&#039;s workflow is different....</description>
		<content:encoded><![CDATA[<p>1.  Actually, in terms of speed, usually git is slightly faster than hg.  There are two reasons for this.  First, git repositories now are more disk efficient than hg.  An e2fsprogs repository in .hg is currently 20,420k, while the same repository converted to git takes 11,996k.  So there is simply less disk to read.  In addition, there are a number of optimizations which are based on git&#8217;s tree/subtree revision control model which doesn&#8217;t work as well given how hg stores each revision separately on a per-file basis; git can determine that two subtrees are identical by comparing a single SHA1 hash, whereas hg requires checking every single file&#8217;s SHA1 hash.</p>
<p>2.  Simplicity &#8212; no contest.  Hg is simpler, but part of this is it has less functionality.  Still, if it has the functionality you care about, the lack of extra commands is a virtue.</p>
<p>3.  &#8220;git bundle&#8221; will be in git 1.5.1, which will be releases shortly; git 1.5.1-rc2 is quite stable, and is available already today.</p>
<p>4.  &#8220;git mergetool&#8221; was written by yours truly, and will also be in git 1.5.1.   It has pretty much all of the functionality of hg&#8217;s merge integration, with the exception of MacOS&#8217;s opendiff/FileMerge, for which someone has submitted patches but I haven&#8217;t had a chance to download MacOS&#8217;s developers tool so I can test the patch.</p>
<p>5.  The mercurial community is probably more receptive to ideas, yes.  The active community on the git list seems slightly larger, but that&#8217;s hard to judge.  The git list is definitely more active.  As far as being receptive to new ideas, part of it is that Linus has pretty strong ideas over what will work and not with SCM systems.   If you try to do something that doesn&#8217;t agree with his philosphy, he isn&#8217;t afraid to say you&#8217;re wrong.  The thing is, very often he&#8217;s right, although sometimes I wish he would do so with a tad bit more diplomacy. </p>
<p>6.  Does mercurial have rebase functionality at all?   I didn&#8217;t think it did.  You can pull a branch and merge it into tip of another branch, and it won&#8217;t lose the history, yes, but you can do the exact same thing with git.   &#8220;git rebase&#8221; is an option, but you don&#8217;t have to use it.</p>
<p>I&#8217;ll note that sometimes trashing history is specifically one of the things that various development processes actually want.  For example, requests have come from more than one project to both mercurial and git that they implement &#8220;bk collapse&#8221;, which takes a series of commits, and makes them disappear into a single commit.  It turns out it&#8217;s much harder to implement this in hg, because of how it stores its file-level revision information.   Fundamentally, hg makes it harder to drop changesets, which can either be viewed as a feature or a bug.  Myself, I like to be able to do development in internal branches, and then drop them later on without penalty, and that&#8217;s something which in the hg model is best done by cloning an entire separate repository.  But everyone&#8217;s workflow is different&#8230;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Codeless</title>
		<link>http://changelog.complete.org/archives/596-some-more-git-mercurial-and-darcs/comment-page-1#comment-1477</link>
		<dc:creator>Codeless</dc:creator>
		<pubDate>Mon, 26 Mar 2007 23:19:33 +0000</pubDate>
		<guid isPermaLink="false">http://changelog2.complete.org/archives/596-some-more-git-mercurial-and-darcs.html#comment-1477</guid>
		<description>Is Mercurial really fast on big projects?

Clone OpenSolaris. Do &quot;hg log&quot; and find the last two changeset ids. Now do &quot;hg up &lt;id&gt;&quot; to move between them.

That&#039;s around 5 seconds even if only one file has changed. That doesn&#039;t seem fast to me. Git is much quicker.

Other than that Mercurial looks really promising.</description>
		<content:encoded><![CDATA[<p>Is Mercurial really fast on big projects?</p>
<p>Clone OpenSolaris. Do &#8220;hg log&#8221; and find the last two changeset ids. Now do &#8220;hg up <id>&#8221; to move between them.</p>
<p>That&#8217;s around 5 seconds even if only one file has changed. That doesn&#8217;t seem fast to me. Git is much quicker.</p>
<p>Other than that Mercurial looks really promising.</id></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Peter Baumann</title>
		<link>http://changelog.complete.org/archives/596-some-more-git-mercurial-and-darcs/comment-page-1#comment-1476</link>
		<dc:creator>Peter Baumann</dc:creator>
		<pubDate>Mon, 26 Mar 2007 20:16:57 +0000</pubDate>
		<guid isPermaLink="false">http://changelog2.complete.org/archives/596-some-more-git-mercurial-and-darcs.html#comment-1476</guid>
		<description>git supports bundles, too. AFAIK it is only in the development version and not yet released. See http://www.kernel.org/pub/software/scm/git/docs/git-bundle.html</description>
		<content:encoded><![CDATA[<p>git supports bundles, too. AFAIK it is only in the development version and not yet released. See <a href="http://www.kernel.org/pub/software/scm/git/docs/git-bundle.html" rel="nofollow">http://www.kernel.org/pub/software/scm/git/docs/git-bundle.html</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mike</title>
		<link>http://changelog.complete.org/archives/596-some-more-git-mercurial-and-darcs/comment-page-1#comment-1475</link>
		<dc:creator>Mike</dc:creator>
		<pubDate>Mon, 26 Mar 2007 19:45:20 +0000</pubDate>
		<guid isPermaLink="false">http://changelog2.complete.org/archives/596-some-more-git-mercurial-and-darcs.html#comment-1475</guid>
		<description>I am really getting used to your great articles about hg, bzr, git and darcs :)


Again great!</description>
		<content:encoded><![CDATA[<p>I am really getting used to your great articles about hg, bzr, git and darcs :)</p>
<p>Again great!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Frank Bauer</title>
		<link>http://changelog.complete.org/archives/596-some-more-git-mercurial-and-darcs/comment-page-1#comment-1474</link>
		<dc:creator>Frank Bauer</dc:creator>
		<pubDate>Mon, 26 Mar 2007 18:12:29 +0000</pubDate>
		<guid isPermaLink="false">http://changelog2.complete.org/archives/596-some-more-git-mercurial-and-darcs.html#comment-1474</guid>
		<description>I also prefer Mercurial to tla/bzr/git, but one thing I hate is the need to &#039;hg merge&#039; after your 2 branches differ by a single (nonconflicting!) changeset.

Darcs is the clear winner in this one. I wonder why is it the only one vcs that does not use the &#039;tree of changesets&#039;, but the superb &#039;pool of changesets&#039;.</description>
		<content:encoded><![CDATA[<p>I also prefer Mercurial to tla/bzr/git, but one thing I hate is the need to &#8216;hg merge&#8217; after your 2 branches differ by a single (nonconflicting!) changeset.</p>
<p>Darcs is the clear winner in this one. I wonder why is it the only one vcs that does not use the &#8216;tree of changesets&#8217;, but the superb &#8216;pool of changesets&#8217;.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

