<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/stylesheets/rss.css" type="text/css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>has_many :thoughts: Tag scm</title>
    <link>http://blog.kineticweb.com/articles/tag/scm</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>Musings from a Ruby on Rails development team</description>
    <item>
      <title>Workflow, Github Global Pull Requests</title>
      <description>&lt;p&gt;Just got this question and thought I'd make a blog post out of it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;why would someone want me to pull his changes into MY fork of this project?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This happens all the time, and usually for popular projects. There are a few reasons which lead themselves nicely into a discussion on Git[hub] distributed workflows.&lt;/p&gt;

&lt;h2&gt;The Short Answer&lt;/h2&gt;

&lt;p&gt;Git's &lt;em&gt;distributed&lt;/em&gt; architecture can ensure that no single entity is the "central repository". Thus when someone feels they have important changes that all the forks and mirrors should utilize, they send out a global pull request to all or some of the forks on Github.&lt;/p&gt;

&lt;h2&gt;An Even Shorter Answer&lt;/h2&gt;

&lt;p&gt;It's a personal preference, one of Git's many available workflows. &lt;/p&gt;

&lt;h2&gt;Hardcore Forking&lt;/h2&gt;

&lt;p&gt;Personally, I have never worked that way on Github. I have done two things in maintaining forks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fork fork&lt;/strong&gt;; my fork is an entirely separate entity with a separate development cycle and process (or even end result)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Support fork&lt;/strong&gt;; my fork is a fork of the "sanctioned" main repo, and I am doing support work for the main project I will pull request to the "gate keeper" of that project (the main author or project maintainer).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now if I really felt something was of urgency to all the forks I might do a global pull request if the main repo author didn't like my commit, he's gone AWOL and/or I still felt it was important (security, etc).&lt;/p&gt;

&lt;p&gt;Otherwise, fork maintainers should have a &lt;strong&gt;local branch for tracking&lt;/strong&gt; every other remote repository of other fork maintainer's. This is what I do to track only people I think have good commits that I can pull and include into my fork repo. Branches in this respect provide the links to other "node" repositories in the distributed glory which is Git.&lt;/p&gt;

&lt;p&gt;Git suggests in their man pages and docs that you make the development decision to only pull in new commits, and never pushing out. Tracking remote repos demonstrates the beauty of following this workflow of "pull only".  &lt;/p&gt;

&lt;h2&gt;Just Pull It&lt;/h2&gt;

&lt;p&gt;For shits and giggles lets build an example to demonstrate why "pull only" might be such a great idea for distributed project development. &lt;/p&gt;

&lt;p&gt;I can think of no better example than Roy Fielding and the &lt;a href="http://www.ietf.org/"&gt;IETF&lt;/a&gt;'s &lt;a href="http://tools.ietf.org/html/rfc2616"&gt;HTTP standard&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Hypertext Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypermedia information systems. It is a generic, stateless, protocol which can be used for many tasks beyond its use for hypertext...&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We are going to map the following HTTP technologies to git fetching commands.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;git-push maps to &lt;a href="http://is.gd/53P"&gt;Comet&lt;/a&gt;, &lt;em&gt;a neologism to describe a web application model in which a long-held HTTP request allows a web server to push data to a browser, without the browser explicitly requesting it.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;git-pull maps to &lt;a href="http://is.gd/lepq"&gt;Ajax&lt;/a&gt;, &lt;em&gt;an acronym which describes a web browser technology capable of requesting only the content that needs to be updated, thus drastically reducing bandwidth usage and load time.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Comet, in general, uses the web server to push updates to the browser when they are available. Handy at times but breaks the HTTP protocol. It requires the server-side to maintain a connection and known state as the server needs to know whom the client is and where to send the new data. As we all know that's not very efficient in the grand scheme of HTTP. State is tough to keep synchronized. It limits the ease of going on and offline, as well as the client moving around across the internet (changing IPs, etc).&lt;/p&gt;

