<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.3.3" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>
<channel>
	<title>Comments on: Happenings in the VCS world</title>
	<link>http://blogs.gnome.org/newren/2008/03/01/happenings-in-the-vcs-world/</link>
	<description>Just another GNOME Blogs weblog</description>
	<pubDate>Sat, 30 Aug 2008 05:56:33 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
		<item>
		<title>By: Emanuele aina</title>
		<link>http://blogs.gnome.org/newren/2008/03/01/happenings-in-the-vcs-world/#comment-281</link>
		<dc:creator>Emanuele aina</dc:creator>
		<pubDate>Mon, 17 Mar 2008 13:04:25 +0000</pubDate>
		<guid>http://blogs.gnome.org/newren/2008/03/01/happenings-in-the-vcs-world/#comment-281</guid>
		<description>Mercurial does support non-versioned tags with the "--local" switch (which puts them in .hg/hgtags instead of .hgtags).
Of course they are not pushed/pulled as in this case is not clear what to do when there are conflicts (two users have the same tag but pointing to different revisions).
Having them in the history is useful to see when they are introduced, who introduced them, if they have been changed and to make sure noone messed with them (and if someone did, then it is very simple to revert these changes).
Just adding an options to push non-versioned tags would make GIT users happy?</description>
		<content:encoded><![CDATA[<p>Mercurial does support non-versioned tags with the &#8220;&#8211;local&#8221; switch (which puts them in .hg/hgtags instead of .hgtags).<br />
Of course they are not pushed/pulled as in this case is not clear what to do when there are conflicts (two users have the same tag but pointing to different revisions).<br />
Having them in the history is useful to see when they are introduced, who introduced them, if they have been changed and to make sure noone messed with them (and if someone did, then it is very simple to revert these changes).<br />
Just adding an options to push non-versioned tags would make GIT users happy?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jakub Narebski</title>
		<link>http://blogs.gnome.org/newren/2008/03/01/happenings-in-the-vcs-world/#comment-277</link>
		<dc:creator>Jakub Narebski</dc:creator>
		<pubDate>Sun, 16 Mar 2008 22:22:58 +0000</pubDate>
		<guid>http://blogs.gnome.org/newren/2008/03/01/happenings-in-the-vcs-world/#comment-277</guid>
		<description>IMHO Mercurial simply got tags and [named in-repository] branches (with localbranch extension) *wrong*, and Git got it right. Tags and branches are pointers (references) to the nodes in DAG of revisions: tags are "constant" pointers, while branches are "live" pointers, points of growth. This design made me easy to understand what branches are; something CVS was terrible about (branching in CVS, bleh!)

I agree with gebi that using in-tree .hgtags file for tags which are (and must be) non-versioned, and doing the whole dance with taking most recent and not from manifest version etc. are just an error in design.

BTW. I disagree that Bazaar is not good for multiple branch workflow: you can clone branch (repository) and have it share repository data with parent, which is something in between multi-branch Git repository and Git alternates for repsitory object database.</description>
		<content:encoded><![CDATA[<p>IMHO Mercurial simply got tags and [named in-repository] branches (with localbranch extension) *wrong*, and Git got it right. Tags and branches are pointers (references) to the nodes in DAG of revisions: tags are &#8220;constant&#8221; pointers, while branches are &#8220;live&#8221; pointers, points of growth. This design made me easy to understand what branches are; something CVS was terrible about (branching in CVS, bleh!)</p>
<p>I agree with gebi that using in-tree .hgtags file for tags which are (and must be) non-versioned, and doing the whole dance with taking most recent and not from manifest version etc. are just an error in design.</p>
<p>BTW. I disagree that Bazaar is not good for multiple branch workflow: you can clone branch (repository) and have it share repository data with parent, which is something in between multi-branch Git repository and Git alternates for repsitory object database.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Emanuele aina</title>
		<link>http://blogs.gnome.org/newren/2008/03/01/happenings-in-the-vcs-world/#comment-273</link>
		<dc:creator>Emanuele aina</dc:creator>
		<pubDate>Sun, 16 Mar 2008 16:52:49 +0000</pubDate>
		<guid>http://blogs.gnome.org/newren/2008/03/01/happenings-in-the-vcs-world/#comment-273</guid>
		<description>Elijah: mercurial named branches are quite a bit different from GIT branches, and they are an alternative to having repositories in different directories for very long lived branches (e.g. stable vs. trunk).

From my understanding of GIT, its branches are simply tags that point to a head of the history DAG and are automatically updated when one does a pull from the same origin.

As a mercurial repository can store an arbitrary history DAG like GIT, one could easily work with multiple branch in the same repo simply using "hg update -C -r $HEAD" to switch branch, where $REV is the revision number or hash of the other head. 

If one prefer to use names instead of revnames (hashes or numbers), he can do something similar to GIT branches by simply using local tags, but he would need to manually move the tag when he pulls. Providing an extension that does this automatically would be quite trivial.

In mercurial, named branches doesn't need to have a single head and their name is recorded in the immutable history as it is a property of each changeset that belong to them. 

This capability of recording the branch name in the history is something that GIT does not have. To be honest, GIT does not have even the ability to register simple tags in the history, while mercurial has both types of tags. 

In short, they have very different usecases. The GIT branches one is already doable with mercurial (just refer to the heads with their revnames and try keep in your mind where they came from), while the mercurial named branches one is not available with GIT.

BTW, your effort with EasyGIT and the one from pyrite are very very well appreciated! :)</description>
		<content:encoded><![CDATA[<p>Elijah: mercurial named branches are quite a bit different from GIT branches, and they are an alternative to having repositories in different directories for very long lived branches (e.g. stable vs. trunk).</p>
<p>From my understanding of GIT, its branches are simply tags that point to a head of the history DAG and are automatically updated when one does a pull from the same origin.</p>
<p>As a mercurial repository can store an arbitrary history DAG like GIT, one could easily work with multiple branch in the same repo simply using &#8220;hg update -C -r $HEAD&#8221; to switch branch, where $REV is the revision number or hash of the other head. </p>
<p>If one prefer to use names instead of revnames (hashes or numbers), he can do something similar to GIT branches by simply using local tags, but he would need to manually move the tag when he pulls. Providing an extension that does this automatically would be quite trivial.</p>
<p>In mercurial, named branches doesn&#8217;t need to have a single head and their name is recorded in the immutable history as it is a property of each changeset that belong to them. </p>
<p>This capability of recording the branch name in the history is something that GIT does not have. To be honest, GIT does not have even the ability to register simple tags in the history, while mercurial has both types of tags. </p>
<p>In short, they have very different usecases. The GIT branches one is already doable with mercurial (just refer to the heads with their revnames and try keep in your mind where they came from), while the mercurial named branches one is not available with GIT.</p>
<p>BTW, your effort with EasyGIT and the one from pyrite are very very well appreciated! <img src='http://blogs.gnome.org/newren/wp-content/mu-plugins/tango-smilies/face-smile.png' alt=':)' class='wp-smiley' width='16' height='16' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Elijah</title>
		<link>http://blogs.gnome.org/newren/2008/03/01/happenings-in-the-vcs-world/#comment-260</link>
		<dc:creator>Elijah</dc:creator>
		<pubDate>Fri, 07 Mar 2008 02:45:13 +0000</pubDate>
		<guid>http://blogs.gnome.org/newren/2008/03/01/happenings-in-the-vcs-world/#comment-260</guid>
		<description>Christopher Smith, Nathan Myers: I considered mentioning monotone and darcs (in particular darcs due to the work on darcs2), but I decided to stick with my previous choice to narrow the field to 5 (see http://blogs.gnome.org/newren/2007/11/17/adoption-of-various-vcses/).

Matthew Bassett: bzr shelve is very cool.  Definitely a neat tool...it has some features not present in git stash (picking out pieces of the changes to stash away, instead of just doing all changes).  However, that's not really like the index or its uses at all; there's a small use case overlap, but not all that much.  (If it was the same, git stash would be mere duplication).

Govind: Looks very cool.  Kinda sad though...we have some duplication now (more on that soon).

Ali: I agree that one branch per repository is easier to grasp, and I don't mind if the UI makes that the default and encourages it, but the system had better support multiple branches per repo or I don't want to use it (and it appears that the one branch per repository assumption goes all the way to the core in bzr; hg at least has a good start here with named branches).  I agree with you that the ideas in darcs are really cool and unique...but darcs loses on the most important criteria (see http://blogs.gnome.org/newren/2007/11/17/adoption-of-various-vcses/).  And, sure, I could start hacking on a system to add more capabilities to make up the differences to git...but git already has it.  Anyway, there's lots of things to consider in the VCS world these days and there's lots of valid rational conclusions to come to.  You can decide based on easiest to extend, most widely adopted, has most active community, has feature x or y, or other reasons.  You have a good grasp of the systems and I respect your opinions and conclusion, but I have come to a different one.</description>
		<content:encoded><![CDATA[<p>Christopher Smith, Nathan Myers: I considered mentioning monotone and darcs (in particular darcs due to the work on darcs2), but I decided to stick with my previous choice to narrow the field to 5 (see <a href="http://blogs.gnome.org/newren/2007/11/17/adoption-of-various-vcses/" rel="nofollow">http://blogs.gnome.org/newren/2007/11/17/adoption-of-various-vcses/</a>).</p>
<p>Matthew Bassett: bzr shelve is very cool.  Definitely a neat tool&#8230;it has some features not present in git stash (picking out pieces of the changes to stash away, instead of just doing all changes).  However, that&#8217;s not really like the index or its uses at all; there&#8217;s a small use case overlap, but not all that much.  (If it was the same, git stash would be mere duplication).</p>
<p>Govind: Looks very cool.  Kinda sad though&#8230;we have some duplication now (more on that soon).</p>
<p>Ali: I agree that one branch per repository is easier to grasp, and I don&#8217;t mind if the UI makes that the default and encourages it, but the system had better support multiple branches per repo or I don&#8217;t want to use it (and it appears that the one branch per repository assumption goes all the way to the core in bzr; hg at least has a good start here with named branches).  I agree with you that the ideas in darcs are really cool and unique&#8230;but darcs loses on the most important criteria (see <a href="http://blogs.gnome.org/newren/2007/11/17/adoption-of-various-vcses/" rel="nofollow">http://blogs.gnome.org/newren/2007/11/17/adoption-of-various-vcses/</a>).  And, sure, I could start hacking on a system to add more capabilities to make up the differences to git&#8230;but git already has it.  Anyway, there&#8217;s lots of things to consider in the VCS world these days and there&#8217;s lots of valid rational conclusions to come to.  You can decide based on easiest to extend, most widely adopted, has most active community, has feature x or y, or other reasons.  You have a good grasp of the systems and I respect your opinions and conclusion, but I have come to a different one.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Govind</title>
		<link>http://blogs.gnome.org/newren/2008/03/01/happenings-in-the-vcs-world/#comment-259</link>
		<dc:creator>Govind</dc:creator>
		<pubDate>Thu, 06 Mar 2008 18:01:46 +0000</pubDate>
		<guid>http://blogs.gnome.org/newren/2008/03/01/happenings-in-the-vcs-world/#comment-259</guid>
		<description>@Havoc, about wrappers

Much of git is designed for use by wrappers, I am currently working on a project to wrap git functionality in a friendlier way that mimics some of what hg and others do.  You can find the initial announcement at http://pyrite.sophiasuchtig.com/

My goal is to hide much of the complexity of git and facilitate certain workflows.

It goes slowly but it goes.  I am also planning on having a pygtk front end that can be used.

If anyone is interested in helping, I would be glad to have it.</description>
		<content:encoded><![CDATA[<p>@Havoc, about wrappers</p>
<p>Much of git is designed for use by wrappers, I am currently working on a project to wrap git functionality in a friendlier way that mimics some of what hg and others do.  You can find the initial announcement at <a href="http://pyrite.sophiasuchtig.com/" rel="nofollow">http://pyrite.sophiasuchtig.com/</a></p>
<p>My goal is to hide much of the complexity of git and facilitate certain workflows.</p>
<p>It goes slowly but it goes.  I am also planning on having a pygtk front end that can be used.</p>
<p>If anyone is interested in helping, I would be glad to have it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Eric</title>
		<link>http://blogs.gnome.org/newren/2008/03/01/happenings-in-the-vcs-world/#comment-258</link>
		<dc:creator>Eric</dc:creator>
		<pubDate>Thu, 06 Mar 2008 17:44:40 +0000</pubDate>
		<guid>http://blogs.gnome.org/newren/2008/03/01/happenings-in-the-vcs-world/#comment-258</guid>
		<description>Matthew: The "bzr shelve" command sounds very similar to "git stash". But I'm personally really impressed by stgit, which gives me intergrated support for a "patch stack" in git--I can pop patches, push them, reorder them, etc. This is super-useful when sending patch series upstream.</description>
		<content:encoded><![CDATA[<p>Matthew: The &#8220;bzr shelve&#8221; command sounds very similar to &#8220;git stash&#8221;. But I&#8217;m personally really impressed by stgit, which gives me intergrated support for a &#8220;patch stack&#8221; in git&#8211;I can pop patches, push them, reorder them, etc. This is super-useful when sending patch series upstream.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nathan Myers</title>
		<link>http://blogs.gnome.org/newren/2008/03/01/happenings-in-the-vcs-world/#comment-257</link>
		<dc:creator>Nathan Myers</dc:creator>
		<pubDate>Thu, 06 Mar 2008 02:33:48 +0000</pubDate>
		<guid>http://blogs.gnome.org/newren/2008/03/01/happenings-in-the-vcs-world/#comment-257</guid>
		<description>I feel keenly the omission of Monotone from the list of evaluated alternatives.  Is there any possibility of filling in the gap?</description>
		<content:encoded><![CDATA[<p>I feel keenly the omission of Monotone from the list of evaluated alternatives.  Is there any possibility of filling in the gap?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Matthew Bassett</title>
		<link>http://blogs.gnome.org/newren/2008/03/01/happenings-in-the-vcs-world/#comment-256</link>
		<dc:creator>Matthew Bassett</dc:creator>
		<pubDate>Wed, 05 Mar 2008 22:36:48 +0000</pubDate>
		<guid>http://blogs.gnome.org/newren/2008/03/01/happenings-in-the-vcs-world/#comment-256</guid>
		<description>Not to come out as a bzr fanboy or anything, but I find that 'bzr shelve' does almost the same thing (well kind of) that you talk about the git index, only with the opposite semantic sense, e.g.:

'bzr commit' does actually commit all changes

'bzr shelve' lets you step through the changes you have and temporarily 'shelve' them, thus removing them from the current changes awaiting commit (and also the current working copy, until you 'unshelve' them).

This works well for me, since I often mistakenly work on several changes at the same time, in the same branch, and then at commit time realise I need to split these changes out into different commits.

I also am liking the merge and history functions of bzr, but bear in mind I only have svn and rcs (!!!) experience to compare to...</description>
		<content:encoded><![CDATA[<p>Not to come out as a bzr fanboy or anything, but I find that &#8216;bzr shelve&#8217; does almost the same thing (well kind of) that you talk about the git index, only with the opposite semantic sense, e.g.:</p>
<p>&#8216;bzr commit&#8217; does actually commit all changes</p>
<p>&#8216;bzr shelve&#8217; lets you step through the changes you have and temporarily &#8217;shelve&#8217; them, thus removing them from the current changes awaiting commit (and also the current working copy, until you &#8216;unshelve&#8217; them).</p>
<p>This works well for me, since I often mistakenly work on several changes at the same time, in the same branch, and then at commit time realise I need to split these changes out into different commits.</p>
<p>I also am liking the merge and history functions of bzr, but bear in mind I only have svn and rcs (!!!) experience to compare to&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ali Sabil</title>
		<link>http://blogs.gnome.org/newren/2008/03/01/happenings-in-the-vcs-world/#comment-255</link>
		<dc:creator>Ali Sabil</dc:creator>
		<pubDate>Wed, 05 Mar 2008 22:29:31 +0000</pubDate>
		<guid>http://blogs.gnome.org/newren/2008/03/01/happenings-in-the-vcs-world/#comment-255</guid>
		<description>Thank you for your reply, here is my opinion about the points you pointed out:
[1] I completely agree with you, but I would like to point 1 more point about that, concerning slow networked operations, basically for mercurial and bzr they are able to work out of the box using dumb network transports (http, ftp, rsync ...), while GIT is not (last time I checked you still had to install git on the remote server and enable a post push hook), this is quite unfortunate because most people end up using dumb transports for bzr and mercurial which make them feel slow for networked operations. Beside that I completely agree with you that GIT is very fast for non networked operations.

[2] I personally used to like this feature while using Monotone (long before git existed) but now I tend to think that from a user friendliness point of view having 1 folder == 1 branch is far easier for the user to grasp imho.

[3] I personally think that hg, git and bzr all of them got it wrong, and I tend to prefer darcs UI for this, darcs is known for its interactive ui, which in my opinion is just the best for handling the Limbo files.

[4] I agree that rewriting the history can be useful, and I don't see what would stop you from doing this using either bzr of hg, both of them support plugins and extensions, so just go ahead and hack one(there is already bzr-rebase among others), and there is also the uncommit command.

I would like to add just one last point, basically to me Git is just a mixture of C, perl, shell ... code building on top of each other to add functionalities (I am talking about the full git including its porcelain, not just the core) this makes it currently not really extensible (could you extend the existing commit for example ?). This is not the case with bzr and hg, where you have true extension mechanism, for example it would be perfectly feasible to add an plugin to bzr that would allow the --interactive option to the existing commit command, and display a text ui asking about which hunks are to be committed (in a similar fashion to darcs), or a plugin that adds a transport, or a repository format (bzr-svn adds the supports for the svn repo to bzr, unlike git-svn, this allows all the bzr commands either provided by the core or by an extension to be directly usable on an svn repository...).

Imho, since there is no real winner in this comparison, the one to be chosen ought to be the one that is the easiest to extend and improve, and not the fastest one, or the one with the most feature, or ....</description>
		<content:encoded><![CDATA[<p>Thank you for your reply, here is my opinion about the points you pointed out:<br />
[1] I completely agree with you, but I would like to point 1 more point about that, concerning slow networked operations, basically for mercurial and bzr they are able to work out of the box using dumb network transports (http, ftp, rsync &#8230;), while GIT is not (last time I checked you still had to install git on the remote server and enable a post push hook), this is quite unfortunate because most people end up using dumb transports for bzr and mercurial which make them feel slow for networked operations. Beside that I completely agree with you that GIT is very fast for non networked operations.</p>
<p>[2] I personally used to like this feature while using Monotone (long before git existed) but now I tend to think that from a user friendliness point of view having 1 folder == 1 branch is far easier for the user to grasp imho.</p>
<p>[3] I personally think that hg, git and bzr all of them got it wrong, and I tend to prefer darcs UI for this, darcs is known for its interactive ui, which in my opinion is just the best for handling the Limbo files.</p>
<p>[4] I agree that rewriting the history can be useful, and I don&#8217;t see what would stop you from doing this using either bzr of hg, both of them support plugins and extensions, so just go ahead and hack one(there is already bzr-rebase among others), and there is also the uncommit command.</p>
<p>I would like to add just one last point, basically to me Git is just a mixture of C, perl, shell &#8230; code building on top of each other to add functionalities (I am talking about the full git including its porcelain, not just the core) this makes it currently not really extensible (could you extend the existing commit for example ?). This is not the case with bzr and hg, where you have true extension mechanism, for example it would be perfectly feasible to add an plugin to bzr that would allow the &#8211;interactive option to the existing commit command, and display a text ui asking about which hunks are to be committed (in a similar fashion to darcs), or a plugin that adds a transport, or a repository format (bzr-svn adds the supports for the svn repo to bzr, unlike git-svn, this allows all the bzr commands either provided by the core or by an extension to be directly usable on an svn repository&#8230;).</p>
<p>Imho, since there is no real winner in this comparison, the one to be chosen ought to be the one that is the easiest to extend and improve, and not the fastest one, or the one with the most feature, or &#8230;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Olav Vitters &#187; Blog Archive &#187; Deciding on a DVCS</title>
		<link>http://blogs.gnome.org/newren/2008/03/01/happenings-in-the-vcs-world/#comment-254</link>
		<dc:creator>Olav Vitters &#187; Blog Archive &#187; Deciding on a DVCS</dc:creator>
		<pubDate>Wed, 05 Mar 2008 21:25:10 +0000</pubDate>
		<guid>http://blogs.gnome.org/newren/2008/03/01/happenings-in-the-vcs-world/#comment-254</guid>
		<description>[...] Elijah&#8217;s latest VCS blogpost is on LWN. Noticed the following addition: On a related note, it appears that Emacs will be moving to Bzr, not for a specific technical reason, but because Bzr is becoming a GNU project. [...]</description>
		<content:encoded><![CDATA[<p>[&#8230;] Elijah&#8217;s latest VCS blogpost is on LWN. Noticed the following addition: On a related note, it appears that Emacs will be moving to Bzr, not for a specific technical reason, but because Bzr is becoming a GNU project. [&#8230;]</p>
]]></content:encoded>
	</item>
</channel>
</rss>
