<?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; Mercurial</title>
	<atom:link href="http://markelikalderon.com/category/version-control/mercurial/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>BitBucket</title>
		<link>http://markelikalderon.com/2008/07/25/bitbucket/</link>
		<comments>http://markelikalderon.com/2008/07/25/bitbucket/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 15:10:03 +0000</pubDate>
		<dc:creator>Mark Eli Kalderon</dc:creator>
				<category><![CDATA[Mercurial]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://markelikalderon.com/?p=473</guid>
		<description><![CDATA[BitBucket is providing mercurial hosting: Bitbucket is a place for you and your team to host and follow your Mercurial projects. Mercurial is a so-called DVCS, or Distributed Version Control System, a new paradigm in version control, rapidly substituting the likes of Subversion and CVS. We have plans for several purposes, including an extremely generous [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://bitbucket.org/">BitBucket</a> is providing <a href="http://www.selenic.com/mercurial/" title="Mercurial - Mercurial">mercurial</a> hosting:</p>

<blockquote>
  <p>Bitbucket is a place for you and your team to host and follow your Mercurial projects. Mercurial is a so-called DVCS, or Distributed Version Control System, a new paradigm in version control, rapidly substituting the likes of Subversion and CVS.</p>
  
  <p>We have plans for several purposes, including an extremely generous free plan. If you want to host an open source project with us, we are happy to grant sponsorships and give out free professional plans. We rely on open source software, and are always happy to give something back to the community!</p>
</blockquote>

<p>The screenshots they provide make the site look <em>very</em> similar to <a href="http://github.com/" title="Secure Git hosting and collaborative development &mdash; GitHub">GitHub</a>&#8212;even down to the coloring of the diffs. If mercurial is your distributed version control of choice, you might check them out.</p>
]]></content:encoded>
			<wfw:commentRss>http://markelikalderon.com/2008/07/25/bitbucket/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cornerstone</title>
		<link>http://markelikalderon.com/2008/07/01/cornerstone/</link>
		<comments>http://markelikalderon.com/2008/07/01/cornerstone/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 00:49:05 +0000</pubDate>
		<dc:creator>Mark Eli Kalderon</dc:creator>
				<category><![CDATA[Hybrid Application]]></category>
		<category><![CDATA[Mercurial]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://markelikalderon.com/blog/2008/07/01/cornerstone/</guid>
		<description><![CDATA[Previewing at 1.0, Cornerstone, a GUI Subversion front end has been released. Daring Fireball, as ever, with the wry commentary: It strikes me as an odd coincidence that two serious Subversion clients would debut at a time when many developers are starting to switch away from Subversion to distributed revision control systems such as Git [...]]]></description>
			<content:encoded><![CDATA[<p>Previewing at 1.0, <a href="http://www.zennaware.com/cornerstone/">Cornerstone</a>, a GUI <a href="http://subversion.tigris.org/" title="subversion.tigris.org">Subversion</a> front end has been released.</p>

<p><a href="http://daringfireball.net/" title="Daring Fireball">Daring Fireball</a>, as ever, with the wry commentary:</p>

<blockquote>
  <p>It strikes me as an odd coincidence that two serious Subversion clients would debut at a time when many developers are starting to switch away from Subversion to distributed revision control systems such as <a href="http://git.or.cz/" title="Git - Fast Version Control System">Git</a> and <a href="http://www.selenic.com/mercurial/" title="Mercurial - Mercurial">Mercurial</a>.</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://markelikalderon.com/2008/07/01/cornerstone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting Git</title>
		<link>http://markelikalderon.com/2007/12/30/getting-git/</link>
		<comments>http://markelikalderon.com/2007/12/30/getting-git/#comments</comments>
		<pubDate>Sun, 30 Dec 2007 02:11:32 +0000</pubDate>
		<dc:creator>Mark Eli Kalderon</dc:creator>
				<category><![CDATA[Mercurial]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://markelikalderon.com/blog/2007/12/30/getting-git/</guid>
		<description><![CDATA[While I have been a happy subversion user, there are some areas that are a continual source of frustration. No commits offline. Limited merging facilities. (See my earlier post.) The limitations on merging is the serious issue for me. Prose production presents opportunities for merging that subverion cannot handle (at least at present). Distributed version [...]]]></description>
			<content:encoded><![CDATA[<p>While I have been a happy <a href="http://subversion.tigris.org/" title="subversion.tigris.org">subversion</a> user, there are some areas that are a continual source of frustration. No commits offline. Limited merging facilities. (See my earlier <a href="http://markelikalderon.com/blog/2007/08/02/the-problem-with-merging/">post</a>.) The limitations on merging is the serious issue for me. Prose production presents opportunities for merging that subverion cannot handle (at least at present). Distributed version control systems such as <a href="http://git.or.cz/" title="Git - Fast Version Control System">Git</a> or <a href="http://www.selenic.com/mercurial/" title="Mercurial - Mercurial">Mercurial</a> solve both these problems. Centralized version control systems like subversion are a good model for me since I work on two machines (at home and at work). This can, of course, be mimicked with distributed version control systems, but I am also reluctant to abandon my subversion repository and am not sure if I trust the extant migration scripts. However, Git now includes the git-svn command that allows you to use Git locally with a centralized subversion repository. <a href="http://drnicwilliams.com/">Dr Nic</a> explains how in this <a href="http://drnicwilliams.com/2007/11/22/going-offline-without-your-favourite-subversion-repository/">post</a>. I will be exploring this in the New Year. So I have installed Git. Here is the bash script that I used to install Git on OS X <strong>Leopard</strong>:</p>

<pre><code>#!/bin/sh
#
# installgit.sh
#
# A bash script to install the latest version of Git. Be sure to set the variables to the desired values. 
#
# http://git.or.cz/
#
# Mark Eli Kalderon 2008-03-15

# Git. Change to the desired versions if necessary
VER="1.5.4.4"
GIT="git-${VER}"
GITMAN="git-manpages-${VER}"

# Build directories. Change to the desired directories if necessary.
GBLDDIR=/var/tmp/${GIT}-build

# Create Git build directory, but save source files if they exist.
test -d ${GBLDDIR} || mkdir ${GBLDDIR}
test -d ${GBLDDIR}/${GIT} &amp;&amp; /bin/rm -rf ${GBLDDIR}/${GIT}
cd $GBLDDIR

# Download and unpack Git source.
curl http://kernel.org/pub/software/scm/git/${GIT}.tar.gz -O
tar -xvzf ${GIT}.tar.gz
cd ${GIT}

# Configure and build Git.
./configure --prefix=/usr/local 
make

# Install Git. Will prompt for password.
sudo make install

# Install documentation. Will prompt for password.
curl -O http://kernel.org/pub/software/scm/git/${GITMAN}.tar.bz2
sudo tar xjv -C /usr/local/share/man -f ${GITMAN}.tar.bz2
</code></pre>

<p>Call the script installgit.sh and run it with:</p>

<pre><code>$ ./installgit.sh
</code></pre>

<p><strike>Installing Git with <em>documentation</em> is another matter. The brave should consult this <a href="http://wincent.com/knowledge-base/Setting_up_the_Git_documentation_build_chain_on_Mac_OS_X_Leopard">document</a>. The timid might content themselves with the online <a href="http://www.kernel.org/pub/software/scm/git/docs/user-manual.html">Git User&#8217;s Manual</a>.</strike> <strong>Updated</strong> script to include <a href="http://subtlegradient.com">SubtleGradient</a>&#8217;s sane instructions on how to install <a href="http://git.or.cz/" title="Git - Fast Version Control System">Git</a> documentation.</p>
]]></content:encoded>
			<wfw:commentRss>http://markelikalderon.com/2007/12/30/getting-git/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Problem with Merging</title>
		<link>http://markelikalderon.com/2007/08/02/the-problem-with-merging/</link>
		<comments>http://markelikalderon.com/2007/08/02/the-problem-with-merging/#comments</comments>
		<pubDate>Thu, 02 Aug 2007 14:40:12 +0000</pubDate>
		<dc:creator>Mark Eli Kalderon</dc:creator>
				<category><![CDATA[Mercurial]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://markelikalderon.com/blog/2007/08/02/the-problem-with-merging/</guid>
		<description><![CDATA[Subversion, a free and open source version control system, is great for keep track of the development of your LaTeX documents. As cool as it is, though, it has its limitations. One serious limitation is branch management. Suppose you have a document that you are writing and that you are considering restructuring that document. Suppose, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://subversion.tigris.org/" title="subversion.tigris.org">Subversion</a>, a free and open source version control system, is great for keep track of the development of your LaTeX documents. As cool as it is, though, it has its limitations. One serious limitation is branch management.</p>

<p>Suppose you have a document that you are writing and that you are considering restructuring that document. Suppose, further, you are unsure the restructuring will come off in the end. If the document is being kept in a subversion repository, then it is natural to create a <em>branch</em>. The <em>trunk</em> is the directory where the document in its main or current line of development is being kept. The branch is the directory where the alternaitive line of development is being kept. A minimal example of the directory structure would look like this:</p>

<pre><code>|-- mylatexproject\
    |-- trunk\
        |-- mydocument.tex
    |-- branch\
        |-- mydocument.tex
</code></pre>

<p>(The diagram is in one way misleading&#8212;the trunk and branch directories can contain multiple files.) To create a branch, simply copy trunk\mydocument.tex into branch\ (using the subversion commands, so that subversion knows what&#8217;s happening).</p>

<p>If after restructuring your document, you are happy with the changes, then you <em>merge</em> these changes into the trunk. This is done with the command:</p>

<pre><code>svn merge
</code></pre>

<p>This command does two things:</p>

<ol>
<li>It compares the differences between two files</li>
<li>It applies the differences to a location in the working copy</li>
</ol>

<p>The command thus takes three arguments. The first two arguments are the locations of the files to be compared (where these can be specified, for example, with their urls in the repository), and the path of the file in the working copy where these changes are to be applied. Notice that the changes are applied to a file in your working copy, so you will need to commit these changes after the merge. For more information see the <a href="http://svnbook.red-bean.com/" title="Version Control with Subversion">subversion book</a> or use the command:</p>

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

<p>Sounds easy. It is. But there are limitations to subversion&#8217;s merge command. Let me discuss two.</p>

<p>The first limitation becomes apparent when you repeatedly merge changes. It can happen that you merge the same change twice over. Sometimes this is not a problem. If subversion sees that the relevant file already has the relevant change then it does nothing. But suppose the change has been made <em>but has been further modified.</em> Merging a second time will produce a conflict. The problem arises because subversion doesn&#8217;t remember what changes have already been merged into the trunk and so attempts to merge these again.</p>

<p>The second limitation is the inability to exclude a previous revision form being merged. This is particularly relevant to writers. Suppose you are writing a paper and have been invited to give a talk based on that material. It is natural to create a branch. It is also natural to eliminate some things from the talk like footnotes. You do this and commit the change. But suppose in writing the talk you hit upon things that should be in the paper. Suppose commit these changes as well. You would now want to merge these changes into the paper, which is in the trunk. However, you cannot tell svn merge to merge only those changes, and to not merge the previous changes. So with svn merge you would end up losing the footnotes in the original paper.</p>

<p>It is partly for these reasons that <a href="http://markelikalderon.com/blog/2007/05/18/parting-observation/">Linus Torvalds regards subversion as broken by design</a>. It is true that these problems do not arise in distributed models of version control such as <a href="http://git.or.cz/" title="Git - Fast Version Control System">Git</a> and <a href="http://selenic.com/mercurial" title="Mercurial - Mercurial">Mercurial</a>.</p>

<p>Fortunately, for subversion users, these and related limiations are being addressed in the next major releas of subversion (1.5.0). But if you cannot wait until then, the script <a href="http://www.orcaware.com/svn/wiki/Svnmerge.py" title="Svnmerge.py - SubversionWiki">svnmerge.py</a> can help. svnmerge.py is a tool for automatic branch management that addresses these 
problems. It remembers which changes have already been merged and does the right thing by only merging the new changes. And it lists changes available for merging so that some, but not all, of these can be merged. I have been playing around with svnmerge.py, and will post more about is use.</p>
]]></content:encoded>
			<wfw:commentRss>http://markelikalderon.com/2007/08/02/the-problem-with-merging/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Parting Observation</title>
		<link>http://markelikalderon.com/2007/05/18/parting-observation/</link>
		<comments>http://markelikalderon.com/2007/05/18/parting-observation/#comments</comments>
		<pubDate>Fri, 18 May 2007 14:48:44 +0000</pubDate>
		<dc:creator>Mark Eli Kalderon</dc:creator>
				<category><![CDATA[Mercurial]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://markelikalderon.com/blog/2007/05/18/parting-observation/</guid>
		<description><![CDATA[The current series of posts about subversion: Subversion Subversion, Serendipity, and Discipline Subversion and the Single User LaTeX and Subversion Circle Six Subversion Subverting Difference Subversion and TextMate have ended, but I wanted to make one last observation. For authors producing complex documents whose development they need to track, what&#8217;s important is version control, not [...]]]></description>
			<content:encoded><![CDATA[<p>The current series of posts about <a href="http://subversion.tigris.org/" title="subversion.tigris.org">subversion</a>:</p>

<ul>
<li><p><a href="http://markelikalderon.com/blog/2007/03/29/subversion/">Subversion</a></p></li>
<li><p><a href="http://markelikalderon.com/blog/2007/03/30/subversion-serendipity-and-discipline/">Subversion, Serendipity, and Discipline</a></p></li>
<li><p><a href="http://markelikalderon.com/blog/2007/04/14/subversion-and-the-single-user/">Subversion and the Single User</a></p></li>
<li><p><a href="http://markelikalderon.com/blog/2007/04/14/latex-and-subversion/">LaTeX and Subversion</a></p></li>
<li><p><a href="http://markelikalderon.com/blog/2007/04/18/circle-six-subversion/">Circle Six Subversion</a></p></li>
<li><p><a href="http://markelikalderon.com/blog/2007/04/28/subverting-difference/">Subverting Difference</a></p></li>
<li><p><a href="http://markelikalderon.com/blog/2007/05/11/subversion-and-textmate/">Subversion and TextMate</a></p></li>
</ul>

<p>have ended, but I wanted to make one last observation. For authors producing complex documents whose development they need to track, what&#8217;s important is version control, not necessarily subversion. There are a variety of version control systems on the market, and while subversion suits my present needs, others may suit your needs better.</p>

<p>One important conceptual difference between version control systems is whether they use a centralized or distributed model. Subversion uses a centralized model. There is a central repository from which local working copies may be checked out. Intriguingly, other version control systems use a distributed model. <a href="http://git.or.cz/" title="Git - Fast Version Control System">Git</a> and <a href="http://www.selenic.com/mercurial/" title="Mercurial - Mercurial">Mercurial</a> are examples. If you are interested in a version control system based on a distributed model have a look at Mercurial and Mark Adams <a href="http://raysend.com/mark/2007/05/15/mercurial-for-solo-developers/">post</a> about Mercurial and the single user. And if you have a spare hour (and a thick enough skin to persist through his abusive personality&#8212;apparently subversion users are stupid and ugly), here is Linus Torvalds explaining the virtues of git&#8217;s distributed model:</p>

<p><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/4XpnKHJAok8"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/4XpnKHJAok8" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></p>

<p><strong>Update</strong> Forgot to mention, if you are using TextMate and are curious about Mercurial, there is a Mercurial bundle that you might try.</p>
]]></content:encoded>
			<wfw:commentRss>http://markelikalderon.com/2007/05/18/parting-observation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