&lt;p&gt;In contrast Ajax requests are much lighter. The client maintains when to request new content. Thus making a decision of how to handle the content, what it is and where it's coming from. When you are only doing git-pull you are choosing what to add and where to add it. There is more control over your own repository.&lt;/p&gt;

&lt;h2&gt;Summing it all Up&lt;/h2&gt;

&lt;p&gt;In a distributed environment everyone becomes the gate keeper to their own repository. &lt;/p&gt;

&lt;p&gt;This is great for open source projects because the code is always kept free from central dictatorship. &lt;/p&gt;

&lt;p&gt;Power is gained through this autonomous workflow when you allow anyone, at any moment, to add changes and bug fixes to the project or pull down someone else's updates for review and merging.&lt;/p&gt;</description>
      <pubDate>Sat, 28 Feb 2009 12:14:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:ff8a6bc1-30f2-4360-8f5d-6198dd82bbc2</guid>
      <author>Justin Reagor</author>
      <link>http://blog.kineticweb.com/articles/2009/02/28/workflow-github-global-pull-requests</link>
      <category>git</category>
      <category>scm</category>
      <category>OpenSource</category>
    </item>
    <item>
      <title>Compiling Git for Mac OS X Leopard (10.5)</title>
      <description>&lt;p&gt;The following is the exact compilation steps I took for compiling Git onto the new retail version of Leopard. Definitely a big change since my previous article on installing in Tiger (next to pre-installed &lt;span class="caps"&gt;SVN&lt;/span&gt;, bye bye &lt;span class="caps"&gt;CVS&lt;/span&gt;!)...&lt;/p&gt;


&lt;strong&gt;Commands&lt;/strong&gt;
&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_shell "&gt;curl -O http://surfnet.dl.sourceforge.net/sourceforge/expat/expat-2.0.1.tar.gz
tar zxvf expat-2.0.1.tar.gz 
cd expat-2.0.1
./configure --prefix=/usr/local
make
make check
sudo make install
cd ..

curl -O http://kernel.org/pub/software/scm/git/git-1.5.3.4.tar.bz2
tar jxvf git-1.5.3.4.tar.bz2
cd git-1.5.3.4
make prefix=/usr/local all
make prefix=/usr/local test &amp;amp;&amp;amp; echo $?
sudo make prefix=/usr/local install
cd ..

curl -O http://www.kernel.org/pub/software/scm/git/git-manpages-1.5.3.4.tar.bz2
sudo tar xjv -C /usr/local/man -f git-manpages-1.5.3.4.tar.bz2&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;&lt;strong&gt;Notes&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;You may need to adjust your default &lt;span class="caps"&gt;MANPATH&lt;/span&gt; environment variable. You can either apply something along the lines of&amp;#8230;&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_shell "&gt;export MANPATH=&amp;quot;/usr/local/man:$MANPATH&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;...to your .bash_login, profile or what have you. Or you can look into editing /private/etc/man.conf (or un-tar the manpages into a directory in your &lt;span class="caps"&gt;MANPATH&lt;/span&gt; already).&lt;/p&gt;


	&lt;p&gt;Also, no need to fiddle around with &lt;span class="caps"&gt;SVN&lt;/span&gt; bindings for Perl, or whatever the problem was with &lt;em&gt;git-svn&lt;/em&gt; before.&lt;/p&gt;


	&lt;p&gt;You may also wish to surf our past articles hear on this blog for upgrading Git. The upgrading should be identical on Leopard.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Next Time&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;My next article will cover developing outside of a traditional distributed Git environment. Using Git to manage personal branching/merging/local copies, then committing to a main &lt;span class="caps"&gt;SVN&lt;/span&gt; repo. Happy hacking.&lt;/p&gt;</description>
      <pubDate>Tue, 30 Oct 2007 23:48:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:0cdaff9a-4cd2-4455-a510-9ec2e01d93c2</guid>
      <author>Justin Reagor</author>
      <link>http://blog.kineticweb.com/articles/2007/10/30/compiling-git-for-mac-os-x-leopard-10-5</link>
      <category>git</category>
      <category>scm</category>
      <category>OSX</category>
      <category>leopard</category>
      <trackback:ping>http://blog.kineticweb.com/articles/trackback/74</trackback:ping>
    </item>
    <item>
      <title>Updates on Git use in Mac OS X (Tiger)</title>
      <description>&lt;p&gt;Note: This article is still on using Git under Tiger (10.4.10, respectively)... Until I have time to run down to the Apple store tomorrow and do a nice clean install of Leopard onto my Macbook, I will not have the appropriate means of writing a proper article on Git use under 10.5.&lt;/p&gt;


	&lt;p&gt;This is for anyone that reads this blog, and used my previous article on compiling Git. I left the proper Git tutorials to the behmouth of external articles out there, on using Git as Rails project/deployment &lt;span class="caps"&gt;SCM&lt;/span&gt;. I&amp;#8217;m also a firm believer in &lt;span class="caps"&gt;DIY&lt;/span&gt;, and the same applies to learning new things. Nobody ever taught me a damn subject (completely) in person on anything I use day-to-day&amp;#8230; so &lt;span class="caps"&gt;DIY&lt;/span&gt; and&amp;#8230;&lt;/p&gt;


