<?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; CVS</title>
	<atom:link href="http://blog.chuidiang.com/tag/cvs/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>Migrando a Subversion</title>
		<link>http://blog.chuidiang.com/2009/06/04/migrando-a-subversion/</link>
		<comments>http://blog.chuidiang.com/2009/06/04/migrando-a-subversion/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 17:12:41 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[Subversion]]></category>
		<category><![CDATA[CVS]]></category>
		<category><![CDATA[cvs2svn]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=603</guid>
		<description><![CDATA[&#160; &#161;&#161; Por fin tenemos nuestro primer proyecto migrado a subversion !!. La historia ha sido una verdadera odisea. Normalmente usamos CVS, pero en el momento de empezar a trabajar con ramas un poco en serio, el tema se hac&#237;a demasiado pesado. CVS crea las ramas recorriendo todos los ficheros del repositorio y marcando la [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>&iexcl;&iexcl; Por fin tenemos nuestro primer proyecto migrado a <a href="http://www.chuidiang.com/chuwiki/index.php?title=Categor%C3%ADa:Subversion">subversion </a>!!.</p>
<p>La historia ha sido una verdadera odisea. Normalmente usamos <a href="http://www.chuidiang.com/chuwiki/index.php?title=Categor%C3%ADa:CVS">CVS</a>, pero en el momento de empezar a trabajar con ramas un poco en serio, el tema se hac&iacute;a demasiado pesado. CVS crea las ramas recorriendo todos los ficheros del repositorio y marcando la rama para cada uno de ellos. Crear una rama en CVS tardaba cerca de media hora en cada proyecto implicado. Subversion, al tener todo el repositorio con un n&uacute;mero de versi&oacute;n &uacute;nico, no necesita recorrer todos los ficheros uno a uno para hacer la rama, le basta con marcar en alg&uacute;n sitio que en ese n&uacute;mero de versi&oacute;n comienza una rama. Tarda como la mitad de medio segundo (es un decir) en hacer la rama de un repositorio, independientemente de la cantidad de ficheros que haya almacenados. </p>
<p>Por otro lado, nuestro servidor de CVS se estaba quedando &quot;viejito&quot;. Una estaci&oacute;n solaris del a&ntilde;o del &quot;catap&uacute;m&quot; con 128 megas de ram (al que hace poco se le estropeo un m&oacute;dulo de 64 y creo que de esos ya no hay ni el rastro), con el disco duro (de pocos gigas) permanentemente al 99%. Total, que se impon&iacute;a tambi&eacute;n un cambio de m&aacute;quina.</p>
<p>As&iacute; que aprovechando lo uno con lo otro, decid&iacute; que nos pasabamos a Subversion en un servidor nuevo. Dicho&#8230;.. y a esperar.</p>
<p>Primero convencer a la gente de las excelencias de Subversion sobre CVS. Como siempre, a unos pocos les parece estupendo, a muchos les importa tres pepinos y a algunos lo de &quot;&iquest;Para qu&eacute; vamos a cambiar si ahora funciona?&quot;. A base de dar la paliza, consegu&iacute; convencer (o al menos dejaron de protestar) a todos.</p>
<p>Despu&eacute;s lo de conseguir el servidor nuevo. Ni el departamento ni los proyectos para los que trabajamos estaban dispuestos a comprar un servidor (pens&eacute; seriamente en ir a tomar los caf&eacute;s encima del servidor actual, para que ocurriera &quot;una desgracia&quot;). As&iacute; que a negociar con el departamento de inform&aacute;tica de la empresa, a ver cu&aacute;nto nos cobran por darnos un subversion en uno de sus servidores. Tras mucho tira y afloja (y sobre todo gracias a la persona que nos hizo de intermediaria en la software lab con la que trabajamos), nos dieron el subversion gratis. Entre pedir el servidor a los proyectos, intentar convencerles y hablar con el departamento de inform&aacute;tica pasaron casi dos meses.</p>
<p>Y hoy, por fin, la primera migraci&oacute;n. Me baj&eacute; el <a href="http://cvs2svn.tigris.org/">cvs2svn</a> e intent&eacute; migrar uno de nuestros proyectos. Desgraciadamente, intent&eacute; hacerlo sobre windows y no hubo manera. Ten&iacute;a el cygwin y te&oacute;ricamente todo lo necesario, pero me fallaba en un punto en el que se hace una llamada al comando &quot;sort&quot;. El de windows no vale, porque funciona distinto del de unix. El de cygwin aparentemente me daba problemas porque se liaba con las \ de los directorios (al ser unix, espera / de directorio). Me baj&eacute; los <a href="http://unxutils.sourceforge.net/">UnxUtils</a>, pero al ejecutar el comando sort daba un error muy raro (insuficiente espacio en disco, o algo as&iacute;, habiendo m&aacute;s de 20 Gigas libres). As&iacute; que reinici&eacute; el ordenador para arrancar en linux y ah&iacute; fue todo rodado a la primera.</p>
<p>Total, ya tenemos nuestro primer proyecto en subversion. El primero de una larga lista de ellos que debemos ir migrando poco a poco.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2009/06/04/migrando-a-subversion/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<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>Sí, definitivamente la he cagado.</title>
		<link>http://blog.chuidiang.com/2008/07/12/si-definitivamente-la-he-cagado/</link>
		<comments>http://blog.chuidiang.com/2008/07/12/si-definitivamente-la-he-cagado/#comments</comments>
		<pubDate>Sat, 12 Jul 2008 20:14:34 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[trabajo]]></category>
		<category><![CDATA[CVS]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[proyectos]]></category>
		<category><![CDATA[statcvs]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=398</guid>
		<description><![CDATA[Hace unos d&#237;as comentaba si la habr&#237;a cagado al aceptar un puesto un poco m&#225;s de &#34;jefecillo&#34; que antes. Y efectivamente, compruebo que la he cagado. La prueba de ello es que en vez de hacer c&#243;digo, me estoy dedicando a mirar cosas como statcvs, una herramienta que mira el log de todos los commits [...]]]></description>
			<content:encoded><![CDATA[<p>Hace unos d&iacute;as comentaba si <a href="http://blog.chuidiang.com/2008/07/08/%c2%bfla-habre-cagado/">la habr&iacute;a cagado</a> al aceptar un puesto un poco m&aacute;s de &quot;jefecillo&quot; que antes. Y efectivamente, compruebo que la he cagado. La prueba de ello es que en vez de hacer c&oacute;digo, me estoy dedicando a mirar cosas como <a href="http://statcvs.sourceforge.net/">statcvs</a>, una herramienta que mira el log de todos los commits que se han hecho en un proyecto en CVS y luego saca un mont&oacute;n de gr&aacute;ficos molones, in&uacute;tiles, pero molones.</p>
<p>Aqu&iacute; van unos cuantos ejemplos. El siguiente es un gr&aacute;fico que muestra los commits como puntitos de varios desarrolladores a lo largo de cerca de cuatro a&ntilde;os. Me he cargado el nombre del proyecto y de los desarrolladores, por&nbsp; aquello de la discrecci&oacute;n. En cada gr&aacute;fico, el eje y son las horas del d&iacute;a, de 0 a 24. En el eje x son los d&iacute;as a lo largo de los a&ntilde;os. El primer gr&aacute;fico, de puntitos azules, muestra el total de commits del proyecto. Los siguientes, con puntitos rojos, cada uno de los desarrolladores.</p>
<p>Llama la atenci&oacute;n el tercer desarrollador, que se fue a teletrabajar hace un a&ntilde;o. Se nota claramente que desde ese d&iacute;a NO tiene horarios. Antes hac&iacute;a commits de 8 a 6, horario de oficina. Ahora es habitual que haga commits a la una de la madrugada.</p>
<p>Tambi&eacute;n llama la atenci&oacute;n el &uacute;ltimo, con una densidad de commits especialmente alta. Se ve que es amigo de CVS. Curiosamente, se ve una peque&ntilde;a franja horizontal sin commits, correspondiente a la hora de comer.</p>
<p>En el sexto desarrollador, hacia el principio del gr&aacute;fico, tambi&eacute;n se ven unos d&iacute;as de agobio. con un commit pasada la media noche.</p>
<p>Tambi&eacute;n se ve, gracias a Dios, que en mi empresa tenemos un horario en general normal. Son raros los commits m&aacute;s all&aacute; de las seis de la tarde.</p>
<p><a href="http://blog.chuidiang.com/wp-content/uploads/commits-totales.png"><img width="600" height="2017" src="http://blog.chuidiang.com/wp-content/uploads/commits-totales.png" alt="" /></a></p>
<p>y en este otro gr&aacute;fico, se ve c&oacute;mo han ido a&ntilde;diendo l&iacute;neas de ćodigo en otro proyecto distintos desarrolladores. Las grandes subidas se deben posiblemente a copy-paste de otros proyectos (verg&uuml;enza) o bien a &quot;refactoring&quot; intensivo, a base de mover grandes fuentes bloques de fuente de un sitio a otro (espero que sea eso). En la parte baja estaba el nombre de los desarrolladores, asociado a cada una de las l&iacute;neas de color, pero me los he cargado.</p>
<p><a href="http://blog.chuidiang.com/wp-content/uploads/lineas-codigo-totales.png"><img width="600" height="375" src="http://blog.chuidiang.com/wp-content/uploads/lineas-codigo-totales.png" alt="" /></a></p>
<p>y aunque no he puesto ejemplos, tambi&eacute;n hay gr&aacute;ficos para cada desarrollador indicando en qu&eacute; horas del d&iacute;a mete m&aacute;s en CVS o en que d&iacute;as de la semana. Aunque en general este tipo de gr&aacute;ficos si es m&aacute;s o menos aleatorio, a veces se ve gente que tiende a meter en CVS los viernes, o bien justo antes de comer o de irse a casa por la tarde. Supongo que eso tambi&eacute;n es una mala costumbre, da la impresi&oacute;n de que no meten el c&oacute;digo cuando lo han probado bien, sino como una especie de &quot;backup&quot; de su trabajo diario, metiendo en CVS cosas que quiz&aacute;s no est&aacute;n lo suficientemente probadas.</p>
<p>Aqu&iacute; puedes ver un <a href="http://statcvs.sourceforge.net/statcvs-html/">ejemplo completo de los gr&aacute;ficos estad&iacute;scos generados por statcvs</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2008/07/12/si-definitivamente-la-he-cagado/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

