<?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>James Emmrich &#187; Web Development</title>
	<atom:link href="http://www.lwp.ca/james/tag/web-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lwp.ca/james</link>
	<description>Just another motorcycle linux geek</description>
	<lastBuildDate>Mon, 18 Apr 2011 15:38:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Using Git to manage online website projects</title>
		<link>http://www.lwp.ca/james/2010/03/using-git-to-manage-online-website-projects/</link>
		<comments>http://www.lwp.ca/james/2010/03/using-git-to-manage-online-website-projects/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 20:25:33 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[ProTip]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.lwp.ca/james/?p=522</guid>
		<description><![CDATA[I have recently been getting into using Git for my more complicated projects. After a bit of google foo, I came across some references to using Git to push and pull website updates. This post is my way of remembering how I set up new git repositories. I did not &#8220;figure&#8221; this out myself, but [...]]]></description>
			<content:encoded><![CDATA[<p>I have recently been getting into using Git for my more complicated projects. After a bit of google foo, I came across some references to using Git to push and pull website updates. This post is my way of remembering how I set up new git repositories. I did not &#8220;figure&#8221; this out myself, but I have linked to the originator. But I did modify it slightly.</p>
<p><strong>Related material:</strong></p>
<ul>
<li>This is one of the websites that I used as a reference, quite a bit is the same, even the borrowed graphic:<br />
<a class="linkification-ext" title="Linkification: http://dmiessler.com/blog/using-git-to-maintain-your-website" href="http://dmiessler.com/blog/using-git-to-maintain-your-website">http://dmiessler.com/blog/using-git-to-maintain-your-website</a></li>
<li>Some basic information on Git usage<br />
<a class="linkification-ext" title="Linkification: http://www.kernel.org/pub/software/scm/git-core/docs/v1.2.6/tutorial.html" href="http://www.kernel.org/pub/software/scm/git-core/docs/v1.2.6/tutorial.html">http://www.kernel.org/pub/software/scm/git-core/docs/v1.2.6/tutorial.html</a></li>
</ul>
<p><strong>First how it works</strong><br />
The server has the htdocs of the live website as well as a htdocs.git as the central main repository. Everything will be pushed there, and once completed, automatically pulled into the live website. The structure is as so:</p>
<p><a href="http://www.lwp.ca/james/wp-content/uploads/2010/03/git-tree.gif"><img class="aligncenter size-full wp-image-523" title="git-tree" src="http://www.lwp.ca/james/wp-content/uploads/2010/03/git-tree.gif" alt="" width="263" height="316" /></a></p>
<p>Install Git on all systems, I use Debian.</p>
<p><span style="font-family: courier new;">sudo apt-get install git-core</span></p>
<p>On the server enter your websites htdocs:</p>
<p><span style="font-family: courier new;">git init</span><br />
<span style="font-family: courier new;">git add .</span><br />
<span style="font-family: courier new;">git commit -a -m &#8220;Initial import of project.&#8221;</span></p>
<p>Now we want to clone this repository.</p>
<p><span style="font-family: courier new;">cd ..</span><br />
<span style="font-family: courier new;">git clone &#8211;bare htdocs htdocs.git</span></p>
<p>On the local system now:</p>
<p><span style="font-family: courier new;">git clone ssh://<a class="linkification-ext" title="Linkification: http://root@lwp.ca/full/path/to/htdocs.git" href="http://root@lwp.ca/full/path/to/htdocs.git">root@lwp.ca/full/path/to/htdocs.git</a></span></p>
<p>On the server:</p>
<p><span style="font-family: courier new;">mv htdocs htdocs.backup</span><br />
<span style="font-family: courier new;">git clone htdocs.git</span></p>
<p>Note: htdocs.backup can be removed once the system is setup and working.<br />
<strong><br />
Final updates to the server</strong><br />
Due to the clone process, file permissions and ownership are now all root. So use the htdocs.backup to figure out what the file ownership/permissions were. Make sure that your new htdocs and all its sub files are back to normal.</p>
<p><span style="font-family: courier new;">chown -R vu2000:vu2000 htdocs</span></p>
<p><strong>Prevent the versioning of useless files</strong><br />
In the server repository edit htdocs/.gitignore, and make sure we do not back up cache directories and backup files *~ and config files. Do not add trailing slashes as this will prevent the exclude from working. Prep-ending slashes means the root of the git repo. By placing the .gitignore here, it will be part of the repository so anyone else working on the project will be using the same ignore rules.</p>
<p><span style="font-family: courier new;">*~</span><br />
<span style="font-family: courier new;">/wp-content/uploads</span><br />
<span style="font-family: courier new;">/cache</span><br />
<span style="font-family: courier new;">/users/uploads<br />
/configuration.php<br />
</span><br />
Now because we issued a &#8220;git add .&#8221; we should untrack files we don&#8217;t want to send back and forth.</p>
<p><span style="font-family: courier new;">git rm &#8211;cache configuration.php</span></p>
<p>Now when we do pushes and pulls we don&#8217;t have to keep updating our config file every time. We should make a backup however so we always have a copy.</p>
<p><span style="font-family: courier new;">cp configuration.php configuration.php.live</span></p>
<p><strong>Protecting the source</strong><br />
Also, place a file in all .git folders called .htaccess containing:</p>
<p><span style="font-family: courier new;">Deny from all</span></p>
<p>This will prevent visitors with crafty google foo to download and view source code files.</p>
<p><strong>Auto updating Live site</strong><br />
Now to enable auto updates when updates are pushed from offline dev machine to server.</p>
<p>On the server in our <a class="linkification-ext" title="Linkification: http://htdocs.git/hooks/post-update" href="http://htdocs.git/hooks/post-update">htdocs.git/hooks/post-update</a>, make sure it contains <strong>only</strong> the following:</p>
<p><span style="font-family: courier new;">cd ../htdocs</span><br />
<span style="font-family: courier new;">env -i git pull</span></p>
<p>Then make it executable</p>
<p><span style="font-family: courier new;">chmod +x post-update</span></p>
<p><strong>Done, now test</strong><br />
Now on the development machine make some changes and test.</p>
<p><span style="font-family: courier new;">touch &#8220;new file&#8221;</span><br />
<span style="font-family: courier new;">git add .</span><br />
<span style="font-family: courier new;">git commit -a -m &#8220;Testing first update&#8221;</span><br />
<span style="font-family: courier new;">git push</span></p>
<p><em>Yay! Everything should be working!</em></p>
<p><strong>Notes on usage.</strong></p>
<p>Updates on dev machine can be pushed to server like so:</p>
<p><span style="font-family: courier new;">git add .</span><br />
<span style="font-family: courier new;">git commit -a -m &#8220;This is an update&#8221;</span><br />
<span style="font-family: courier new;">git push</span></p>
<p>If changes were done on the server from some reason, navigate to the htdocs folder and run:</p>
<p><span style="font-family: courier new;">git add .</span><br />
<span style="font-family: courier new;">git commit -a -m &#8220;Changes made online&#8221;</span><br />
<span style="font-family: courier new;">git push</span></p>
<p>Then on your dev machine pull the updates.</p>
<p><span style="font-family: courier new;">git pull</span></p>
<p>If you need to check what has happened since the last update:</p>
<p><span style="font-family: courier new;">git status</span></p>
<p>Merge one branch into another:</p>
<p><span style="font-family: courier new;">git checkout master<br />
git merge myBugFixes</span></p>
<p>Delete your old branch:</p>
<pre>git branch -D myBugFixes
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.lwp.ca/james/2010/03/using-git-to-manage-online-website-projects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