&lt;div style="text-align:center;margin:10px;"&gt;
&lt;a href="http://git.or.cz/" target="_blank"&gt;&lt;img src="http://git.or.cz/git-logo.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Welcome to the wonderful world of Git folks!&lt;/strong&gt;
&lt;/div&gt;

	&lt;p&gt;Since my last article, actually a day ago, Geoffrey Grosenbach over at &lt;a href="http://www.peepcode.com"&gt;Peepcode Screencasts&lt;/a&gt; released &lt;a href="http://peepcode.com/products/git"&gt;Video 015, on Git&lt;/a&gt;. This should really, visually, help out those that are really having problems crasping the simple things in Git. There are other &lt;a href="http://blog.nbwd.co.uk/2007/8/16/using-git-for-rails-development"&gt;numerous&lt;/a&gt; &lt;a href="http://scie.nti.st/2007/9/4/capistrano-2-0-with-git-shared-repository"&gt;advances&lt;/a&gt; in &lt;a href="http://cheat.errtheblog.com/s/gitsvn/"&gt;using&lt;/a&gt; Git with your Rails applications. So I&amp;#8217;ll keep things &lt;span class="caps"&gt;DRY&lt;/span&gt; here&amp;#8230;&lt;/p&gt;


	&lt;p&gt;One thing I will update you with though, a quick and simple way to update your source compiled installation of Git, by using Git&amp;#8217;s repository itself.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_shell "&gt;# git clone git://git.kernel.org/pub/scm/git/git.git
# cd git
# make configure
# ./configure --prefix=/usr/local
# make all doc
# sudo make install install-doc&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;You will now have a completely refreshed version of Git on your system.&lt;/p&gt;


	&lt;p&gt;Take note, Grosenbach mentions the benefits of having a compiled version of Git on your system. He does not, however, give more than a quick mention that it may be slightly difficult gathering up the proper dependency chain onto your system. That was what my previous article was for.&lt;/p&gt;


	&lt;p&gt;Enjoy, and let me know how things go for you&amp;#8230; justin_at_kineticweb.com.&lt;/p&gt;</description>
      <pubDate>Thu, 25 Oct 2007 23:46:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:00613e8c-c07f-49d8-ab44-75debc11d631</guid>
      <author>Justin Reagor</author>
      <link>http://blog.kineticweb.com/articles/2007/10/25/updates-on-git-use-in-mac-os-x-tiger</link>
      <category>git</category>
      <category>scm</category>
      <category>svn</category>
      <category>capistrano</category>
      <trackback:ping>http://blog.kineticweb.com/articles/trackback/70</trackback:ping>
    </item>
    <item>
      <title>Compiling Git for Mac OS X 10.4.10 (Intel)</title>
      <description>&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; Checkout the &lt;a href="http://blog.kineticweb.com/articles/2007/10/30/compiling-git-for-mac-os-x-leopard-10-5"&gt;Leopard version of this &lt;span class="caps"&gt;OS X&lt;/span&gt; Git howto&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;The following is a step-by-step, dependency chain installation guide to getting up and running 
