<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Soldat&#039;s log &#187; control versiones</title>
	<atom:link href="http://blog.chernando.eu/tag/control-versiones/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.chernando.eu</link>
	<description>Simplemente otro blog personal</description>
	<lastBuildDate>Wed, 01 Feb 2012 12:58:24 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.chernando.eu' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/0eb8b53f0c14a196e38f0abba5641993?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Soldat&#039;s log &#187; control versiones</title>
		<link>http://blog.chernando.eu</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.chernando.eu/osd.xml" title="Soldat&#039;s log" />
	<atom:link rel='hub' href='http://blog.chernando.eu/?pushpress=hub'/>
		<item>
		<title>CVS: Manejando ramas</title>
		<link>http://blog.chernando.eu/2007/03/07/cvs-ramas/</link>
		<comments>http://blog.chernando.eu/2007/03/07/cvs-ramas/#comments</comments>
		<pubDate>Wed, 07 Mar 2007 18:32:06 +0000</pubDate>
		<dc:creator>chernando</dc:creator>
				<category><![CDATA[Desarrollo Software]]></category>
		<category><![CDATA[branches]]></category>
		<category><![CDATA[control versiones]]></category>
		<category><![CDATA[cvs]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://chernando.wordpress.com/2007/03/07/cvs-branches/</guid>
		<description><![CDATA[Hace algunos años publiqué una breve guía práctica de CVS, incompleta. Aprovechando que tengo algo de tiempo he decidido tachar este punto de mi lista de tareas Creando una nueva rama Antes de nada hemos de recordar que necesitamos una versión etiquetada, por ejemplo &#8216;v1_2&#8242;, sobre la que vamos a trabajar. Comenzamos extrayendo la versión [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chernando.eu&amp;blog=827394&amp;post=14&amp;subd=chernando&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hace algunos años publiqué una breve <a href="http://acm.asoc.fi.upm.es/~chernando/doc/cvs/">guía práctica de CVS</a>, incompleta. Aprovechando que tengo algo de tiempo he decidido tachar este punto de mi lista de tareas <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>Creando una nueva rama</strong></p>
<p>Antes de nada hemos de recordar que necesitamos una versión etiquetada, por ejemplo &#8216;v1_2&#8242;, sobre la que vamos a trabajar. Comenzamos extrayendo la versión a nuestro entorno de trabajo:</p>
<p><code>$ cvs checkout -d proyecto-1.2 -r v1_2 proyecto</code></p>
<p>Procedamos a crear la rama propiamente dicha:</p>
<p><code>$ cd proyecto-1.2<br />
$ cvs tag -b v1_2-branch</code></p>
<p>El nombre de la rama es un gusto personal, yo prefiero añadir <em>-branch</em> aunque he visto <em>-bugfixes</em> o combinaciones de ambos.</p>
<p>Con estos simples pasos ya disponemos de una rama de desarrollo a la que podemos acceder, por ejemplo para hacer un cambio a la rama:</p>
<p><code>$ pwd<br />
/home/chernando/proyecto<br />
$ cvs up -r v1_2-branch</code></p>
<p>Si revisamos el estado de &#8216;main.c&#8217; podemos ver que está incluido en una rama:</p>
<p><code>$ cvs -q status main.c<br />
==================================================================<br />
Working revision:    1.1.2.1 2007-03-07 19:06:39 +0100<br />
Repository revision: 1.1.2.1 /tmp/repositorio/proyecto/main.c,v<br />
Commit Identifier:   QwJwh9fAP56fxb9s<br />
Sticky Tag:          v1_2-branch (branch: 1.1.2)<br />
Sticky Date:         (none)<br />
Sticky Options:      (none)</code></p>
<p>Importante fijarse en el cambio en la numeración, a partir de ahora en vez de avanzar con 1.<em>X</em>, se avanza con 1.<em>N</em>.<em>X</em>, siendo <em>N</em> la numeración de la rama.</p>
<p><strong>Mezclando dos ramas</strong></p>
<p>Bien, supongamos que queremos traernos cambios realizados desde una rama,&#8217;v1_2-branch&#8217;, a la principal. Muy fácil, haremos como si forzáramos un cambio de una versión anterior pero especificando la rama en vez de la revisión:</p>
<p><code>$  cvs update -j v1_2-branch main.c<br />
RCS file: /tmp/repositorio/proyecto/main.c,v<br />
retrieving revision 1.1<br />
retrieving revision 1.1.2.1<br />
Merging differences between 1.1 and 1.1.2.1 into main.c<br />
$ cvs commit -m 'Cambios desde la rama v1.2' main.c</code></p>
<p>Hay un problema: no podemos hacer esta jugada dos veces seguidas sin dar conflictos <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Supongamos que queremos volver a traernos un cambio desde la rama &#8216;v1_2-branch&#8217; con el comando <em>update</em>. El diferencial de cambios para hacer la mezcla se hace desde la base de la derivación de la rama, si ya hemos aplicado parte de ese diferencial en una actualización anterior provocará irremediablemente un conflicto.</p>
<p>La solución para evitar el engorro de trabajar con conflictos es utilizar una referencia de la rama justo después de traer los cambios. Dos opciones principales:</p>
<ul>
<li>Etiquetar la rama cada vez que se traen cambios de ellas, &#8216;v1_2- branch-fixes-1&#8242;.</li>
<li>Utilizar las nociones de tiempo de CVS, &#8216;v1_2-branch:3 days ago&#8217;.</li>
</ul>
<p>La idea intuitiva es la de señalar en el historial de la rama dos marcas de tiempo, la última que se llevo a la principal y el actual de la rama, y aplicar los cambios que se realizaron entre esos dos instantes en la rama en la principal. Por ejemplo:</p>
<p><code>$ cvs update -j v1_2-branch-fixes-1 -j v1_2branch</code></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/chernando.wordpress.com/14/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/chernando.wordpress.com/14/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chernando.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chernando.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chernando.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chernando.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chernando.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chernando.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chernando.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chernando.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chernando.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chernando.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chernando.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chernando.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chernando.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chernando.wordpress.com/14/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chernando.eu&amp;blog=827394&amp;post=14&amp;subd=chernando&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.chernando.eu/2007/03/07/cvs-ramas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/062f1c6b266029372b1705c017069e68?s=96&#38;d=wavatar&#38;r=PG" medium="image">
			<media:title type="html">chernando</media:title>
		</media:content>
	</item>
		<item>
		<title>svk</title>
		<link>http://blog.chernando.eu/2006/01/26/svk-mas-que-un-subversion-distribuido/</link>
		<comments>http://blog.chernando.eu/2006/01/26/svk-mas-que-un-subversion-distribuido/#comments</comments>
		<pubDate>Thu, 26 Jan 2006 10:21:01 +0000</pubDate>
		<dc:creator>chernando</dc:creator>
				<category><![CDATA[Desarrollo Software]]></category>
		<category><![CDATA[control versiones]]></category>
		<category><![CDATA[dcvs]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svk]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://chernando.wordpress.com/2006/01/26/svk-mas-que-un-subversion-distribuido/</guid>
		<description><![CDATA[En la línea de la última entrada voy a comentar brevemente un ejemplo de uso / tutorial de svk. svk está basado en el sistema de ficheros de subversion, está escrito en Perl y cuenta con varias mejoras que le permiten ser un decentralized version control system. Su principal objetivo es permitir a un desarrollador [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chernando.eu&amp;blog=827394&amp;post=7&amp;subd=chernando&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>En la línea de la <a href="http://chernando.wordpress.com/2006/01/25/sistemas-de-control-de-versiones-distribuidos/">última entrada</a> voy a comentar brevemente un ejemplo de uso / tutorial de  <a href="http://svk.elixus.org/">svk</a>.</p>
<p>svk está basado en el sistema de ficheros de <a href="http://subversion.tigris.org/">subversion</a>, está escrito en Perl y cuenta con varias mejoras que le permiten ser un <em>decentralized version control system</em>. Su principal objetivo es permitir a un desarrollador disponer de sus propias ramas privadas facilitando enormemente el proceso de <em>merge</em>.</p>
<p>La situación es la siguiente: disponemos de un repositorio central con un proyecto en el que estamos trabajando. Mediante svk vamos a hacer una copia del repositorio, vamos a mantenerlo actualizado y vamos a crear nuestra propia rama de trabajo.</p>
<p><span id="more-7"></span></p>
<p><strong>Preparando nuestro entorno</strong></p>
<p>En primer lugar crearemos un repositorio en el que vamos a guardar la copia del repositorio central:</p>
<p><code>svk depotmap --init</code></p>
<blockquote><p>Este comando creará en <tt>~/.svk/local</tt> un repositorio típico de subversion al que podremos acceder cómodamente mediante la ruta <tt>//</tt>.</p></blockquote>
<p>Disponemos de <tt>//</tt> para guardar los proyectos que necesitemos, en este caso realizaremos una copia local de un proyecto externo.</p>
<p><code>svk mirror https://acm.asoc.fi.upm.es/svn/jurix/jailexec/trunk //jailexec</code></p>
<p>y para actualizar su contenido:</p>
<p><code>svk sync //jailexec</code></p>
<blockquote><p>Durante el proceso de este comando veremos como svk descarga todo los commits realizados en el repositorio central y los replica en nuestro repositorio local, de esta forma conseguiremos disponer de una copia local de todo el repositorio (incluido historial y diferencias).</p>
<p><strong>Importante</strong>: resaltar que utilizamos la ruta <tt>//jailexec</tt> para especificar el lugar en el que hacemos la copia.</p></blockquote>
<p>Bien, ya tenemos todo lo necesario. Podemos desconectarnos de la red hasta que necesitemos o bien subir nuevos cambios o bien actualizarnos con los cambios del repositorio central.</p>
<p><strong>El trabajo del día a día</strong></p>
<p>Ahora crearemos nuestra copia local de trabajo, al igual que hacíamos con svn o cvs:</p>
<p><code>svk checkout //jailexec</code></p>
<blockquote><p>Esto creará un directorio <tt>jailexec</tt> en el que tendremos una copia local de trabajo. Un detalle curioso es que no existen directorios especiales <tt>.svk</tt> ya que las copias de trabajo se gestionan internamente.  Hay que tenerlo en cuenta a la hora de eliminar una copia de trabajo, un simple <code>rm -rf proyecto</code> no es recomendable.</p></blockquote>
<p>A partir de aquí el ciclo de trabajo es el mismo. La única diferencia es que estamos trabajando contra un repositorio local &#8211;nuestra copia del repositorio central&#8211; por lo que algunos comandos tendrán comportamientos distintos.</p>
<ul>
<li><tt>commit</tt>: si realizamos un commit contra nuestro repositorio svk forzará automáticamente el envio contra el repositorio central, es transparente al usuario.</li>
<li><tt>update</tt>: actualizaremos respecto a nuestro repositorio, por lo que si no realizamos un <tt>sync</tt> previo (apartado anterior) no tiene mucho sentido.</li>
</ul>
<p><strong>Manejo de ramas</strong></p>
<p>Hasta el momento disponemos de una copia del repositorio central, vamos a trabajar con las ramas privadas:</p>
<p><code>svk cp -p //jailexec //local/jailexec</code></p>
<blockquote><p>La opción <tt>-p</tt> es para crear <tt>//local</tt>.</p></blockquote>
<p>Hemos creado <tt>//local/jailexec</tt> como una rama solamente disponible en nuestro repositorio local, nuestra rama privada.</p>
<p><code>svk checkout //local/jailexec</code><br />
o<br />
<code>svk switch //local/jailexec</code></p>
<p>Nos prepara el entorno de trabajo sobre nuestra rama privada. A partir de ahora los cambios y el historial permaneceran en nuestro repositorio, sin conocimiento alguno del repositorio central.</p>
<p>Supongamos que hemos estado trabajando sobre una rama privada y queremos subir los cambios al repositorio central. Aquí svk nos facilita las cosas:</p>
<p><code>svk smerge //local/jailexec //jailexec</code></p>
<blockquote><p>Este comando juntará ambas ramas de forma automática. No olvidemos que <tt>//jailexec</tt> es una copia del repositorio central por lo que al juntar ambas ramas se forzará el envio al repositorio central.</p></blockquote>
<p>Con un solo comando podemos enviar todos los cambios que hemos realizado en nuestra rama privada <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>La única pega resulta ser la actualización de nuestra rama privada respecto a las actualizaciones del repositorio central:</p>
<p><code>svk sync //jailexec</code><br />
<code>svk smerge //jailexec //local/jailexec</code><br />
<code>svk up</code> (en el directorio de nuestra copia local)</p>
<blockquote><p>Actualizamos nuestro repositorio local y luego juntamos los cambios en nuestra rama local. Por último actualizamos nuestra copia local de trabajo.</p></blockquote>
<p><strong>Resumen</strong></p>
<p>svk nos ofrece una estructura estupenda sobre la que trabajar y/o hacer copias de repositorios (oficialmente soporta Subversion, CVS y Perforcer) con una sintaxis idéntica a la de subversion.</p>
<p>El inconveniente es que el manejo resulta un poco complicado durante los primeros días.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/chernando.wordpress.com/7/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/chernando.wordpress.com/7/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chernando.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chernando.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chernando.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chernando.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chernando.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chernando.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chernando.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chernando.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chernando.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chernando.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chernando.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chernando.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chernando.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chernando.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chernando.eu&amp;blog=827394&amp;post=7&amp;subd=chernando&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.chernando.eu/2006/01/26/svk-mas-que-un-subversion-distribuido/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/062f1c6b266029372b1705c017069e68?s=96&#38;d=wavatar&#38;r=PG" medium="image">
			<media:title type="html">chernando</media:title>
		</media:content>
	</item>
		<item>
		<title>Sistemas de control de versiones distribuidos</title>
		<link>http://blog.chernando.eu/2006/01/25/sistemas-de-control-de-versiones-distribuidos/</link>
		<comments>http://blog.chernando.eu/2006/01/25/sistemas-de-control-de-versiones-distribuidos/#comments</comments>
		<pubDate>Wed, 25 Jan 2006 08:49:55 +0000</pubDate>
		<dc:creator>chernando</dc:creator>
				<category><![CDATA[Desarrollo Software]]></category>
		<category><![CDATA[control versiones]]></category>
		<category><![CDATA[cvs]]></category>
		<category><![CDATA[dcvs]]></category>

		<guid isPermaLink="false">http://chernando.wordpress.com/2006/01/25/sistemas-de-control-de-versiones-distribuidos/</guid>
		<description><![CDATA[Los sistemas de control de versiones tradicionales como CVS o subversion han facilitado enormemente el desarrollo de software. Los conceptos como repositorio, revisión y commit son de uso habitual en casi cualquier cosa en la que trabajemos pero siempre se puede rizar el rizo: los sistemas de control de versiones distribuidos. A primera vista los [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chernando.eu&amp;blog=827394&amp;post=9&amp;subd=chernando&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Los sistemas de control de versiones tradicionales como <a href="http://www.nongnu.org/cvs/">CVS</a> o <a href="http://subversion.tigris.org/">subversion</a> han facilitado enormemente el desarrollo de software. Los conceptos como repositorio, revisión y <em>commit</em> son de uso habitual en casi cualquier cosa en la que trabajemos pero siempre se puede rizar el rizo: los sistemas de control de versiones distribuidos.</p>
<p>A primera vista los <acronym title="Distributed Version Control System">dvcs</acronym> son simples <acronym title="Version Control System">vcs</acronym> sin un repositorio centralizado, es decir, disponemos de varios repositorios funcionalmente idénticos pero que pueden seguir líneas de desarrollo propio para más tarde sincronizarse entre ellos. A decir verdad parece una forma rebuscada de hacer copias de seguridad de un repositorio clásico.</p>
<p>Supongamos que estamos trabajando en un proyecto cualquiera cuya política a la hora de aceptar un commit es &#8220;no introducir código inestable&#8221;. Si queremos implementar un gran cambio tendríamos que  desarrollar sin ningún <acronym title="Version Control System">vcs</acronym> hasta conseguir un código maduro y poder realizar el commit, normalmente no suele ser una situación agradable.</p>
<p>La solución más común es la de crear una rama en la que podamos desarrollar tranquilamente y más tarde, una vez madurado el código, juntar nuestra rama con la línea principal de desarrollo. El inconveniente ahora es la gestión de las ramas &#8211;crear y destruir múltiples ramas&#8211; y hacer el <em>merge</em> que siempre han resultado ser operaciones complicadas e incómodas.</p>
<p>Este es uno de los motivos por los que Linus Torvalds no migró a subversion después de los problemas con BitKeeper: <a href="http://subversion.tigris.org/subversion-linus.html">Please Stop Bugging Linus Torvalds About Subversion</a>.</p>
<p>Los <acronym title="Distributed Version Control System">dvcs</acronym> se centran en este problema. Ofrecen al programador mayor libertad a la hora de compartir su trabajo (ya sea con ramas privadas o controlando los cambios a <em>commitear</em>) sin perder en ningún momento un <acronym title="Version Control System">vcs</acronym> en el que apoyar su desarrollo. Además disponemos de una copia local del repositorio <em>maestro</em> lo que nos permite trabajar (<em>commit, log, diff</em>&#8230;) sin disponer de una conexión permanente.</p>
<p>Algunos ejemplos:</p>
<ul>
<li><a href="http://svk.elixus.org/">svk</a> trabaja sobre <a href="http://subversion.tigris.org/">subversion</a>.</li>
<li><a href="http://www.darcs.net/">darcs</a> hecho en <a href="http://www.haskell.org/">Haskell</a> y basado en <em>La teoría de los parches</em>, muy curioso.</li>
<li><a href="http://git.or.cz/">GIT</a> la respuesta de Torvalds.</li>
<li><a href="http://www.venge.net/monotone/">monotone</a>.</li>
<li>&#8230;</li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/chernando.wordpress.com/9/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/chernando.wordpress.com/9/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chernando.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chernando.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chernando.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chernando.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chernando.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chernando.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chernando.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chernando.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chernando.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chernando.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chernando.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chernando.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chernando.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chernando.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chernando.eu&amp;blog=827394&amp;post=9&amp;subd=chernando&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.chernando.eu/2006/01/25/sistemas-de-control-de-versiones-distribuidos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/062f1c6b266029372b1705c017069e68?s=96&#38;d=wavatar&#38;r=PG" medium="image">
			<media:title type="html">chernando</media:title>
		</media:content>
	</item>
	</channel>
</rss>
