<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Chris JeanChris Jean &#187; Subversion</title>
	<atom:link href="http://chrisjean.com/tag/subversion/feed/" rel="self" type="application/rss+xml" />
	<link>http://chrisjean.com</link>
	<description>Linux, WordPress, programming, anime, and other stuff</description>
	<lastBuildDate>Mon, 16 Jan 2012 15:22:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Goodbye Subversion, Hello Git</title>
		<link>http://chrisjean.com/2009/03/17/goodbye-subversion-hello-git/</link>
		<comments>http://chrisjean.com/2009/03/17/goodbye-subversion-hello-git/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 21:33:29 +0000</pubDate>
		<dc:creator>Chris Jean</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Random Ramblings]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Gitosis]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[VCS]]></category>

		<guid isPermaLink="false">http://gaarai.com/?p=1376</guid>
		<description><![CDATA[As I mentioned before, I want to switch from using Subversion for project code collaboration and versioning to Git. I&#8217;m switching not because I have some idealogical dread of Subversion or its methods. In fact, I quite like how much easier Subversion has made handling code collaboration. The problem I ran into is that Subversion [...]]]></description>
			<content:encoded><![CDATA[<!-- filtered -->
<p>As <a href="http://chrisjean.com/2009/02/21/git-project-description-file-hasnt-been-set/" target="_blank">I mentioned before</a>, I want to switch from using <a href="http://subversion.tigris.org/" target="_blank">Subversion</a> for project code collaboration and versioning to <a href="http://git-scm.com/" target="_blank">Git</a>.</p>
<p>I&#8217;m switching not because I have some idealogical dread of Subversion or its methods. In fact, I quite like how much easier Subversion has made handling code collaboration. The problem I ran into is that Subversion has become doggedly slow and bloated.</p>
<p>For example, a simple project with a current working size of 2.9MB has a Subversion repository that is a massive 98MB in size. Furthermore, it takes a full four minutes to commit a change, even a simple one-line change to a text file. During this commit process, my server&#8217;s dual quad-core processors are essentially maxed. Why the repository has become so amazingly large and why the commits take so long, I&#8217;ll never know. The maxing out of my server for four minutes per commit is also unacceptable since there are times where minor changes will need to be made to more than a dozen repositories at a time. Multiply the number of commits by 4 minutes a piece, and not only is a terminal on my system tied up for more than an hour, but my server&#8217;s CPU is maxed for just as long.</p>
<p>Beginning last week, I dug into Git and learned what I needed to know. The initial impressions are great; however, Git is not without its problems either. The primary problem with Git is that its syntax is extremely-obscure, IMHO.</p>
<p><span id="more-1376"></span></p>
<p>Subversion was my first <a href="http://en.wikipedia.org/wiki/Version_control_system" target="_blank">version control system</a>, and I only started using it a few months ago. Still, I had no problem setting up remote Subversion repositories, properly setting up read-only and write privilege rules for specific people, getting the repositories to work appropriately, writing automation scripts in Perl that linked into the hooks, and wrapping the whole deal in WordPress to allow for easy management of the repositories and quick access to archives. From my initial playing around with Subversion to having a functional system in use complete with custom code supporting it took maybe two or three work days worth of time.</p>
<p>My progress with Git has been much slower. You might wonder why I&#8217;m bothering with Git and not looking elsewhere then. Frankly, I have found that Git has everything I want (speed, lack of redundant file stores, hooks, etc). It also looks like Git can offer some nice enhancements to how we develop projects as branches can be used without having severe performance penalties. The only true problem I&#8217;ve found with Git so far is the relatively-large learning curve. Fortunately, I&#8217;m just about done with reading, and I&#8217;ve learned all the basics I need to know to implement a system I want.</p>
<p>I started with Git by jumping into the wading pool at <a href="http://github.com/" target="_blank">GitHub</a>. My experience was very good. I highly recommend using GitHub if you have a public project, a private project without specific needs, or just want to try Git out. There are a lot of options at GitHub, and they very nearly had everything I wanted. One of the main limitations at GitHub is the inability for an account to allow other accounts to make repositories for it. For many projects/companies, this won&#8217;t be a problem. For us, it is a critical issue. I want to allow certain people to create new repositories, but I don&#8217;t want to have to give them &#8220;the keys&#8221; to the main account in order to allow them to do this.</p>
<p>So, I&#8217;m sticking with a self-hosted solution for our repositories since I can code up a clean interface that allows anyone with commit access to create whatever repositories they need. I also gain many other customization advantages this way.</p>
<p>Setting up remote repositories, especially private ones with selective access can be a challenge with the tools that come with Git. In fact, they were so much of a challenge that I gave up on them. I ended up using <a href="http://eagain.net/gitweb/?p=gitosis.git;a=summary" target="_blank">Gitosis</a> which supports multiple &#8220;users&#8221; that authenticate using their SSH key and allows for selective repository access for these users.</p>
<p>Since Gitosis doesn&#8217;t appear to have any official site, it&#8217;s use, just like Git itself, is a bit of a difficult thing to grasp. Fortunately, there are some great tutorials on getting starting with Gitosis. I recommend <a href="http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way" target="_blank">this Gitosis tutorial</a> as it is the main one that I referred to in order to get everything working.</p>
<p>If this topic looks like it is gaining interest, I&#8217;ll probably do some follow up post with more specifics of how I set everything up, what config tweaks I used, and maybe details about my custom interfaces.</p>
<p>FYI: I converted that 98MB Subversion repository to Git using the git-svn tool. The same repository with all the tags and history preserved weighed in at a mere 6.9MB as a Git repository.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrisjean.com/2009/03/17/goodbye-subversion-hello-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>git: &#8220;Project description file hasn&#8217;t been set&#8221;</title>
		<link>http://chrisjean.com/2009/02/21/git-project-description-file-hasnt-been-set/</link>
		<comments>http://chrisjean.com/2009/02/21/git-project-description-file-hasnt-been-set/#comments</comments>
		<pubDate>Sat, 21 Feb 2009 06:00:49 +0000</pubDate>
		<dc:creator>Chris Jean</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tips 'n Tricks]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://gaarai.com/?p=1163</guid>
		<description><![CDATA[I&#8217;m playing around with git as a possible replacement for Subversion (svn). I&#8217;ll probably blog about my reasons for wanting to switch and also have some tutorials. For now, I wanted to quickly share the fix for a problem I encountered that wasn&#8217;t really handled by the documentation. I set up a bare remote repository [...]]]></description>
			<content:encoded><![CDATA[<!-- filtered -->
<p>I&#8217;m playing around with <a href="http://git-scm.com/" target="_blank">git</a> as a possible replacement for <a href="http://subversion.tigris.org/" target="_blank">Subversion</a> (svn). I&#8217;ll probably blog about my reasons for wanting to switch and also have some tutorials. For now, I wanted to quickly share the fix for a problem I encountered that wasn&#8217;t really handled by the <a href="http://git-scm.com/documentation" target="_blank">documentation</a>.</p>
<p>I set up a bare remote repository to test git out. Everything looked good as I got this going, but then I hit a big snag.</p>
<p>When I tried to push the local repository back to the remote repository, I received the following error:</p>
<p><span id="more-1163"></span></p>
<div class="code">$ git push repository master<br />
Counting objects: 9, done.<br />
Compressing objects: 100% (5/5), done.<br />
Writing objects: 100% (5/5), 531 bytes, done.<br />
Total 5 (delta 3), reused 0 (delta 0)<br />
*** Project description file hasn&#8217;t been set<br />
error: hooks/update exited with error code 1<br />
error: hook declined to update refs/heads/master<br />
To ssh://username@hostname/projectname<br />
! [remote rejected] master -&gt; master (hook declined)<br />
error: failed to push some refs to &#8216;ssh://username@hostname/~/projectname&#8217;</div>
<p>I have to say that this was completely unexpected as I had followed tutorials in the official documentation up to this point. None of the steps said anything about a &#8220;project description file&#8221; nor about new bare repositories requiring additional setup in order to be pushed to.</p>
<p>Fortunately, this problem wasn&#8217;t difficult to fix. There is a file inside the bare repository&#8217;s root called description. I simply modified this file and the next time I pushed the changes, it worked like a charm.</p>
<p>If your bare repository is in ~/projects/test.git, you would do the following:</p>
<ol>
<li>Modify the description file:
<div class="code">vi ~/projects/test.git/description</div>
</li>
<li>Delete the existing text:
<div class="code">Unnamed repository; edit this file to name it for gitweb.</div>
</li>
<li>Put whatever description you want for the repository in the file:
<div class="code">My Really Awesome Project</div>
</li>
<li>As always, save the file and close vi.</li>
</ol>
<p>Now you can push without this nasty error hanging you up.</p>
<p>As a side note, the developers of git have a hosted git solution that is really cool. It&#8217;s called <a href="http://github.com/" target="_blank">github</a>, you should check it out.</p>
]]></content:encoded>
			<wfw:commentRss>http://chrisjean.com/2009/02/21/git-project-description-file-hasnt-been-set/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

