<?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 Subversion is better than Git</title>
	<atom:link href="http://www.databasesandlife.com/why-subversion-is-better-than-git/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.databasesandlife.com/why-subversion-is-better-than-git/</link>
	<description>Adrian Smith's blog</description>
	<lastBuildDate>Tue, 24 Aug 2010 04:56:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: adrian</title>
		<link>http://www.databasesandlife.com/why-subversion-is-better-than-git/comment-page-1/#comment-2064</link>
		<dc:creator>adrian</dc:creator>
		<pubDate>Mon, 09 Feb 2009 13:53:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.databasesandlife.com/?p=324#comment-2064</guid>
		<description>Yes you are definitely right about intermediate commits creating a non-reproducible state, I hadn&#039;t thought of it this way.

I tried your &lt;code&gt;git reset -- file&lt;/code&gt; but it didn&#039;t work for me.
&lt;code&gt;
git rm RobotRunner.php
git status
&#160;deleted:    RobotRunner.php
git reset -- RobotRunner.php
&#160;src/lib/Strings.php: needs update
&lt;/code&gt;
I think by &quot;needs update&quot; it means I need to do a &quot;commit&quot; of some other unrelated files, right? (The naming is not necessarily wrong, but for sure confusing for CVS/Subversion users!). Well I don&#039;t want to do a commit, I just want to do something similar to &lt;code&gt;svn revert&lt;/code&gt;.</description>
		<content:encoded><![CDATA[<p>Yes you are definitely right about intermediate commits creating a non-reproducible state, I hadn&#8217;t thought of it this way.</p>
<p>I tried your <code>git reset -- file</code> but it didn&#8217;t work for me.<br />
<code><br />
git rm RobotRunner.php<br />
git status<br />
&nbsp;deleted:    RobotRunner.php<br />
git reset -- RobotRunner.php<br />
&nbsp;src/lib/Strings.php: needs update<br />
</code><br />
I think by &#8220;needs update&#8221; it means I need to do a &#8220;commit&#8221; of some other unrelated files, right? (The naming is not necessarily wrong, but for sure confusing for CVS/Subversion users!). Well I don&#8217;t want to do a commit, I just want to do something similar to <code>svn revert</code>.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jakub Narębski</title>
		<link>http://www.databasesandlife.com/why-subversion-is-better-than-git/comment-page-1/#comment-2056</link>
		<dc:creator>Jakub Narębski</dc:creator>
		<pubDate>Wed, 04 Feb 2009 21:06:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.databasesandlife.com/?p=324#comment-2056</guid>
		<description>&lt;b&gt;About quick fix on the live server and commit&lt;/b&gt;: correct solution (correct as in: you would be able to reproduce &lt;i&gt;state on live server&lt;/i&gt; that you had from version control) is to either use different branch han &#039;master&#039; on live server (like for example &#039;live&#039; ;-)), or push to separate remotes layout
&lt;code&gt;
git push
  fc1b1d7..5edbc69  master -&gt; remotes/live/master
&lt;/code&gt;
Or configure to allow non-fastforward push, but YMMV.

Whether &lt;code&gt;svn revert file&lt;/code&gt; is simplier than &lt;code&gt;git reset -- file&lt;/code&gt; is I think the matter of taste. &lt;a href=&quot;http://git.or.cz/man/git-revert&quot; rel=&quot;nofollow&quot;&gt;git-revert&lt;/a&gt; is taken to mean create a commit which reverts changes in given commit (cherry-picking reverse of commit, patch -R...).</description>
		<content:encoded><![CDATA[<p><b>About quick fix on the live server and commit</b>: correct solution (correct as in: you would be able to reproduce <i>state on live server</i> that you had from version control) is to either use different branch han &#8216;master&#8217; on live server (like for example &#8216;live&#8217; ;-)), or push to separate remotes layout<br />
<code><br />
git push<br />
  fc1b1d7..5edbc69  master -&gt; remotes/live/master<br />
</code><br />
Or configure to allow non-fastforward push, but YMMV.</p>
<p>Whether <code>svn revert file</code> is simplier than <code>git reset -- file</code> is I think the matter of taste. <a href="http://git.or.cz/man/git-revert" rel="nofollow">git-revert</a> is taken to mean create a commit which reverts changes in given commit (cherry-picking reverse of commit, patch -R&#8230;).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: adrian</title>
		<link>http://www.databasesandlife.com/why-subversion-is-better-than-git/comment-page-1/#comment-2055</link>
		<dc:creator>adrian</dc:creator>
		<pubDate>Wed, 04 Feb 2009 19:25:04 +0000</pubDate>
		<guid isPermaLink="false">http://www.databasesandlife.com/?p=324#comment-2055</guid>
		<description>&lt;strong&gt;Title: Why Subversion is better than Git not better than CVS&lt;/strong&gt; - True, sorry about that.

&lt;strong&gt;You can do a quick fix on the live server and commit&lt;/strong&gt; - That doesn&#039;t work for me. In the following example, I alter a file, check it in locally. This file is up-to-date even though the checkout isn&#039;t up-to-date as a whole. After a pull the file has not been altered (showing that it was up-to-date). But only after the pull (updating other files I don&#039;t want to change) can I do a push.

&lt;pre&gt;
vi Wizard.class.php
git commit Wizard.class.php
md5sum Wizard.class.php
  a3472e35266331b664e547feedfd459a  Wizard.class.php
git push
  ! [rejected]        master -&gt; master (non-fast forward)
git pull
md5sum Wizard.class.php
  a3472e35266331b664e547feedfd459a  Wizard.class.php
git push
  fc1b1d7..5edbc69  master -&gt; master
&lt;/pre&gt;

&lt;strong&gt;Other points about Git&#039;s usage&lt;/strong&gt; - Thanks for the tips.

I think as a system increases in complexity, the number of clicks or options one needs to achieve a given task necessarily increases. For example in Google Spreadsheets (simple) there is a &quot;formatting&quot; drop-down where I can select the 0.00 format. On Excel I have to right-click, select formatting, select &quot;number&quot;, then choose the number of decimal places. I think because Subversion is simpler, those things which are also possible with Git, are more accessible in Subversion: for example &quot;svn revert xxx.txt&quot; is easier than the 3 methods you described. Easier means a larger set of people will use the feature, meaning the tool as a whole becomes more useful, as there is less emailing of files. Of course it comes at the trade-off of other features not being available at all, however if they&#039;re not needed (depends on what you&#039;re doing) then that&#039;s a good trade-off.</description>
		<content:encoded><![CDATA[<p><strong>Title: Why Subversion is better than Git not better than CVS</strong> &#8211; True, sorry about that.</p>
<p><strong>You can do a quick fix on the live server and commit</strong> &#8211; That doesn&#8217;t work for me. In the following example, I alter a file, check it in locally. This file is up-to-date even though the checkout isn&#8217;t up-to-date as a whole. After a pull the file has not been altered (showing that it was up-to-date). But only after the pull (updating other files I don&#8217;t want to change) can I do a push.</p>
<pre>
vi Wizard.class.php
git commit Wizard.class.php
md5sum Wizard.class.php
  a3472e35266331b664e547feedfd459a  Wizard.class.php
git push
  ! [rejected]        master -> master (non-fast forward)
git pull
md5sum Wizard.class.php
  a3472e35266331b664e547feedfd459a  Wizard.class.php
git push
  fc1b1d7..5edbc69  master -> master
</pre>
<p><strong>Other points about Git&#8217;s usage</strong> &#8211; Thanks for the tips.</p>
<p>I think as a system increases in complexity, the number of clicks or options one needs to achieve a given task necessarily increases. For example in Google Spreadsheets (simple) there is a &#8220;formatting&#8221; drop-down where I can select the 0.00 format. On Excel I have to right-click, select formatting, select &#8220;number&#8221;, then choose the number of decimal places. I think because Subversion is simpler, those things which are also possible with Git, are more accessible in Subversion: for example &#8220;svn revert xxx.txt&#8221; is easier than the 3 methods you described. Easier means a larger set of people will use the feature, meaning the tool as a whole becomes more useful, as there is less emailing of files. Of course it comes at the trade-off of other features not being available at all, however if they&#8217;re not needed (depends on what you&#8217;re doing) then that&#8217;s a good trade-off.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jakub Narębski</title>
		<link>http://www.databasesandlife.com/why-subversion-is-better-than-git/comment-page-1/#comment-2054</link>
		<dc:creator>Jakub Narębski</dc:creator>
		<pubDate>Wed, 04 Feb 2009 17:28:55 +0000</pubDate>
		<guid isPermaLink="false">http://www.databasesandlife.com/?p=324#comment-2054</guid>
		<description>&lt;b&gt;Directories being empty&lt;/b&gt;: In Git currently you have to do workaround by keeping for example empty .gitignore file. This is not a fundamental issue, though, and might be changed in the future to allow Git to be configured to track empty directories.

&lt;b&gt;Reverting your changes &lt;i&gt;to some file&lt;/i&gt;?&lt;/b&gt;: Supposed &#039;Git expert&#039; wasn&#039;t much of an expert if he/she didn&#039;t know about &lt;code&gt;git checkout -- &lt;file&gt;&lt;/code&gt;, &lt;code&gt;git checkout HEAD -- &lt;file&gt;&lt;/code&gt; or (in newer Git) &lt;code&gt;git reset -- &lt;file&gt;&lt;/code&gt;. Unfortunately (for Subversion users) &#039;revert&#039; means something different in Git than in Subversion... you can always make &#039;revert-file&#039; alias.

&lt;b&gt;Binary files&lt;/b&gt; are automatically detected in Git (and you can use gitattributes to override detection based on pathnames). The title is &quot;Why Subversion is better than &lt;i&gt;Git&lt;/i&gt;&quot; not &quot;better than CVS&quot;, isn&#039;t it?

&lt;b&gt;Executable flag&lt;/b&gt; (executable bit) is supported in Git. Symbolic links are also supported.

&lt;b&gt;Ignoring files&lt;/b&gt;: I disagree, properties are worse solution than &#039;.gitignore&#039; file(s) (and &#039;.git/info/exclude&#039;, and core.excludesFile). First, they are not recursive. Second (correct me if I am wrong) cvs:ignore is &lt;i&gt;client&lt;/i&gt; property, so it cannot be propagated (like tracked .gitignore file can).

&lt;b&gt;Want to commit with a different user?&lt;/b&gt;: &#039;git commit --author&#039;. By the way, if you are applying patch with description from email using &#039;git am&#039; authorship of a commit is set automagically.

&lt;b&gt;Absolute paths&lt;/b&gt; should now work with (modern) Git. Well... I have checked that &#039;git add /home/adrian/checkout/file.txt&#039; works.

&lt;b&gt;The help is clear&lt;/b&gt; (example of &#039;svn log&#039; and &#039;git log&#039;): more features (like e.g. --grep, or --author, or --since) means longer manpage. But I agree that Git manpages might be cleaner and more newbie friendly.

&lt;b&gt;You can do a quick fix on the live server and commit it&lt;/b&gt; WTF? You can do a commit in Git keeping some files in working directiries dirty, never mind not updated... Perhaps I don&#039;t understand this issue...

&lt;b&gt;Subversion repositories are URLs&lt;/b&gt; So are Git (well, that, or scp-like expressions). And you can put HTTP ones in browser (although you won&#039;t see much if repository is bare, i.e. without working area, as it should be for public repositories, usually), and you can configure gitweb to share the same HTTP URL as repository. Access via SSH or anonymous git:// protocol is much faster; this might change in the future when &quot;smart&quot; HTTP server will get finished.

&lt;b&gt;You can force locking.&lt;/b&gt; True, that is next to impossible in Git. Git is inherently distributed SCM. But I think one would be able to cobble something using hooks and locks / lock server... OTOH you can have custom merge drivers (configured using gitattributes) in Git.

&lt;b&gt;You can embed expandable keywords&lt;/b&gt;: Git, because of its policy of not updating file in working directory if its contents didn&#039;t change, support only very limited set of keywords out of the box, and they have to be turned on using &#039;ident&#039; and &#039;export-subst&#039; gitattributes... or you can use set of smudge / clean checkout gitatribute filters.

&lt;b&gt;You can checkout only a subdirectory of repository&lt;/b&gt;: &lt;i&gt;currently&lt;/i&gt; it is not possible in Git, but patches for &#039;partial checkout&#039; are floating on git mailing list.

&lt;b&gt;Old servers can talk to new clients and vice-versa.&lt;/b&gt; With Git too.

&lt;b&gt;Output is copy-paste friendly&lt;/b&gt; (where you mean that &#039;svn diff&#039; doesn&#039;t have prefix in filenames, i.e. it is &quot;patch -p0&quot; compatibile patch). For Git it was more important to be compatibile with commonly used &quot;patch -p1&quot;, but if you really need it there is &#039;--no-prefix&#039; option to git-diff.

&lt;b&gt;Subversion can handle Unicode file names.&lt;/b&gt; Well, it depends on what do you understand by this, but Git does also support international characters in filenames.

&lt;b&gt;SVN Externals are cool&lt;/b&gt;. Git submodules are svn:externals done right :-)

&lt;b&gt;Git really is unbelievably fast. But is that actually a useful feature?&lt;/b&gt; If diff or status, or commit on the whole project takes seconds or minutes rather than fraction of second, it does matter, because it changes workflow.</description>
		<content:encoded><![CDATA[<p><b>Directories being empty</b>: In Git currently you have to do workaround by keeping for example empty .gitignore file. This is not a fundamental issue, though, and might be changed in the future to allow Git to be configured to track empty directories.</p>
<p><b>Reverting your changes <i>to some file</i>?</b>: Supposed &#8216;Git expert&#8217; wasn&#8217;t much of an expert if he/she didn&#8217;t know about <code>git checkout -- &lt;file&gt;</code>, <code>git checkout HEAD -- &lt;file&gt;</code> or (in newer Git) <code>git reset -- &lt;file&gt;</code>. Unfortunately (for Subversion users) &#8216;revert&#8217; means something different in Git than in Subversion&#8230; you can always make &#8216;revert-file&#8217; alias.</p>
<p><b>Binary files</b> are automatically detected in Git (and you can use gitattributes to override detection based on pathnames). The title is &#8220;Why Subversion is better than <i>Git</i>&#8221; not &#8220;better than CVS&#8221;, isn&#8217;t it?</p>
<p><b>Executable flag</b> (executable bit) is supported in Git. Symbolic links are also supported.</p>
<p><b>Ignoring files</b>: I disagree, properties are worse solution than &#8216;.gitignore&#8217; file(s) (and &#8216;.git/info/exclude&#8217;, and core.excludesFile). First, they are not recursive. Second (correct me if I am wrong) cvs:ignore is <i>client</i> property, so it cannot be propagated (like tracked .gitignore file can).</p>
<p><b>Want to commit with a different user?</b>: &#8216;git commit &#8211;author&#8217;. By the way, if you are applying patch with description from email using &#8216;git am&#8217; authorship of a commit is set automagically.</p>
<p><b>Absolute paths</b> should now work with (modern) Git. Well&#8230; I have checked that &#8216;git add /home/adrian/checkout/file.txt&#8217; works.</p>
<p><b>The help is clear</b> (example of &#8217;svn log&#8217; and &#8216;git log&#8217;): more features (like e.g. &#8211;grep, or &#8211;author, or &#8211;since) means longer manpage. But I agree that Git manpages might be cleaner and more newbie friendly.</p>
<p><b>You can do a quick fix on the live server and commit it</b> WTF? You can do a commit in Git keeping some files in working directiries dirty, never mind not updated&#8230; Perhaps I don&#8217;t understand this issue&#8230;</p>
<p><b>Subversion repositories are URLs</b> So are Git (well, that, or scp-like expressions). And you can put HTTP ones in browser (although you won&#8217;t see much if repository is bare, i.e. without working area, as it should be for public repositories, usually), and you can configure gitweb to share the same HTTP URL as repository. Access via SSH or anonymous git:// protocol is much faster; this might change in the future when &#8220;smart&#8221; HTTP server will get finished.</p>
<p><b>You can force locking.</b> True, that is next to impossible in Git. Git is inherently distributed SCM. But I think one would be able to cobble something using hooks and locks / lock server&#8230; OTOH you can have custom merge drivers (configured using gitattributes) in Git.</p>
<p><b>You can embed expandable keywords</b>: Git, because of its policy of not updating file in working directory if its contents didn&#8217;t change, support only very limited set of keywords out of the box, and they have to be turned on using &#8216;ident&#8217; and &#8216;export-subst&#8217; gitattributes&#8230; or you can use set of smudge / clean checkout gitatribute filters.</p>
<p><b>You can checkout only a subdirectory of repository</b>: <i>currently</i> it is not possible in Git, but patches for &#8216;partial checkout&#8217; are floating on git mailing list.</p>
<p><b>Old servers can talk to new clients and vice-versa.</b> With Git too.</p>
<p><b>Output is copy-paste friendly</b> (where you mean that &#8217;svn diff&#8217; doesn&#8217;t have prefix in filenames, i.e. it is &#8220;patch -p0&#8243; compatibile patch). For Git it was more important to be compatibile with commonly used &#8220;patch -p1&#8243;, but if you really need it there is &#8216;&#8211;no-prefix&#8217; option to git-diff.</p>
<p><b>Subversion can handle Unicode file names.</b> Well, it depends on what do you understand by this, but Git does also support international characters in filenames.</p>
<p><b>SVN Externals are cool</b>. Git submodules are svn:externals done right :-)</p>
<p><b>Git really is unbelievably fast. But is that actually a useful feature?</b> If diff or status, or commit on the whole project takes seconds or minutes rather than fraction of second, it does matter, because it changes workflow.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: C. Michael Pilato</title>
		<link>http://www.databasesandlife.com/why-subversion-is-better-than-git/comment-page-1/#comment-2053</link>
		<dc:creator>C. Michael Pilato</dc:creator>
		<pubDate>Wed, 04 Feb 2009 14:29:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.databasesandlife.com/?p=324#comment-2053</guid>
		<description>&gt; “svn log” on a directory shows the differences to that directory object (which you rarely
&gt; want), not all the files underneath it (which is what you always want)

&#039;svn log&#039; on a directory can yield somewhat confusing results if your directory isn&#039;t up-to-date, but yes, it does show changes to files inside the directory, exactly as &#039;svn log URL&#039; does.</description>
		<content:encoded><![CDATA[<p>&gt; “svn log” on a directory shows the differences to that directory object (which you rarely<br />
&gt; want), not all the files underneath it (which is what you always want)</p>
<p>&#8217;svn log&#8217; on a directory can yield somewhat confusing results if your directory isn&#8217;t up-to-date, but yes, it does show changes to files inside the directory, exactly as &#8217;svn log URL&#8217; does.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark Phippard</title>
		<link>http://www.databasesandlife.com/why-subversion-is-better-than-git/comment-page-1/#comment-2052</link>
		<dc:creator>Mark Phippard</dc:creator>
		<pubDate>Wed, 04 Feb 2009 14:23:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.databasesandlife.com/?p=324#comment-2052</guid>
		<description>Nice post.  You are brave to be willing to risk the flames of the git zealots.  It is good to hear some real-world feedback.

We, Subversion, are working on re-writing the way the &quot;working copy&quot; is managed for the 1.7 release (this summer).  It will get all those .svn folders out of the working copy which should solve the grep issue and it will also bring massive performance improvements by eliminating all of the crawling of the working copy that has to happen today.

The upcoming 1.6 release brings some improvements to rename handling.  Specifically, adding the concept of a &quot;tree conflict&quot;.  So for example, if you rename a file and then run update, and the update brought in changes to the renamed file, this would raise a tree conflict so that you could review those changes and incorporate them into the renamed version.  Today, in 1.5, this whole process if very silent and you could easily miss the situation.

Anyway, thanks for the posting.

Mark</description>
		<content:encoded><![CDATA[<p>Nice post.  You are brave to be willing to risk the flames of the git zealots.  It is good to hear some real-world feedback.</p>
<p>We, Subversion, are working on re-writing the way the &#8220;working copy&#8221; is managed for the 1.7 release (this summer).  It will get all those .svn folders out of the working copy which should solve the grep issue and it will also bring massive performance improvements by eliminating all of the crawling of the working copy that has to happen today.</p>
<p>The upcoming 1.6 release brings some improvements to rename handling.  Specifically, adding the concept of a &#8220;tree conflict&#8221;.  So for example, if you rename a file and then run update, and the update brought in changes to the renamed file, this would raise a tree conflict so that you could review those changes and incorporate them into the renamed version.  Today, in 1.5, this whole process if very silent and you could easily miss the situation.</p>
<p>Anyway, thanks for the posting.</p>
<p>Mark</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: adrian</title>
		<link>http://www.databasesandlife.com/why-subversion-is-better-than-git/comment-page-1/#comment-2047</link>
		<dc:creator>adrian</dc:creator>
		<pubDate>Tue, 03 Feb 2009 17:17:46 +0000</pubDate>
		<guid isPermaLink="false">http://www.databasesandlife.com/?p=324#comment-2047</guid>
		<description>Thanks for your detailed answers!

@Stripes - Thanks for the tip.

@Helge - I&#039;m not sure, but certainly at the start CVS was used by nobody, not even web designers. I had to fight hard to get CVS adopted by web design and even so certain things like branches always caused problems to the less technically minded staff. You certainly refused to use it at the start, but that may have changed as time went on. But I understand your rejecting of it - WinCVS was a nightmare - the tool was at fault here - the tool should fit the people (be easy enough to use so as to be accepted by them) not the other way around.

@Flo - Git revert - That&#039;s what my git expert said too, until he tried it. But maybe it&#039;s easier than it seemed at the time, once you know how.

Files can be ignored - Yes you&#039;re right about the recursive feature. I&#039;ve never needed them to be recursive but I can imagine there are plenty of situations where you do.

&quot;git log&quot; usability - True but can you name me the way to get the log to follow file moves/copies? It&#039;s buryed many pages down on the documentation, and there are many options described similar. For example &quot;-M Detect rename&quot; (that&#039;s the entire docu) is not the option I was looking for. SVN has this on by default. I think one of the reasons the SVN docu is smaller is because it does the right thing by default, but maybe I&#039;m wrong.

&quot;svn log&quot; pager - True.

Library - True, but it&#039;s still a collection of command-line tools like CVS. I don&#039;t think that&#039;s the right way to write software, as the only way to interact with command-line tools are arguments and lines of result. To interact with a library you need richer parameters and return values, i.e. objects and structures, which can contain other objects and structures.

Speed - But &quot;svn diff&quot; and &quot;svn log&quot; are also fast. This repository (28k commits): &quot;svn diff&quot; on a file took 0.01 seconds. &quot;svn log&quot; took 0.9 seconds. True if you do it on a directory it takes longer. On the entire checkout (12k regular files) a svn diff took 1.3s (but this wasn&#039;t the first time I ran it - probably everything was in FS cache), and there were very few changes).

Comparison to CVS - True, that deviated from the title a bit.

Tortoise Git - That&#039;s good to hear. I&#039;m sure many of these usability issues will go away with time (the ones that are just down to bad docu and bad defaults.). I mean Tortoise CVS basically hid most of the CVS options. (e.g. &quot;yes I want recursive!&quot;).

But there is still the feeling at the back of my mind that Git solves a problem I don&#039;t need solving, and in doing so, necessarily alienates a lot of users who not only don&#039;t need those problems solving, but also aren&#039;t going to take the time, or may lack the education necessary, to understand the solutions to them.</description>
		<content:encoded><![CDATA[<p>Thanks for your detailed answers!</p>
<p>@Stripes &#8211; Thanks for the tip.</p>
<p>@Helge &#8211; I&#8217;m not sure, but certainly at the start CVS was used by nobody, not even web designers. I had to fight hard to get CVS adopted by web design and even so certain things like branches always caused problems to the less technically minded staff. You certainly refused to use it at the start, but that may have changed as time went on. But I understand your rejecting of it &#8211; WinCVS was a nightmare &#8211; the tool was at fault here &#8211; the tool should fit the people (be easy enough to use so as to be accepted by them) not the other way around.</p>
<p>@Flo &#8211; Git revert &#8211; That&#8217;s what my git expert said too, until he tried it. But maybe it&#8217;s easier than it seemed at the time, once you know how.</p>
<p>Files can be ignored &#8211; Yes you&#8217;re right about the recursive feature. I&#8217;ve never needed them to be recursive but I can imagine there are plenty of situations where you do.</p>
<p>&#8220;git log&#8221; usability &#8211; True but can you name me the way to get the log to follow file moves/copies? It&#8217;s buryed many pages down on the documentation, and there are many options described similar. For example &#8220;-M Detect rename&#8221; (that&#8217;s the entire docu) is not the option I was looking for. SVN has this on by default. I think one of the reasons the SVN docu is smaller is because it does the right thing by default, but maybe I&#8217;m wrong.</p>
<p>&#8220;svn log&#8221; pager &#8211; True.</p>
<p>Library &#8211; True, but it&#8217;s still a collection of command-line tools like CVS. I don&#8217;t think that&#8217;s the right way to write software, as the only way to interact with command-line tools are arguments and lines of result. To interact with a library you need richer parameters and return values, i.e. objects and structures, which can contain other objects and structures.</p>
<p>Speed &#8211; But &#8220;svn diff&#8221; and &#8220;svn log&#8221; are also fast. This repository (28k commits): &#8220;svn diff&#8221; on a file took 0.01 seconds. &#8220;svn log&#8221; took 0.9 seconds. True if you do it on a directory it takes longer. On the entire checkout (12k regular files) a svn diff took 1.3s (but this wasn&#8217;t the first time I ran it &#8211; probably everything was in FS cache), and there were very few changes).</p>
<p>Comparison to CVS &#8211; True, that deviated from the title a bit.</p>
<p>Tortoise Git &#8211; That&#8217;s good to hear. I&#8217;m sure many of these usability issues will go away with time (the ones that are just down to bad docu and bad defaults.). I mean Tortoise CVS basically hid most of the CVS options. (e.g. &#8220;yes I want recursive!&#8221;).</p>
<p>But there is still the feeling at the back of my mind that Git solves a problem I don&#8217;t need solving, and in doing so, necessarily alienates a lot of users who not only don&#8217;t need those problems solving, but also aren&#8217;t going to take the time, or may lack the education necessary, to understand the solutions to them.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Flo Lauber</title>
		<link>http://www.databasesandlife.com/why-subversion-is-better-than-git/comment-page-1/#comment-2046</link>
		<dc:creator>Flo Lauber</dc:creator>
		<pubDate>Tue, 03 Feb 2009 16:15:59 +0000</pubDate>
		<guid isPermaLink="false">http://www.databasesandlife.com/?p=324#comment-2046</guid>
		<description>hey adrian!

git has a very steep learning curve. i think that is the very most important
argument, why it&#039;s not suitable for non-technichal staff (like designers). 

i couldn&#039;t resist commenting on some of the comparisons you listed :)

&gt; Directories being empty
$ touch path/to/empy/subdir/.gitignore
should do it. not the most elegant way, though.

&gt; Want to revert your changes? 
&gt; I have watched a “Git expert” spend 30 ...
you saw me reverting changes it in seconds :) 


&gt; Files can be ignored
i don&#039;t think SVNs Ignore scheme is good. 
first of all, it is hidden deep in some obscure svn properties (which names i cannot remember due to seldom usage), instead of a simple
plaintext file (.gitignore). 

further, the last time i used SVN&#039;s ignore feature, i coudln&#039;t find a way to
define recursive ignore patterns.
now thats ugly. do i really have to create a ignore-property for VI .swp files
for every subdir? 

with git you have a single .gitignore in the project root. single point of
configuraion (in my opinion the best way to handle this kind of issue)
and it can handle global patterns (*.swp), directories (log/)
and single files (src/lib/foo.bar). 


&gt; history in git (was help is clear)
since git is very complex and can do lots of stuff, the help is very elaborate. this is 
not very usable, indeed. (learning curve argument)
or better: it&#039;s not beginner-friendly. but it is definitely expert-friendly. 

working with git&#039;s  log features has often helped me finding stuff
faster. on the other hand, i really don&#039;t unterstand why &#039;svn log&#039; doesn&#039;t
automatically pipe to a pager.  i think the cases where you would read the log
output in a pager outnumbers the others by far.


&gt; You can force locking
afaik, not being able to LOCK is a feature of DVCS, not a bug and not
git-specific.
i might be wrong on this one.

&gt; Output is copy-paste friendly 
&gt; .. extra “a/” in front of the name ..
i agree. that sucks. has bogged me several times, too. 


&gt; Internally, Subversion separate logic from UI
git also strongly divided lowlevel (&quot;plumbing&quot;) and highlevel (&quot;porcelain&quot;) tools. 
git-pull, for example, is a shell script.


&gt; Git really is unbelievably fast.
&gt; But it only do &quot;svn up&quot; once a day&quot;
that&#039;s right. i do &#039;git log&#039; and &#039;git diff&#039; pretty regulary. especially
for a diff it&#039;s great when you have all the information locally instead 
of having to talk to the server for it. 

&gt; git error messages
i totally agree. git&#039;s error messages are often misleading and/or only understandable by
people who know the internals of git. 

At some points you say svn is better, because it can do things,
_CVS_ couldn&#039;t do. (but git can do; sometimes even better).
These would be (svn &amp; git) &gt; cvs reasons.



btw there&#039;s a TortoiseGit in development. (http://code.google.com/p/tortoisegit/ ). 

best wishes,
flo</description>
		<content:encoded><![CDATA[<p>hey adrian!</p>
<p>git has a very steep learning curve. i think that is the very most important<br />
argument, why it&#8217;s not suitable for non-technichal staff (like designers). </p>
<p>i couldn&#8217;t resist commenting on some of the comparisons you listed :)</p>
<p>&gt; Directories being empty<br />
$ touch path/to/empy/subdir/.gitignore<br />
should do it. not the most elegant way, though.</p>
<p>&gt; Want to revert your changes?<br />
&gt; I have watched a “Git expert” spend 30 &#8230;<br />
you saw me reverting changes it in seconds :) </p>
<p>&gt; Files can be ignored<br />
i don&#8217;t think SVNs Ignore scheme is good.<br />
first of all, it is hidden deep in some obscure svn properties (which names i cannot remember due to seldom usage), instead of a simple<br />
plaintext file (.gitignore). </p>
<p>further, the last time i used SVN&#8217;s ignore feature, i coudln&#8217;t find a way to<br />
define recursive ignore patterns.<br />
now thats ugly. do i really have to create a ignore-property for VI .swp files<br />
for every subdir? </p>
<p>with git you have a single .gitignore in the project root. single point of<br />
configuraion (in my opinion the best way to handle this kind of issue)<br />
and it can handle global patterns (*.swp), directories (log/)<br />
and single files (src/lib/foo.bar). </p>
<p>&gt; history in git (was help is clear)<br />
since git is very complex and can do lots of stuff, the help is very elaborate. this is<br />
not very usable, indeed. (learning curve argument)<br />
or better: it&#8217;s not beginner-friendly. but it is definitely expert-friendly. </p>
<p>working with git&#8217;s  log features has often helped me finding stuff<br />
faster. on the other hand, i really don&#8217;t unterstand why &#8217;svn log&#8217; doesn&#8217;t<br />
automatically pipe to a pager.  i think the cases where you would read the log<br />
output in a pager outnumbers the others by far.</p>
<p>&gt; You can force locking<br />
afaik, not being able to LOCK is a feature of DVCS, not a bug and not<br />
git-specific.<br />
i might be wrong on this one.</p>
<p>&gt; Output is copy-paste friendly<br />
&gt; .. extra “a/” in front of the name ..<br />
i agree. that sucks. has bogged me several times, too. </p>
<p>&gt; Internally, Subversion separate logic from UI<br />
git also strongly divided lowlevel (&#8220;plumbing&#8221;) and highlevel (&#8220;porcelain&#8221;) tools.<br />
git-pull, for example, is a shell script.</p>
<p>&gt; Git really is unbelievably fast.<br />
&gt; But it only do &#8220;svn up&#8221; once a day&#8221;<br />
that&#8217;s right. i do &#8216;git log&#8217; and &#8216;git diff&#8217; pretty regulary. especially<br />
for a diff it&#8217;s great when you have all the information locally instead<br />
of having to talk to the server for it. </p>
<p>&gt; git error messages<br />
i totally agree. git&#8217;s error messages are often misleading and/or only understandable by<br />
people who know the internals of git. </p>
<p>At some points you say svn is better, because it can do things,<br />
_CVS_ couldn&#8217;t do. (but git can do; sometimes even better).<br />
These would be (svn &amp; git) &gt; cvs reasons.</p>
<p>btw there&#8217;s a TortoiseGit in development. (<a href="http://code.google.com/p/tortoisegit/" rel="nofollow">http://code.google.com/p/tortoisegit/</a> ). </p>
<p>best wishes,<br />
flo</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Helge</title>
		<link>http://www.databasesandlife.com/why-subversion-is-better-than-git/comment-page-1/#comment-2045</link>
		<dc:creator>Helge</dc:creator>
		<pubDate>Tue, 03 Feb 2009 15:17:34 +0000</pubDate>
		<guid isPermaLink="false">http://www.databasesandlife.com/?p=324#comment-2045</guid>
		<description>Did I really refuse to use it? I think I did in the beginning but then used to check in myself. I could be mistaken however, that was many years back.</description>
		<content:encoded><![CDATA[<p>Did I really refuse to use it? I think I did in the beginning but then used to check in myself. I could be mistaken however, that was many years back.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Stripes</title>
		<link>http://www.databasesandlife.com/why-subversion-is-better-than-git/comment-page-1/#comment-2044</link>
		<dc:creator>Stripes</dc:creator>
		<pubDate>Tue, 03 Feb 2009 15:06:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.databasesandlife.com/?p=324#comment-2044</guid>
		<description>&lt;q&gt;Because Subverison stores the original versions of all files it checks out, so it can send diffs to the server, if you do a “recursive search” for any string every file shows up double: once in the file, a second time in the Subversion’s internal directory.&lt;/q&gt;

Dodge, you need to be using &lt;a href=&#039;http://petdance.com/ack/&#039; title=&quot;ack homepage&quot; rel=&quot;nofollow&quot;&gt;ack&lt;/a&gt;, sir.</description>
		<content:encoded><![CDATA[<p><q>Because Subverison stores the original versions of all files it checks out, so it can send diffs to the server, if you do a “recursive search” for any string every file shows up double: once in the file, a second time in the Subversion’s internal directory.</q></p>
<p>Dodge, you need to be using <a href='http://petdance.com/ack/' title="ack homepage" rel="nofollow">ack</a>, sir.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
