<?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>Diario de Programación &#187; control de versiones</title>
	<atom:link href="http://blog.chuidiang.com/tag/control-de-versiones/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.chuidiang.com</link>
	<description>Programación e informática en general</description>
	<lastBuildDate>Wed, 25 Jan 2012 23:17:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>¿Qué debemos meter en el sistema de control de versiones?</title>
		<link>http://blog.chuidiang.com/2009/04/15/%c2%bfque-debemos-meter-en-el-sistema-de-control-de-versiones/</link>
		<comments>http://blog.chuidiang.com/2009/04/15/%c2%bfque-debemos-meter-en-el-sistema-de-control-de-versiones/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 17:24:35 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[CVS]]></category>
		<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[control de versiones]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=559</guid>
		<description><![CDATA[&#160; Cuando trabajamos en proyectos que usan sistema de control de versiones, pero todav&#237;a no tenemos muy afianzado qu&#233; cosas debemos meter en dicho sistema, pueden aparecer determinados ficheros en los que nos entra la duda de si debemos meterlos o no. Por ejemplo, &#191;metemos o no los ficheros de proyecto de eclipse o netbeans? [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Cuando trabajamos en proyectos que usan <a href="http://www.chuidiang.com/chuwiki/index.php?title=Categor%C3%ADa:Control_de_versiones">sistema de control de versiones</a>, pero todav&iacute;a no tenemos muy afianzado qu&eacute; cosas debemos meter en dicho sistema, pueden aparecer determinados ficheros en los que nos entra la duda de si debemos meterlos o no. Por ejemplo, &iquest;metemos o no los ficheros de proyecto de eclipse o netbeans? &iquest;metemos o no las librer&iacute;as externas a nuestro proyecto, como log4j, drivers de bd, etc?.&nbsp; La decisi&oacute;n, por supuesto, depende mucho de los gustos personales de la gente que lleva el proyecto, pero tambi&eacute;n depende en parte de las herramientas que usemos que no tienen mucho que ver con el sistema de control de versiones. Voy a comentar aqu&iacute; un posible criterio m&aacute;s o menos l&oacute;gico.</p>
<p>En el sistema de control de versiones deben ir todos aquellos ficheros que nosotros debemos hacer o proporcionar manualmente al proyecto. No deben ir todos aquellos ficheros que se generan de forma autom&aacute;tica.</p>
<p>En el primer grupo, los que nosotros generamos, est&aacute;n claramente los fuentes de nuestro c&oacute;digo (los .java por ejemplo), los scripts de compilado o de arranque de la aplicaci&oacute;n, los ficheros de configuraci&oacute;n (properties de java), los iconos de nuestra aplicaci&oacute;n, etc, etc. Quedar&iacute;an excluidos, por ejemplo, los fuentes que genere autom&aacute;ticamente alguna herramienta o script a partir de otros ficheros que s&iacute; hacemos manualmente. </p>
<p>Es muy importante meter en el sistema de control de versiones absolutamente todo lo necesario para <strong>construir</strong><strong> desde cero</strong> y <strong>ejecutar</strong> nuestra aplicaci&oacute;n tal cual era en un momento dado. De nada sirve tener versiones de los fuentes si no tenemos tambi&eacute;n almacenadas las versiones correspondientes de los scripts de arranque, de los ficheros de configuraci&oacute;n (properties) o de creaci&oacute;n de las tablas de base de datos.</p>
<p>En el segundo grupo, los generados autom&aacute;ticamente y que no van en el sistema de control de versiones, est&aacute;n los ejecutables y librer&iacute;as que genera nuestro proyecto. Ni siquiera tendr&iacute;amos que meterlos para conservar una versi&oacute;n especialmente estable o buena, ya que los sistema de control de versiones suelen soportar cosas como etiquetas o ramas y bastar&iacute;a con marcar los fichero que s&iacute; van con una etiqueta para ser capaces de generar ese ejecutable estupendo.</p>
<p>Bien, esos son los ficheros m&aacute;s o menos claros, pero, &iquest;qu&eacute; hacemos con las librer&iacute;as externas?. Esta decisi&oacute;n ya puede depender de gustos y de las herramientas que usemos. Si usamos, por ejemplo, <a href="http://www.chuidiang.com/java/herramientas/maven.php">maven</a>, todos los desarrolladores tendr&aacute;n acceso a esos jar a trav&eacute;s de internet de forma autom&aacute;tica y sin preocuparse en absoluto de ello, por lo que con este tipo de herramientas no es necesario en absoluto meter en el sistema de control de versiones cosas como log4j.jar, junit.jar o ojdbc14.jar. Si no usamos una herramienta de este tipo, para comodidad para los desarrolladores, debemos tener todos estas librer&iacute;as accesibles de forma f&aacute;cil en alg&uacute;n sitio y una buena opci&oacute;n es meterlas en el sistema de control de versiones. Normalmente metemos cada una de estas librer&iacute;as una sola vez y no van a tener modificaciones. Un desarrollador nuevo tendr&aacute; todas las necesarias s&iacute;mplemente con hacer un checkout y los scripts de compilado sabr&aacute;n d&oacute;nde buscar estas librer&iacute;as.</p>
<p>&iquest;Y qu&eacute; hacemos con los ficheros de proyecto del IDE de trabajo, como los .project, .classpath o .settings de eclipse?. Nuevamente, la decisi&oacute;n puede depender de gustos y de las herramientas a usar. Nuevamente, si usamos maven, el comando <em>mvn eclipse:eclipse</em> nos genera estos ficheros autom&aacute;ticamente, por lo que es c&oacute;modo generarlos para un desarrollador reci&eacute;n incorporado al grupo y no ser&iacute;a necesario meterlos en el sistema de control de versiones. Si no usamos este tipo de herramientas, podemos meter estos ficheros en el sistema de control de versiones, pero tenemos que ser muy conscientes de que pueden ser problem&aacute;ticos:</p>
<ul>
<li>A veces estos ficheros llevan paths absolutos, por lo que todos los desarrolladores deben sacar el proyecto en el mismo directorio absoluto en su ordenador (por ejemplo, C:\PROYECTO) y posiblemente, tener las librer&iacute;as externas en el mismo path absoluto (sea dentro de control de versiones o no).</li>
<li>Si un desarrollador quiere modificar algo en su IDE que afecte a estos ficheros (por ejemplo, a&ntilde;adir una dependencia nueva para probar o s&iacute;mplemente, cambiar el nombre del proyecto porque no le gusta el oficial), debe ser muy cuidadoso para no hacer un commit de esos ficheros descuidadamente.</li>
</ul>
<p>Si decidimos no meterlos, debemos ser conscientes de que los desarrolladores nuevos deben montar manualmente el proyecto. Y si decidimos hacer cambios &quot;oficiales&quot; (a&ntilde;adir una dependencia, por ejemplo), todos deben realizar ese cambio manualmente.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2009/04/15/%c2%bfque-debemos-meter-en-el-sistema-de-control-de-versiones/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Más de Subversion</title>
		<link>http://blog.chuidiang.com/2008/11/12/mas-de-subversion/</link>
		<comments>http://blog.chuidiang.com/2008/11/12/mas-de-subversion/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 20:37:27 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[CVS]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[control de versiones]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=421</guid>
		<description><![CDATA[Hace poco me toc&#243; hacer una rama CVS de los proyectos para estabilizar una versi&#243;n para unas pruebas con el cliente. Ya se sabe, rama del repositorio del proyecto y rama de todos los repositorios con librer&#237;as que utilice el proyecto. Pues bien, ha sido horrible. Son cuatro o cinco repositorios y cada uno de [...]]]></description>
			<content:encoded><![CDATA[<p>Hace poco me toc&oacute; hacer una rama CVS de los proyectos para estabilizar una versi&oacute;n para unas pruebas con el cliente. Ya se sabe, rama del repositorio del proyecto y rama de todos los repositorios con librer&iacute;as que utilice el proyecto.</p>
<p>Pues bien, ha sido horrible. Son cuatro o cinco repositorios y cada uno de los proyectos/librer&iacute;as a &quot;enramar&quot; tienen f&aacute;cilmente tres mil ficheros java. Ech&eacute; toda la tarde en hacer las dichosas ramas. Primero un update, luego el cvs tag para poner una etiqueta justo en el punto donde comienza la rama y luego el cvs tag -b para crear la rama. Al hacerlo CVS fichero a fichero, media hora larga con algunos de los repositorios mientras cvs hace el trabajo.</p>
<p>Se me ocurri&oacute;, harto de ello, <a href="http://www.chuidiang.com/chuwiki/index.php?title=Montar_un_servidor_subversion_en_Windows">montar un servidor de subversion</a>, migrar alguno de los repositorios CVS a subversion (usando <a href="http://cvs2svn.tigris.org/">cvs2svn</a>) y mirar a ver cu&aacute;nto tarda subversion en hacer la rama (svn cp). Es casi inmediato, ya que realmente no realiza la copia real de todos los ficheros (lo har&aacute; cuando se vayan modificando si se van modificando) y tampoco tiene que andar recorriendo todos los ficheros para ver su versi&oacute;n actual (CVS tienen un n&uacute;mero de versi&oacute;n para cada fichero, mientras que subversion tiene un &uacute;nico n&uacute;mero para todo el repositorio).</p>
<p>Todo el mundo habla que los sistemas de control de versiones distribuidos, estilo <a href="http://bazaar-vcs.org/">Bazaar</a> o <a href="http://git.or.cz/">Git</a> son maravillosos. Tambi&eacute;n se habla mejor de Subversion que de CVS, <a href="http://blogs.vertigosoftware.com/teamsystem/archive/2006/01/18/Why_Linus_Torvalds_Hates_Subversion.aspx">aunque no todos lo hacen</a>. A m&iacute; realmente todo eso me parece bien, pero mientras no veo una necesidad real o una mejora importante, no veo tampoco necesidad de cambiar. Ahora s&iacute; he encontrado un motivo, as&iacute; que es cuesti&oacute;n de empezar a mirar en serio la posibilidad de migrarlo todo a Subversion.</p>
<p>De momento descarto Bazaar o Git por tener menos soporte para los IDEs habituales (eclipse en concreto). Tampoco tengo muy claro lo veloz que puede ser hacer un branch de un repositorio grande si eso implica la copia completa de todo el repositorio, con su historia (ya digo, repositorios de tres mil clases java con cuatro o cinco a&ntilde;os de historia y alrededor de veinte desarrolladores de media desarrollando d&iacute;a a d&iacute;a).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2008/11/12/mas-de-subversion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Jugando con Bazaar</title>
		<link>http://blog.chuidiang.com/2008/07/14/jugando-con-bazaar/</link>
		<comments>http://blog.chuidiang.com/2008/07/14/jugando-con-bazaar/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 20:12:03 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[bazaar]]></category>
		<category><![CDATA[control de versiones]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=400</guid>
		<description><![CDATA[Hace algunos meses descubr&#237; Git y empec&#233; a oir hablar de los sistemas de control de versiones distribuidos. Me qued&#233; con las ganas de echarle un ojo con m&#225;s calma y ver qu&#233; era exactamente eso, qu&#233; ventajas aporta y si merece la pena usarlo. Sin embargo, me echaba atr&#225;s el que Git s&#243;lo estuviera [...]]]></description>
			<content:encoded><![CDATA[<p>Hace algunos meses descubr&iacute; <a href="http://git.or.cz/">Git</a> y empec&eacute; a oir hablar de los sistemas de control de versiones distribuidos. Me qued&eacute; con las ganas de echarle un ojo con m&aacute;s calma y ver qu&eacute; era exactamente eso, qu&eacute; ventajas aporta y si merece la pena usarlo. Sin embargo, me echaba atr&aacute;s el que Git s&oacute;lo estuviera disponible para linux. Para windows hab&iacute;a que usar cygwin o bien con cosas como <a href="http://code.google.com/p/msysgit/">msysgit</a>.</p>
<p>Gracias a un <a href="http://blog.chuidiang.com/2008/07/12/si-definitivamente-la-he-cagado/#comments">comentario del post anterior</a>, descubro <a href="http://bazaar-vcs.org/">Bazaar</a>, con soporte para linux y windows, con una documentaci&oacute;n bastante agradable y sobre todo, con fama de ser f&aacute;cil de usar. As&iacute; que me puse a jugar con ello.</p>
<p>La instalaci&oacute;n en Windows muy sencilla con el instalador. En Ubuntu con el gestor de paquetes synaptic tambi&eacute;n (eso s&iacute;, hay que buscar &quot;bzr&quot; que es el comando de l&iacute;nea de comandos para Bazaar (como cvs, o svn en CVS o Subversion).</p>
<p>Cog&iacute; uno de los proyectos que tengo en Java y cree el primer proyecto con Bazaar. Fue realmente sencillo, basta con situarse en el directorio del proyecto ya creado y ejecutar los comandos</p>
<blockquote>
<p>$ cd /home/chuidiang/PROYECTO<br />
$ bzr init<br />
$ bzr add<br />
$ bzr commit -m&quot;Primera version&quot;</p>
</blockquote>
<p>Todo fue de perlas. Sin necesidad de instalar ning&uacute;n servidor ni nada parecido ya tengo mi primer proyecto (ya existente previamente) bajo el control de versiones de Bazaar.</p>
<p>Me voy ahora a otro directorio y pruebo a &quot;sacarlo&quot;. Tambi&eacute;n es sencillo</p>
<blockquote>
<p>$ cd /tmp<br />
$ bzr branch /home/chuidiang/PROYECTO RAMA_PROYECTO</p>
</blockquote>
<p>Y ya tengo mi copia de trabajo en /tmp. </p>
<p>Aqu&iacute; empieza, adem&aacute;s, la primera diferencia con un sistema de control de versiones normal. Si hubiese ejecutado el comando bzr checkout en vez de bzr branch, habr&iacute;a extraido en /tmp el proyecto de forma similar a CVS o SVN. Cualquier commit que hiciese, se har&iacute;a directamente en /home/chuidiang/PROYECTO, como si fuese el servidor o repositorio central. Sin embargo, al hacerlo con bzr branch, tengo ahora en /tmp una copia completa e indpendiente del proyecto original en /home/chuidiang/PROYECTO. Puede hacer commits independientes en un lado y en otro, cada uno con su propia historia y sus propios comentarios.</p>
<p>Sin embargo, tenemos m&aacute;s comandos de Bazaar, como bzr push, bzr pull, bzr merge, etc que permiten tanto a uno como a otro, traerse los cambios hechos en el otro proyecto, o bien llevarse tus propios cambios al otro proyecto.</p>
<p>Con un sistema de control de versiones distribuido tenemos libertad de organizar los repositorios del proyecto como queramos. Podemos o no poner un repositorio central y los desarrolladores pueden llevar sus propias ramas, intercambiarse unos con otros los fuentes antes de llevarlos al repositorio central y cualquier combinaci&oacute;n que se nos ocurra.</p>
<p>Por ejemplo, suele ser buena idea tener un repositorio central donde est&eacute; la &uacute;ltima versi&oacute;n en condiciones del proyecto. Los desarrolladores, con bzr branch se hacen sus propias copias y repositorios locales. Tocan, prueban y hacen commits locales todas las veces que quieran, conservando toda la historia de sus ficheros. Cuando todo est&aacute; en condiciones, llevan su copia local al repositorio central, donde se actualizar&aacute; con toda la historia local del desarrollador.</p>
<p>Es m&aacute;s, dos desarrolladores trabajando en una funcionalidad com&uacute;n, pueden actualizarse sus repositorios locales de uno a otro todas las veces que haga falta. Cuando sus copias locales est&eacute;n en condiciones, las pueden subir al repositorio central. Se evita as&iacute;, que estos desarrolladores tengan que compartir c&oacute;digo todav&iacute;a no probado subi&eacute;ndolo previamente al repositorio central.</p>
<p>En fin, una peque&ntilde;a maravilla, abierta a tantas posiblidades como seamos capaces de imaginar.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2008/07/14/jugando-con-bazaar/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

