<?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: Why I like bzr better than git</title>
	<atom:link href="http://raim.codingfarm.de/blog/2009/09/02/why-i-like-bzr-better-than-git/feed/" rel="self" type="application/rss+xml" />
	<link>http://raim.codingfarm.de/blog/2009/09/02/why-i-like-bzr-better-than-git/</link>
	<description>My personal front yard on the web</description>
	<lastBuildDate>Fri, 14 Oct 2011 07:10:27 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: Jakub Narębski</title>
		<link>http://raim.codingfarm.de/blog/2009/09/02/why-i-like-bzr-better-than-git/comment-page-1/#comment-3378</link>
		<dc:creator>Jakub Narębski</dc:creator>
		<pubDate>Thu, 03 Sep 2009 12:05:36 +0000</pubDate>
		<guid isPermaLink="false">http://raim.codingfarm.de/blog/?p=57#comment-3378</guid>
		<description>* &lt;b&gt;Each branch has its own tree::&lt;/b&gt;

You can do the same setup with Git, either by having separate clones, perhaps with shared object database (alternates or symlink), or by using multiple working directories with single repository (with which contrib/worktree/git-new-worktree would help).  Nevertheless the multiple branches in single repository, with switching between branches using single working area, was something user&#039;s *wanted* and was created at user&#039;s request, and found very useful.


* &lt;b&gt;Semantic revision IDs::&lt;/b&gt;

Numerical monotonic (well, partially ordered in the case of nonlinear history) revision identifiers are possible only if there is *central numbering authority*.    Which means it is possible only in centralized workflow.  Or they are local and cannot be used to communicate with other developers.

Besides I don&#039;t think that e.g. &#039;r16437&#039; is easier to use than &#039;3f5907d&#039; shortened SHA-1 identifier, or more commonly used &#039;HEAD^&#039;, &#039;master~2&#039;, &#039;v1.2.3-rc1&#039;, or &#039;v1.6.4.2-260-g3f5907d&#039;, or &#039;@{1}&#039;.  Also if you have &#039;r15467&#039; and &#039;r15476&#039; you only know the topological relation between them *if they are on the same branch* (if one is ancestor of the other).


* &lt;b&gt;Hierarchical history::&lt;/b&gt;

Here I don&#039;t understand what you are talking about writing &quot;With git, all your history is flat.&quot;  Take a look at output of &quot;gitk&quot; or &quot;git log --graph&quot; / &quot;git log --graph --oneline&quot;.  If you are talking about merge messages, there is always `merge.summary` configuration option, where merge commit contains shortlog(s) of  merged branch(es).


* &lt;b&gt;Serving a branch is uncomplicated::&lt;/b&gt;

You can serve Git repository via HTTP with any web server with a little bit of extra information generated by git-update-server-info, usually run from hooks.  Also you have Gitosis third-party tool for easy setting up SSH access.  But I agree that it could be easier.

As to popularity of GitHub: isn&#039;t Launchpad as popular among bzr users?


* &lt;b&gt;Plugins and Aliases::&lt;/b&gt;

Plugins, stable API, and ever changing repository format (for Bazaar) versus scriptability (suing low level &quot;plumbing&quot; tools provided for that purpose) and stable repository format allowing for independent reimplementations like JGit or Dulwich are design decision.  *Both* have their advantages and disadvantages.

Git has also aliases, with the limitation (needed for scriptability) that you can have the same name of alias as existing Git command.  Many commands have configuration which are equivalent to command line options, but the idea to add ability to specify default command line options was discussed but didn&#039;t made it into git (because of difficulties with not breaking existing scripts).


* &lt;b&gt;Library Interfaces::&lt;/b&gt;

&quot;The main interface of git is the command line interface. It is used both for user interaction and automation [...]&quot;.  Not true.  Well, not entirely true.  There is set of git commands (so called &quot;plumbing&quot; commands) which are meant to be used for automation (commands like git-checkout-index, git-update-index, git-diff-files, git-write-tree, git-cat-file, git-symbolic-ref), and there is set of git commands (so called &quot;porcelain&quot; commands) which are meant to be used for user interaction (commands like &quot;git show&quot;, &quot;git log&quot;, &quot;git diff&quot;, &quot;git branch&quot;).