with &lt;a href="http://git.or.cz/"&gt;Git&lt;/a&gt; on &lt;span class="caps"&gt;OS X&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;Only one required version number was needed, docbook-xml v4.2, otherwise you can use the latest versions
of the packages you will be installing, including Git (please note newer version of the below packages
may require other dependencies).&lt;/p&gt;


	&lt;p&gt;You may have wget installed already, though this guide includes wget as it is not natively included 
in Mac &lt;span class="caps"&gt;OS X&lt;/span&gt;. This was needed to pull down docbook-xml 4.2 from the original wiki article I followed, 
noted at the bottom of this article.&lt;/p&gt;


	&lt;p&gt;The following tarballs were used for my installation, in alphabetical order&amp;#8230;&lt;/p&gt;


	&lt;p&gt;asciidoc-8.2.2.tar.gz&lt;br/&gt;
docbook-xsl-1.73.1.tar.gz&lt;br/&gt;
expat-2.0.1.tar.gz&lt;br/&gt;
getopt-1.1.4.tar.gz&lt;br/&gt;
gettext-0.16.1.tar.gz&lt;br/&gt;
git-1.5.2.5.tar.gz&lt;br/&gt;
wget-1.10.2.tar.gz&lt;br/&gt;
xmlto-0.0.18.tar.bz2&lt;br/&gt;&lt;/p&gt;


	&lt;p&gt;1. Download and install expat; dead simple configure/make/make check/sudo make install&lt;/p&gt;


	&lt;p&gt;2. Download and install asciidoc; sudo ./install.sh (requires python &amp;gt;=2.3)&lt;/p&gt;


Test asciidoc by:
	&lt;ul&gt;
	&lt;li&gt;rm doc/asciidoc.html&lt;/li&gt;
		&lt;li&gt;asciidoc doc/asciidoc.txt&lt;/li&gt;
		&lt;li&gt;Should re-generate doc/asciidoc.html&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;3. Download and install gettext; simple configure/make/make check/sudo make install&lt;/p&gt;


4. Download and install getopt; 
	&lt;ul&gt;
	&lt;li&gt;Change root Makefile &lt;span class="caps"&gt;LDFLAGS&lt;/span&gt;=-lintl&lt;/li&gt;
		&lt;li&gt;make/sudo make install&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;5. Download and install wget; dead simple configure/make/sudo make install&lt;/p&gt;


