<?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>gitguru &#187; scm</title>
	<atom:link href="http://gitguru.com/tag/scm/feed/" rel="self" type="application/rss+xml" />
	<link>http://gitguru.com</link>
	<description>meditations on scm using git</description>
	<lastBuildDate>Wed, 25 Mar 2009 04:32:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Git Enterprise Requirements</title>
		<link>http://gitguru.com/2009/03/18/git-enterprise-requirements/</link>
		<comments>http://gitguru.com/2009/03/18/git-enterprise-requirements/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 18:01:23 +0000</pubDate>
		<dc:creator>long</dc:creator>
				<category><![CDATA[enterprise]]></category>
		<category><![CDATA[scm]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[workflow]]></category>

		<guid isPermaLink="false">http://gitguru.com/?p=220</guid>
		<description><![CDATA[If you&#8217;re an individual developer or a small team, I wouldn&#8217;t think twice before recommending using Git.
But beyond that I have some reservations.  At least for where Git is right now.
That hesitation is from the experience I&#8217;ve gained from performing start-to-finish installations of enterprise-class SCM tools including IBM Rational ClearCase and CA Software Change Manager.  [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re an individual developer or a small team, I wouldn&#8217;t think twice before recommending using Git.</p>
<p>But beyond that I have some reservations.  At least for where Git is right now.</p>
<p>That hesitation is from the experience I&#8217;ve gained from performing start-to-finish installations of enterprise-class SCM tools including <a href="http://www-01.ibm.com/software/awdtools/clearcase/">IBM Rational ClearCase</a> and <a href="http://www.ca.com/us/products/product.aspx?ID=255">CA Software Change Manager</a>.  What separates these tools from Git (and SVN) is that they address processes and workflows, security and roles.  And the enterprise world is all about that.</p>
<p>A standard installation of Git, on the other hand, is a blank slate.  You can do what you will with it.  Which is great for a developer who dreams of having that flexibility but gives SCM admins nightmares because they usually have to clean up whatever goes horribly wrong.</p>
<p>What allows Git to have a chance of making serious inroads into the enterprise world is that it&#8217;s open, relies on standard mechanisms such as ssh and has a <a href="http://www.kernel.org/pub/software/scm/git/docs/githooks.html">hook system</a> that is triggered by actions on a repository.  New functionality can be constructed around the version engine core.</p>
<p>So what exactly does Git need to have built around it?</p>
<p>My minimum set of requirements would include</p>
<h4>1. Security and Access Control</h4>
<p>Git punts on security and relies directly on the OS/filesystem and transport protocol (git:, http:, or ssh:) to control read and write access to repositories.  And current add-ons such as <a href="http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way">gitosis</a> only address access at the repository level, not the level of branches, tags, etc.</p>
<p>Implementation of a unified security and a fine-grain access/locking mechanism is an absolute necessity before Git can be even considered as a serious enterprise tool.</p>
<h4>2. Integration with the &#8220;typical&#8221; Development Environment</h4>
<p>My experience with Git is with <a href="http://rubyonrails.org/">Rails</a> and Mac OS X and Linux.  While this isn&#8217;t unusual in the startup world, it&#8217;s not the &#8220;typical&#8221; enterprise development environment.  That instead would be Visual Studio or an Eclipse-based IDE on Windows.</p>
<p>We need to support projects such as</p>
<ul>
<li> <a href="http://code.google.com/p/msysgit/">msysgit</a> &#8211; a native Windows implementation of Git</li>
<li><a href="http://www.jgit.org/">JGit</a> &#8211; a Java GIT library implementation</li>
<li><a href="http://code.google.com/p/egit/">EGit</a> &#8211; an Eclipse plugin based on JGit</li>
</ul>
<p>if Git is to gain traction in the enterprise.</p>
<h4>3. Repository Visualization</h4>
<p>If you have development of even the slightest complexity, having a visual tool to view the branch structure and where commits are located is a necessity.  Some existing GUI interfaces include:</p>
<ul>
<li><a href="http://www.kernel.org/pub/software/scm/git/docs/git-gui.html">git-gui</a> (multi-platform tcl/tk)</li>
<li><a href="http://www.kernel.org/pub/software/scm/git/docs/gitk.html">gitk</a> (multi-platform tcl/tk)</li>
<li><a href="http://git.kernel.org/?p=qgit/qgit4.git;a=summary">qgit</a> (multi-platform Qt)</li>
<li><a href="http://gitx.frim.nl/">GitX</a> (Mac OS X)</li>
<li><a href="http://code.google.com/p/gitextensions/">Git Extensions</a> (Windows)</li>
</ul>
<p>These tools, however, work on just local repositories.  Remote repository branching is only seen if you&#8217;ve fetched the information.</p>
<p>An enterprise tool will need to start from any &#8220;canonical&#8221; shared repository and then add branching information from local developer repositories in order to show the extended branch network.  This would provide a visualization of the development taking place across the organization.</p>
<h4>4. Example Workflows</h4>
<p>Git doesn&#8217;t mandate any particular development workflow.  Even the de-facto standard <a href="http://github.com/guides/pull-requests">pull-request</a> method of sharing updates is really a suggestion rather than an enforceable process (unless you&#8217;re working under a <a href="http://www.wired.com/wired/archive/11.11/linus_pr.html">benevolent dictatorship</a>).</p>
<p>Unfortunately you&#8217;re going to find that given <em>n</em> developers, you&#8217;ll likely see a minimum of <em>n+1</em> ways of using a tool.</p>
<p>Example enforceable workflows for common practices including agile development, lifecycle management and deployment need to be created via the hook mechanism and made widely available.  An enterprise SCM team can then use these workflows as a starting point for customizing their Git installation.</p>
<h4>5. Simplified Administration</h4>
<p>Installing and using Git for a local repository is reasonably straightforward.  Configuring a repository for remote access is a bit more complicated:</p>
<ul>
<li>How do I create a bare repository from an existing one?</li>
<li>Which protocol should I use? git, http, or ssh?</li>
<li>How do I restrict access?</li>
<li>How do I add and identify repository users?</li>
<li>What happens if I need to add a new repository?</li>
</ul>
<p>And if you have to host any appreciable number or sizeable sets of repositories, you need to start worrying about storage, load, and backups.</p>
<p>So is this at all possible? Can an enterprise-ready tool be built around a Git core?</p>
<p>Absolutely yes.</p>
<p>If you have any doubts, you just need to look at what <a href="http://github.com/">GitHub</a> has done with simplifying repository creation/forking, security and collaboration setup, and tools for visualizing the development network.  Or how <a href="http://heroku.com/">Heroku</a> has made Git a part of the <a href="http://heroku.com/docs#toc1">application deployment process</a>.</p>
<p>It&#8217;s just really a question of when someone&#8217;s going to put it all together for the enterprise.</p>
]]></content:encoded>
			<wfw:commentRss>http://gitguru.com/2009/03/18/git-enterprise-requirements/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Git is just a tool</title>
		<link>http://gitguru.com/2009/01/29/git-is-just-a-tool/</link>
		<comments>http://gitguru.com/2009/01/29/git-is-just-a-tool/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 07:15:20 +0000</pubDate>
		<dc:creator>long</dc:creator>
				<category><![CDATA[git]]></category>
		<category><![CDATA[scm]]></category>

		<guid isPermaLink="false">http://gitguru.com/?p=3</guid>
		<description><![CDATA[Repeat after me: Git is just a tool.
That&#8217;s not a bad thing.  It simply means that it&#8217;s not any more or any less than what it claims to be: a distributed version control system.  And it&#8217;s very good at what it does.
But once you get beyond the initial repository setup and the standard add/commit cycle, [...]]]></description>
			<content:encoded><![CDATA[<p>Repeat after me: <a href="http://git-scm.com/">Git</a> is just a tool.</p>
<p>That&#8217;s not a bad thing.  It simply means that it&#8217;s not any more or any less than what it claims to be: a distributed version control system.  And it&#8217;s very good at what it does.</p>
<p>But once you get beyond the initial repository setup and the standard add/commit cycle, you&#8217;re inevitably going to have a few questions:</p>
<ul>
<li> How often should I commit my changes?</li>
<li> When should I create a new branch?</li>
<li> What do I need to do to share my updates?</li>
</ul>
<p>And these lead to a few more</p>
<ul>
<li> How do I manage all these branches?</li>
<li> When should I merge the changes from my branches together?</li>
<li> What&#8217;s the difference between a merge and rebase?</li>
</ul>
<p>If you&#8217;re working in a team, you&#8217;ll probably also have</p>
<ul>
<li> What&#8217;s everyone working on?</li>
<li> Do I have the latest updates?</li>
<li> When do I submit my changes to the team?</li>
</ul>
<p>And if you&#8217;ve been going for a while, you&#8217;ll want to know</p>
<ul>
<li>How do I simultaneously manage a release and a development version?</li>
<li>Did that production fix get back into development?</li>
<li>What did I just release?</li>
</ul>
<p>At this point, you&#8217;re starting to slip into the realm of <a href="http://en.wikipedia.org/wiki/Software_configuration_management">software configuration management (SCM)</a>.  Version control is just a small part of that.</p>
<p>The bad news is that Git doesn&#8217;t say anything about how you should do any of this (FYI, the <a href="http://github.com/guides/pull-requests">pull request</a> is more a suggestion than a formal required process even if it&#8217;s what <a href="http://www.youtube.com/watch?v=4XpnKHJAok8">Linus does</a>).  It&#8217;s also the good news: You have all the technical capabilities you need but you&#8217;re not tied to a rigid one-size-fits-all process.</p>
<p>The key thing to remember is that Git isn&#8217;t the first VCS tool out there, even if it might be the first one you&#8217;re using.  There&#8217;s an amazing wealth of SCM knowledge to tap into.  It&#8217;s a matter of starting with what works and figuring out how Git fits into that.</p>
]]></content:encoded>
			<wfw:commentRss>http://gitguru.com/2009/01/29/git-is-just-a-tool/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