There is currenly no Git library (the work on libgit2 is stalled), but on the other hand stable repository format and transmission protocols (with place for extending it) allow for *reimplementations* of Git in other languages (JGit in Java, Dulwich in Python, Git# / Managed Git in C#) even if there are no libified bindings for other languages.

I agree that it would be nice to have Git library.


* &lt;b&gt;Gun safety::&lt;/b&gt;

&quot;With git I got several times to the point where I just deleted the repository to start over. [...] Maybe I am just not experienced enough with git.&quot;

Yes, you are not experienced enough with git.

In the case of botched merge, you can always do &quot;git reset --hard ORIG_HEAD&quot; to go back to situation before merge.  Also, if you don&#039;t want to commit merge automatically, there is `--no-commit` option...


* &lt;b&gt;Conclusion::&lt;/b&gt;

If bzr just works for you, there is no reason to swicth to git.</description>
		<content:encoded><![CDATA[<p>* <b>Each branch has its own tree::</b></p>
<p>You can do the same setup with Git, either by having separate clones, perhaps with shared object database (alternates or symlink), or by using multiple working directories with single repository (with which contrib/worktree/git-new-worktree would help).  Nevertheless the multiple branches in single repository, with switching between branches using single working area, was something user&#8217;s *wanted* and was created at user&#8217;s request, and found very useful.</p>
<p>* <b>Semantic revision IDs::</b></p>
<p>Numerical monotonic (well, partially ordered in the case of nonlinear history) revision identifiers are possible only if there is *central numbering authority*.    Which means it is possible only in centralized workflow.  Or they are local and cannot be used to communicate with other developers.</p>
<p>Besides I don&#8217;t think that e.g. &#8216;r16437&#8242; is easier to use than &#8217;3f5907d&#8217; shortened SHA-1 identifier, or more commonly used &#8216;HEAD^&#8217;, &#8216;master~2&#8242;, &#8216;v1.2.3-rc1&#8242;, or &#8216;v1.6.4.2-260-g3f5907d&#8217;, or &#8216;@{1}&#8217;.  Also if you have &#8216;r15467&#8242; and &#8216;r15476&#8242; you only know the topological relation between them *if they are on the same branch* (if one is ancestor of the other).</p>
<p>* <b>Hierarchical history::</b></p>
<p>Here I don&#8217;t understand what you are talking about writing &#8220;With git, all your history is flat.&#8221;  Take a look at output of &#8220;gitk&#8221; or &#8220;git log &#8211;graph&#8221; / &#8220;git log &#8211;graph &#8211;oneline&#8221;.  If you are talking about merge messages, there is always `merge.summary` configuration option, where merge commit contains shortlog(s) of  merged branch(es).</p>
<p>* <b>Serving a branch is uncomplicated::</b></p>
<p>You can serve Git repository via HTTP with any web server with a little bit of extra information generated by git-update-server-info, usually run from hooks.  Also you have Gitosis third-party tool for easy setting up SSH access.  But I agree that it could be easier.</p>
<p>As to popularity of GitHub: isn&#8217;t Launchpad as popular among bzr users?</p>
<p>* <b>Plugins and Aliases::</b></p>
<p>Plugins, stable API, and ever changing repository format (for Bazaar) versus scriptability (suing low level &#8220;plumbing&#8221; tools provided for that purpose) and stable repository format allowing for independent reimplementations like JGit or Dulwich are design decision.  *Both* have their advantages and disadvantages.</p>
<p>Git has also aliases, with the limitation (needed for scriptability) that you can have the same name of alias as existing Git command.  Many commands have configuration which are equivalent to command line options, but the idea to add ability to specify default command line options was discussed but didn&#8217;t made it into git (because of difficulties with not breaking existing scripts).</p>
<p>* <b>Library Interfaces::</b></p>
<p>&#8220;The main interface of git is the command line interface. It is used both for user interaction and automation [...]&#8220;.  Not true.  Well, not entirely true.  There is set of git commands (so called &#8220;plumbing&#8221; commands) which are meant to be used for automation (commands like git-checkout-index, git-update-index, git-diff-files, git-write-tree, git-cat-file, git-symbolic-ref), and there is set of git commands (so called &#8220;porcelain&#8221; commands) which are meant to be used for user interaction (commands like &#8220;git show&#8221;, &#8220;git log&#8221;, &#8220;git diff&#8221;, &#8220;git branch&#8221;).</p>
<p>There is currenly no Git library (the work on libgit2 is stalled), but on the other hand stable repository format and transmission protocols (with place for extending it) allow for *reimplementations* of Git in other languages (JGit in Java, Dulwich in Python, Git# / Managed Git in C#) even if there are no libified bindings for other languages.</p>
<p>I agree that it would be nice to have Git library.</p>
<p>* <b>Gun safety::</b></p>
<p>&#8220;With git I got several times to the point where I just deleted the repository to start over. [...] Maybe I am just not experienced enough with git.&#8221;</p>
<p>Yes, you are not experienced enough with git.</p>
<p>In the case of botched merge, you can always do &#8220;git reset &#8211;hard ORIG_HEAD&#8221; to go back to situation before merge.  Also, if you don&#8217;t want to commit merge automatically, there is `&#8211;no-commit` option&#8230;</p>
<p>* <b>Conclusion::</b></p>
<p>If bzr just works for you, there is no reason to swicth to git.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

