<?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>Excursus &#187; svnX</title>
	<atom:link href="http://markelikalderon.com/category/version-control/subversion/svnx/feed/" rel="self" type="application/rss+xml" />
	<link>http://markelikalderon.com</link>
	<description>Philosophy and Text</description>
	<lastBuildDate>Tue, 27 Dec 2011 23:01:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Versions or Vaporware?</title>
		<link>http://markelikalderon.com/2008/06/02/versions-or-vaporware/</link>
		<comments>http://markelikalderon.com/2008/06/02/versions-or-vaporware/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 02:09:56 +0000</pubDate>
		<dc:creator>Mark Eli Kalderon</dc:creator>
				<category><![CDATA[Hybrid Application]]></category>
		<category><![CDATA[Versions]]></category>
		<category><![CDATA[svnX]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://markelikalderon.com/blog/2008/06/02/versions-or-vaporware/</guid>
		<description><![CDATA[Versions, the GUI Mac subversion client is still vaporware, but there is a review of the prerelease beta at Theocacao. Though I am shifting over to Git, I am still curious how Versions will stack up against svnX.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.versionsapp.com/">Versions</a>, the GUI Mac subversion client is <a href="http://markelikalderon.com/blog/2007/06/17/versions/">still</a> vaporware, but there is a <a href="http://theocacao.com/document.page/576">review</a> of the prerelease beta at <a href="http://theocacoa.com">Theocacao</a>. Though I am shifting over to <a href="http://git.or.cz/" title="Git - Fast Version Control System">Git</a>, I am still curious how Versions will stack up against <a href="http://www.lachoseinteractive.net/en/community/subversion/svnx/" title="La Chose : web agency and software maker – agence web et développement de logiciels">svnX</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://markelikalderon.com/2008/06/02/versions-or-vaporware/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Versions</title>
		<link>http://markelikalderon.com/2007/06/17/versions/</link>
		<comments>http://markelikalderon.com/2007/06/17/versions/#comments</comments>
		<pubDate>Sun, 17 Jun 2007 22:44:02 +0000</pubDate>
		<dc:creator>Mark Eli Kalderon</dc:creator>
				<category><![CDATA[Hybrid Application]]></category>
		<category><![CDATA[Versions]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svnX]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://markelikalderon.com/blog/2007/06/17/versions/</guid>
		<description><![CDATA[Subversion is a great command line utility waiting for decent GUI. While the GUI&#8217;s supplanting the command line represents the triumph of the Image over the Word, the GUI has its place&#8212;even in text editing. With respect to subversion, there&#8217;s cognitive utility in being able to visualize the structure of your repository or working copy. [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://markelikalderon.com/wp-content/uploads/2007/06/sunset.jpg' alt='Versions Logo' /></p>

<p><a href="http://subversion.tigris.org/" title="subversion.tigris.org">Subversion</a> is a great command line utility waiting for decent <a href="http://en.wikipedia.org/wiki/Graphical_user_interface">GUI</a>. While the GUI&#8217;s supplanting the command line represents the <a href="http://markelikalderon.com/blog/2006/09/27/the-word/">triumph of the Image over the Word</a>, the GUI has its place&#8212;even in text editing. With respect to subversion, there&#8217;s cognitive utility in being able to visualize the structure of your repository or working copy. While there are GUI front ends to subversion, none are perfect. While on OS X <a href="http://www.subversionx.com/" title="Subversi&oacute;n X - Hasta la Muerte">svnX</a> works reasonably well, a compelling solution to graphically representing subversion repositories and working copies has yet to be found. The ideal <a href="http://markelikalderon.com/blog/2006/11/02/atpm-on-activity-monitor/">hybrid app</a> has yet to be written. (The situation is not unlike MP3 players before the iPod.) Fortunately, competition is good, and competition is emerging on the Mac platform. <a href="http://www.versionsapp.com/">Versions</a> promises a clean look and simple approach without compromising on functionality. A collaboration between João Pavão and <a href="http://www.madebysofa.com">madebysofa.com</a>, the beta of Versions is soon ready for a private trial. You can sign up for the private beta at <a href="http://www.versionsapp.com">versionsapp.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://markelikalderon.com/2007/06/17/versions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Subversion and the Single User</title>
		<link>http://markelikalderon.com/2007/04/14/subversion-and-the-single-user/</link>
		<comments>http://markelikalderon.com/2007/04/14/subversion-and-the-single-user/#comments</comments>
		<pubDate>Sat, 14 Apr 2007 01:51:35 +0000</pubDate>
		<dc:creator>Mark Eli Kalderon</dc:creator>
				<category><![CDATA[subversion]]></category>
		<category><![CDATA[svnX]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://markelikalderon.com/blog/2007/04/14/subversion-and-the-single-user/</guid>
		<description><![CDATA[As promised, a post about subversion workflow, but first some basic concepts. Commit Remember being taught journalism in high school English class? A good story must provide answers to four questions: &#8220;Who?&#8221;, &#8220;What?&#8221;, &#8220;When?&#8221;, and &#8220;Where?&#8221; Or so we were taught. When you commit a change, subversion records four pieces of information: Subversion records WHO [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://markelikalderon.com/wp-content/uploads/2007/04/celeb_movie_keaton2.jpg' alt='Looking for Mister Goodbar' /></p>

<p>As promised, a post about subversion workflow, but first some basic concepts.</p>

<h1>Commit</h1>

<p>Remember being taught journalism in high school English class? A good story must provide answers to four questions: &#8220;Who?&#8221;, &#8220;What?&#8221;, &#8220;When?&#8221;, and &#8220;Where?&#8221; Or so we were taught.</p>

<p>When you commit a change, subversion records four pieces of information:</p>

<ol>
<li>Subversion records WHO committed the change</li>
<li>Subversion records WHAT the change was (a description of the change)</li>
<li>Subversion records WHEN the change was committed</li>
<li>Subversion records WHERE the change was made (which files or directories in your working copy were changed)</li>
</ol>

<p>With each change, subversion increments the revision number of the repository. You can then diff against a particular revision or retrieve a particular revision as you like.</p>

<p>The command:</p>

<pre><code>svn commit --message "Description of change" foo.txt
</code></pre>

<p>will record your change to foo.txt in your working copy and the &#8220;Who?&#8221;, &#8220;What?&#8221;, &#8220;When?&#8221;, and &#8220;Where?&#8221; of this change to your subversion repository.</p>

<h1>Update</h1>

<p>Not only will you want to sync revisions in your working copy to your repository, but sync revisions in your repository to your working copy. The command:</p>

<pre><code>svn update
</code></pre>

<p>allows you to do just that. Suppose that foo.txt has been changed since your last update, and it is the seventeenth revision of the repository, then the command will yield:</p>

<pre><code>U foo.txt
Updated to revision 17
</code></pre>

<p>This means that your working copy has been modified to reflect the changes to foo.txt and that it now reflects revision 17 of the repository. The letter code U is one of several codes that can be issued. These include:</p>

<ul>
<li>U foo&#8212;file foo has been updated</li>
<li>A foo&#8212;file or directory foo has been added</li>
<li>D foo&#8212;file or directory has been deleted</li>
<li>G foo&#8212;file foo has been updated but you have made local changes in your working copy not reflected in the repository but these changes do not intersect</li>
<li>C foo&#8212;file foo in your working copy has changes that conflict with the changes to foo in the reposiroty</li>
</ul>

<h1>Cha-Cha-Cha-Changes</h1>

<p>So far we have discussed committing changes to the repository, and updating the working copy to reflect the changes to the repository, but how do we make these changes.</p>

<p>There are two kinds of changes:</p>

<ol>
<li>Changes to individual files</li>
<li>Changes to the structure of the directory</li>
</ol>

<p>Changes to individual files is easy. Just make the changes in the appropriate editing program. You don&#8217;t need to issue in any subversion specific commands.</p>

<p>Changes to the structure of the directory, however, requires subversion&#8217;s help. Fortunately, the relevant commands are easy to understand.</p>

<p>The command:</p>

<pre><code>svn add foo
</code></pre>

<p>schedules the file or directory foo to be added to the repository next time you make a commit.</p>

<p>The command:</p>

<pre><code>svn delete foo
</code></pre>

<p>schedules the file or directory foo for deletion from the repository next time you commit.</p>

<p>The command:</p>

<pre><code>svn copy foo bar
</code></pre>

<p>creates a copy of foo called bar and bar is scheduled for addition to the repository next time you commit</p>

<p>The command:</p>

<pre><code>svn move foo bar
</code></pre>

<p>creates a copy of foo called bar and schedules bar for addition and schedules foo for deletion.</p>

<h1>Reviewing Changes</h1>

<p>Before committing your changes, it is a good idea to review the changes you made. Helpfully, subversion has provided some useful tools for ding this.</p>

<p>First up is the command:</p>

<pre><code>svn status
</code></pre>

<p>If this command is issued at the root of your working copy it will yield a description of all the changes that you have made since last updating. The command yields a list of files and directories preceded by letter codes indicating the nature of the changes made. These include:</p>

<ul>
<li>M foo&#8212;foo has been modified since last updating</li>
<li>A foo&#8212;foo is scheduled for addition</li>
<li>D foo&#8212;foo is scheduled for deletion</li>
<li>C foo&#8212;foo has conflicts with an update</li>
<li>? foo&#8212;subversion doesn&#8217;t know about foo. You may want to add it or remove it.</li>
</ul>

<p>If svn status indicates that foo.txt has been modified, you may want to examine these changes in detail in order to write a helpful commit message. The command:</p>

<pre><code>svn diff
</code></pre>

<p>run at the root of the working copy will print out a list of changes to modified files in diff format. As I observed in a previous <a href="http://markelikalderon.com/blog/2007/02/15/diff-programs-diffed/">post</a>, diff format displays <em>line</em> differences, not <em>word</em> differences. This is not great for prose since paragraphs in text files are long lines so multiple differences in a paragraph will not be adequately represented. Fortunately, subversion allows you to use external diff programs. I will make a separate post about this later.</p>

<p>One more tool. The command:</p>

<pre><code>svn revert foo
</code></pre>

<p>will roll back the changes you made to foo to the state foo was in when the working copy was last updated.</p>

<h1>The Workflow</h1>

<p>With these basic concepts in mind, we can now describe your workflow:</p>

<ol>
<li>Update your working copy</li>
<li>Make changes to your working copy</li>
<li>Review your changes</li>
<li>Resolve any conflicts (to be described in a separate post)</li>
<li>Commit your changes.</li>
</ol>

<p>Subversion was designed for multiple programmers to work on a given project. What benefits does all this provide the single user? Besides providing a database of all changes and a record of these, the workflow really comes into its own when working from multiple locations. Suppose you are working both at home and at work on different machines. Adhering to this workflow will make sure that you are always in sync. This is a vastly more efficient and non-ad hoc framework for keeping your mission critical files in sync than emailing them or keeping them on a flash drive. These methods are helpful, yes. But their ad hoc nature is ultimately a recipe for confusion.</p>

<p>One final thought. GUI front ends such as <a href="http://www.lachoseinteractive.net/en/community/subversion/svnx/" title="La Chose : web agency and software maker – agence web et développement de logiciels">svnX</a> are helpful, but you should try to master the command line basics. And always remember, the command:</p>

<pre><code>svn help
</code></pre>

<p>is your friend.</p>
]]></content:encoded>
			<wfw:commentRss>http://markelikalderon.com/2007/04/14/subversion-and-the-single-user/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Subversion</title>
		<link>http://markelikalderon.com/2007/03/29/subversion/</link>
		<comments>http://markelikalderon.com/2007/03/29/subversion/#comments</comments>
		<pubDate>Wed, 28 Mar 2007 23:58:06 +0000</pubDate>
		<dc:creator>Mark Eli Kalderon</dc:creator>
				<category><![CDATA[Hybrid Application]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svnX]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://markelikalderon.com/blog/2007/03/29/subversion/</guid>
		<description><![CDATA[In my first post, I reported my discovery that a lot of tools that programmers use are, in fact, readily adaptable to the task of writing. In a previous post I discussed diff programs&#8212;programs for comparing differences between text files. In this post, I will be discussing version control. Programmers and writers face at least [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://markelikalderon.com/wp-content/uploads/2007/03/svnx.jpg' alt='svnX' /></p>

<p>In my first <a href="http://markelikalderon.com/blog/2006/09/27/the-word/">post</a>, I reported my discovery that a lot of tools that programmers use are, in fact, readily adaptable to the task of writing. In a previous post I discussed <a href="http://markelikalderon.com/blog/2007/02/15/diff-programs-diffed/">diff programs</a>&#8212;programs for comparing differences between text files. In this post, I will be discussing <a href="http://en.wikipedia.org/wiki/Revision_control" title="Wikipedia Entry: Revision_control">version control</a>.</p>

<p>Programmers and writers face at least one common problem. In writing a complex program, programmers need to track small changes over time. In writing a complex document, writers need to track small changes over time. Programmers, being programmers, have written software to meet this particular need, software that can meet the writer&#8217;s corresponding need.</p>

<p>There are a variety of version control systems currently available, but I will be talking about <a href="http://subversion.tigris.org/" title="subversion.tigris.org">subversion</a>, a popular open source replacement for <a href="http://www.cvs.com/" title="CVS">CVS</a>. Subversion tracks changes to a directory, saving the differences in a database. Wish you hadn&#8217;t deleted that paragraph and somehow didn&#8217;t save it in the ad hoc versions of the paper you created? With subversion it is just a:</p>

<pre><code>svn cat
</code></pre>

<p>away.</p>

<p>This post will be covering installing subverion on Mac OS X. Subsequent posts will cover usage, and integration with the diff program of your choice.</p>

<p>Installation:</p>

<p><strong>STEP ONE</strong>: <a href="http://www.codingmonkeys.de/mbo/" title="Martin Ott">Martin Ott</a> of <a href="http://www.codingmonkeys.de/" title="TheCodingMonkeys">Coding Monkeys</a> has helpfully provided a binary for OS X. (One cool feature of the OS X version is its keychain integration.) Download the <a href="http://www.codingmonkeys.de/mbo/">Subversion.pkg</a>.</p>

<p><strong>STEP TWO</strong>: Unzip the subversion.pkg, click the pkg-installer and follow the instructions to install Subversion.</p>

<p><strong>STEP THREE</strong>: OK, let&#8217;s test it out. Open the Terminal (located in /Applications/Utilities), and type:</p>

<pre><code>svn help 
</code></pre>

<p>If successfully installed, you should see a helpful usage message. If not, then chances are that subversion is not in your path. (Don&#8217;t worry if you do not know what this means.) To add the relevant path do the following: Type:</p>

<pre><code>cd
</code></pre>

<p>in Terminal and hit return to navigate to your home directory. Type:</p>

<pre><code>ls -a 
</code></pre>

<p>and hit return to see the contents of your home directory (including the files beginning with a &#8216;.&#8217; normally hidden from the Finder). If a file called &#8216;.profile&#8217; exists open it up in your favorite text editor. If it doesn&#8217;t exist, create it. Now just add the following line:</p>

<pre><code>export PATH=$PATH:/usr/local/bin
</code></pre>

<p>Save .profile and type</p>

<pre><code>source .profile
</code></pre>

<p>and hit return.</p>

<pre><code>svn help
</code></pre>

<p>should now return the help message.</p>

<p><strong>STEP FOUR</strong>: First a bit of terminology. A subversion repository is where all your files are stored. Your working copy is a local copy of its contents where changes are made. If you are happy with them, you commit them to the repository. It is possible to have a local repository on your machine, but having your repository on a server allows for some interesting possibilities (such as syncing your files on multiple machines). <a href="https://opensvn.csie.org/">OpenSVN</a> is a free subversion server. It worked well for me. (Though now mine is on <a href="http://textdrive.com/" title="Welcome to TextDrive &#8211; Reliable, high performance web hosting you can trust">TextDrive</a> which isn&#8217;t free.) A comprehensive list of subversion servers can be found on this <a href="http://subversion.tigris.org/links.html#hosting">page</a> of the subversion website. If you are using <a href="https://opensvn.csie.org/">OpenSVN</a>, click on the link called &#8216;Create a New Project&#8217; and follow the instructions.</p>

<p><strong>STEP FIVE</strong>: Subversion can be managed on the command line. You should take the time to learn how to do so. However, like diff programs (and arguably text editing), there&#8217;s a point to using a GUI environment. There are several GUI front ends for subversion. None of the interfaces are ideal. (The killer GUI front end for subversion has yet to be written.) However, <a href="http://www.lachoseinteractive.net/en/community/subversion/svnx/features/">svnX</a> is by far the best I have seen on OS X. And it is free. Download it <a href="http://www.lachoseinteractive.net/en/community/subversion/svnx/download/">here</a>.</p>

<p><strong>STEP SIX</strong>: When you open up svnX you will see two windows. In the window entitled &#8216;Repositories&#8217;, add the url and login name and password from your subversion server.</p>

<p><strong>STEP SEVEN</strong>: OK, you are in the home stretch now. You have installed subversion, created a subversion repository on a subversion server, and have a GUI program to manage your subversion repository and working copy. Now all that you have to do is import your project directory into your subversion repository. Once more to the Terminal. (After this, most everything can be handled through svnX.) Type:</p>

<pre><code>svn import -m "import message" /path/to/your/project/directory /url/of/your/repository
</code></pre>

<p>(making the appropriate substitutions for the import message and path and url) and hit return.</p>

<p><strong>STEP EIGHT</strong>: Now we need to create the working copy. Move your project directory to the Trash. (Don&#8217;t worry, you don&#8217;t have to empty the trash just yet.) In svnX, click on the name of your repository in the repository window. This will open a new window. Select root and click on &#8216;svn checkout&#8217;. In the dialogue window, select where you want your working copy to live and click &#8216;open&#8217;. Now in the window entitled &#8216;Working Copies&#8217; add the path of the working copy you just created and the login information from the subversion server.</p>

<p>Congratulations! You are now set up. Subsequent posts will describe usage and integrating with the diff tool of your choice. I you can&#8217;t wait check out the <a href="http://www.macdevcenter.com/pub/a/mac/2004/08/10/subversion.html">tutorial</a> at O&#8217;REILLY macdevcenter.com and the subversion <a href="http://svnbook.red-bean.com/">book</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://markelikalderon.com/2007/03/29/subversion/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