6. Tricky part&amp;#8230; installing xmlto (I used docbook-xsl v1.73.1, docbook-xml 4.2 was required by xmlto)
	&lt;ul&gt;
	&lt;li&gt;sudo mkdir /etc/xml&lt;/li&gt;
		&lt;li&gt;sudo xmlcatalog&amp;#8212;noout&amp;#8212;create /etc/xml/catalog&lt;/li&gt;
		&lt;li&gt;Download and unpack docbook-xsl&lt;/li&gt;
		&lt;li&gt;sudo mkdir -p /usr/local/share/docbook/xsl&lt;/li&gt;
		&lt;li&gt;mv ./docbook-xsl-1.73.1/ /usr/local/share/docbook/xsl/1.73.1&lt;/li&gt;
		&lt;li&gt;sudo xmlcatalog&amp;#8212;noout \&lt;br/&gt;
    &amp;#8212;add &amp;#8216;nextCatalog&amp;#8217; &amp;#8217;&amp;#8217; &amp;#8216;file:///usr/local/share/docbook/xsl/1.73.1/catalog.xml&amp;#8217; \&lt;br/&gt;
    &amp;#8212;create /etc/xml/catalog&lt;br/&gt;&lt;/li&gt;
		&lt;li&gt;sudo mkdir -p /usr/local/share/docbook/xml&lt;/li&gt;
		&lt;li&gt;cd /usr/local/share/docbook/xml&lt;/li&gt;
		&lt;li&gt;sudo wget -r -np -nH -l 0&amp;#8212;cut-dirs=2 http://www.oasis-open.org/docbook/xml/4.2&lt;/li&gt;
		&lt;li&gt;sudo xmlcatalog&amp;#8212;noout \&lt;br/&gt;
    &amp;#8212;add &amp;#8216;nextCatalog&amp;#8217; &amp;#8217;&amp;#8217; &amp;#8216;file:///usr/local/share/docbook/xml/4.2/catalog.xml&amp;#8217; \&lt;br/&gt;
    &amp;#8212;create /etc/xml/catalog&lt;br/&gt;&lt;/li&gt;
		&lt;li&gt;Download and install xmlto; simple configure/make/sudo make install&lt;/li&gt;
	&lt;/ul&gt;


7. Download and install git source&amp;#8230;
	&lt;ul&gt;
	&lt;li&gt;make prefix=/usr/local all doc&lt;/li&gt;
		&lt;li&gt;make prefix=/usr/local test&lt;/li&gt;
		&lt;li&gt;sudo make prefix=/usr/local install install-doc&lt;/li&gt;
	&lt;/ul&gt;


8. Test the installation of Git on your system by&amp;#8230;
	&lt;ul&gt;
	&lt;li&gt;rails some_stupid_demo &amp;amp;&amp;amp; cd some_stupid_demo&lt;/li&gt;
		&lt;li&gt;git-init&lt;/li&gt;
		&lt;li&gt;git-add .&lt;/li&gt;
		&lt;li&gt;git-commit -m &amp;#8216;This is the beginning of a beautiful friendship&amp;#8217;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;&lt;a href="http://wincent.com/knowledge-base/Installing_Git_1.5.2.3_on_Mac_OS_X_Tiger"&gt;http://wincent.com/knowledge-base/Installing_Git_1.5.2.3_on_Mac_OS_X_Tiger&lt;/a&gt;
Taken from above url, but shortened (with some small modifications) from the trial-and-error description above.&lt;/p&gt;


	&lt;p&gt;A helpful start to using Git for Rails development can be found by the great guys over in the UK at New Bamboo&amp;#8230;
&lt;a href="http://blog.nbwd.co.uk/2007/8/16/using-git-for-rails-development"&gt;http://blog.nbwd.co.uk/2007/8/16/using-git-for-rails-development&lt;/a&gt;
I&amp;#8217;ve found this to be an excellent guide, as it includes git-svn for &lt;span class="caps"&gt;SCM&lt;/span&gt; with Git using current &lt;span class="caps"&gt;SVN&lt;/span&gt; repo&amp;#8217;s.&lt;/p&gt;


	&lt;p&gt;Everday Git can be found here&amp;#8230;
&lt;a href="http://www.kernel.org/pub/software/scm/git/docs/everyday.html"&gt;http://www.kernel.org/pub/software/scm/git/docs/everyday.html&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Sun, 26 Aug 2007 00:13:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:0ac6b9d6-f1b2-4f0f-afff-36fa47ae5786</guid>
      <author>Justin Reagor</author>
      <link>http://blog.kineticweb.com/articles/2007/08/26/compiling-git-for-mac-os-x-10-4-10-intel</link>
      <category>scm</category>
      <category>Rails</category>
      <category>install</category>
      <trackback:ping>http://blog.kineticweb.com/articles/trackback/55</trackback:ping>
    </item>
  </channel>
</rss>
