Darcs, mini-guía para proyectos en grupo

Solicite, consulte o publique recursos de referencia para desarrolladores.

Darcs, mini-guía para proyectos en grupo

Notapor Alex_13_estu » Dom Abr 13, 2008 9:13 am

Comienzo aquí un mini-tutorial-petición de ayuda. Y es que para los proyectos del grupo necesitamos utilizar darcs, y creo que todavía no sabemos casi nada, por lo que lo escribiré aquí para que todos lo puedan encontrar fácil (incluida gente que no sea del proyecto) y así responder si pueden para ayudarnos. Comenzamos.

Darcs funciona desde la consola, por lo que hay que utilizarlo desde "Símbolo del sistema" o "Cygwin" en Windows y desde sus correspondientes en Linux, Mac... Para descargarlo está éste link y un buen manual para iniciarse por encima está aquí. Si utilizas Windows ( es el sistema que manejo yo, no sé cómo se hace en los demás) te recomiendo crear una carpeta, por ejemplo, en el disco local (su ruta sería "C.\darcs") y luego ir a Panel de Control >> Impresoras y otro hardware >> Sistema >> Opciones avanzadas >> Variables de entorno. Ahora en la parte baja te aparecerá una lista de variables. Eliges la variable path y le das a Modificar. Al final de la lista escribes un ";" (sin comillas) y la ruta en la que tenías Darcs (en este caso, "C.\darcs" sin comillas). Así podrás seguir más fácil esta miniguía. Comencemos por poner unos comandos básicos de ese "Símbolo del sistema" en Windows:

- cd + nombre directorio -> Cambia el directorio actual al que especifiques. Por ejemplo, si estás en una carpeta que tenga un directorio que se llame "principal" y tú pones el comando "cd principal" te moverás a ese subdirectorio. Si le pones ".." retrocede al directorio anterior.

Con eso bastará, creo. Ahora sólo crea un directorio en el disco local ( C: ) de nombre "principal", abre el "Símbolo del Sistema" y entra en ese directorio. Comenzamos:

- Inicia Darcs

Lo primero, una vez estés en el símbolo del sistema y hayas entrado en ese directorio, es iniciar Darcs y crear un repositorio. Para eso escribe:

Código: Seleccionar todo
darcs initialize


Y ya está. Se creará un directorio llamado "_darcs" dentro de "principal" que contendrá la información del repositorio. Procuro no modificar nada que tenga en su interior.

- Añadiendo archivos

Ahora crea un archivo dentro de "principal" que se llame "yo.txt" y escribe dentro tu nombre. Luego ejecuta el siguiente comando:

Código: Seleccionar todo
darcs add yo.txt


Con ese comando ya lo habrás añadido, pero todavía no lo has guardado.

- Guardando ambios

Para guardar cambios, ejecuta:

Código: Seleccionar todo
darcs record


Si es la primera vez que lo haces, se te solicitará la dirección de mail para poder identificarte. Si no, comenzarán a aparecer los cambios que has hecho recientemente y que no se han guardado. Pulsa "y" para guardar los cambios que quieras. La primera vez que añadas un archivo, te aparecerán dos cambios aunque en realidad sólo haya sido uno. Ésto es porque primero añade el archivo y luego toma su contenido como un parche. Se te pedirá que le pongas nombre a éstos cambios (denominados "parches"). Hazlo claramente para que se sepa de quién fue. Por último, te preguntarán si quieres añadir un comentario largo. Te aconsejo que canceles pulsando "n", ya que no lo he utilizado y necesitas tener configuradas unas variables del sistema que no manejo (si quieres puedes indagar tú un poco).

- Historial de cambios

¿Cómo puedo saber todos los cambios que se han guardado en el repositorio? Muy fácil, con el comando:

Código: Seleccionar todo
darcs changes


Te aparecerá en pantalla una relación con la descripción de todos los parches que se hayan guardado hasta ahora, además de la hora en que se hicieron y el e-mail del autor. Esto es muy útil cuando trabajas en grupo y quieres saber, por ejemplo, quiénes fueron los últimos en colaborar y qué fue lo que hicieron. Es probable que si en la descripción del parche hay caracteres "extraños" (como la 'ñ' o las vocales con acentos) se muestren mal. Para solucionarlo, introduce el siguiente comando:

Código: Seleccionar todo
export DARCS_DONT_ESCAPE_ISPRINT=1


¡Ojo! Éste comando creo recordar que sólo funciona bajo Unix o bajo Windows si estás usando la versión de Darcs con Cygwin. Bajo Windows sin Cygwin, hay que usar el siguiente comando:

Código: Seleccionar todo
set DARCS_DONT_ESCAPE_ISPRINT=1


Nota: No lo he probado, pero creo que si en lugar de configurar DARCS_DONT_ESCAPE_ISPRINT al valor 1, configuras la variable DARCS_DONT_ESCAPE_ANYTHING también a ese valor (1), serán mostrados todos los caracteres, incluidos los no-ASCII. No estoy seguro de ésto, así que si alguien sabe algo más, que lo deje en un mensaje.

- ¿Qué hay de nuevo, viejo?

Como ya os dije, los cambios no se guardan hasta que hacemos "darcs record". Sin embargo, nosotros podemos modificar ficheros o añadirlos antes de guardar los cambios. ¿Y si queremos saber qué cosas todavía no hemos guardado pero están ya añadidas? Pues usamos este comando:

Código: Seleccionar todo
darcs whatsnew


Que nos devolverá una lista con los cambios que hay sobre los ficheros del proyecto que todavía no hemos guardado. Pero, además de eso, tenemos otro comando similar a éste que es también bastante útil:

Código: Seleccionar todo
darcs whatsnew -l


Éste comando nos pasará una relación de los archivos que hay en el directorio del repositorio que él considera que tenemos que añadir al proyecto. Para ilustrarlo, vamos a hacer una cosa. Crea dos archivos, uno que se llama "tutorial.txt" y el otro "tutorial.bak". Escribe algo en el interior de cada uno (da igual lo que pongas) y luego ejecuta el comando "darcs whatsnew". No debería aparecer nada, por supuesto. Ahora vamos a buscar qué aarchivos son posibles partes del proyecto y no están añadidos. Ya sabes, haz "darcs whatsnew -l" y, ¿qué archivos aparecen? Vemos que está "tutorial.txt", pero, ¿y "tutorial.bak"? Muy simple, darcs considera algunos tipos de archivos (entre ellos los .bak) aburridos y no los pone como potenciales partes del proyecto. Por eso el "tutorial.txt" aparece y el ".bak" no. Para acabar, añade el archivo "tutorial.txt" al proyecto y guarda los cambios. Luego comprueba la lista de los parches con "darcs changes".

-Eliminando cambios

Si hemos ñaadido un parche que no nos interesa, podemos ejecutar el comando:

Código: Seleccionar todo
darcs unrecord


Así nos aparecerá una lista con los parches que hayan sido añadidos más recientemente. Pulsa 'y' para borrar parches que quieras y 'n' para no borrarlos. Una vez hayas borrado lo que deseabas, puedes pulsar 'd' y finalizará el borrado (así no te tendrás que tragar la lista entera de parches pulsando 'n' una y otra vez).

- A dos (o más) bandas

Bien, vamos a simular un trabajo en grupo con Darcs. Para ello vamos a pensar que llegaron dos amigos ("Pepe" y "Juan") que quieren formar parte del proyecto que teníamos en la carpeta "principal". En el símbolo del Sistema tenemos que movernos primero al directorio anterior a donde tenemos "principal" para poder ejecutar un comando muy útil. En este caso pondremos lo siguiente:

Código: Seleccionar todo
darcs get principal pepe


Analizemos. La primera palabra, darcs, ya la conocemos. La segunda, "get" es el comando en sí y su función es crear una copia de un repositorio original para que otra persona trabaje por su cuenta. La tercera, "principal", es el repositorio del que se hace la copia (puede ser una dirección de Internet donde haya un repositorio) y la cuarte y última, "pepe", es el directorio en el que se hará la copia (esta se puede omitir y darcs lo generará él mismo, o eso creo). Con lo cual, ahora tenemos dos directorios iguales, "principal" y "pepe". Repite el mismo proceso para crear una copia de "principal" que lleve por nombre "juan". Y pasamos al siguiente comando.

Código: Seleccionar todo
darcs pull


Antes de explicártelo, debo pedirte que entres con el Símbolo del Sistema al directorio principal, cambies algo en el archivo "yo.txt" (por ejemplo, ponle al final dos líneas en las que indiques que se incluyeron otros dos participantes, "Pepe" y "Juan") y haz "darcs record" para guardar los cambios. Luego muévete hasta uno de los repositorios-copia (el de "pepe" por ejemplo) y ejecuta el comando "darcs pull". Te aparecerá una lista de parches nuevos (en este caso sólo uno) que tendrás que aceptar o declinar con 'y' y 'n'. Pero, ¿de dónde viene? Esos parches, amigo, vienen del repositorio original, y son las actualizaciones que no tienes todavía en la copia en la que estés metido (en este caso "pepe"). Según vayas aceptando los parches el repositorio copiado se irá actualizando y al final lo tendrás nuevamente igual al original. Si quieres puedes hacer "darcs changes" para comprobarlo. Haz lo mismo con el repositorio "Juan" para actualizarlo.Vamos a ver un penúltimo comando:

Código: Seleccionar todo
darcs send -o Patch_pepe


Fíjate bien en el comando, te lo explicaré a continuación. Pero primero ve al repositorio-copia de "Pepe" y haz algún cambio (por ejemplo, añade otra línea en "yo.txt" y crea otro archivo que sea "pepe.txt" donde ponga su edad). Si creas un archivo, recuerda añadirlo con "darcs add" Luego guarda los cambios y ponle nomres claros y concisos a los parches. Es probable que pida la dirección de mail de pepe si todavía no la ha pedido igual que hizo la primera vez que utilizamos "darcs record" en "principal". A continuación, ejecuta el comando que te dije, el "darcs send -o Patch_pepe". Te explicaré lo que hace. Ese comando se encarga de generar un archivo que contiene los parches que se hayan hecho en una copia del repositorio original (en este caso la copia de "Pepe"). Luego ese archivo se envía al poseedor del repositorio original para que actualice dicho repositorio con los parches que le mandan desde una copia del repositorio como la de "Pepe". La palabra "darcs" ya nos es familiar. "send" se encarga de mandar los parches directamente si tienes un servidor smtp en la máquina. Como creo que la mayoría tenemos correo web, pues le añadimos el "-o" para que nos genere un archivo que podamos adjuntar manualmente y no se encarge él del envío de los parches. Por último, le indicamos el nombre de ese archivo a generar, en este caso "Patch_pepe". Para generar el archivo, darcs preguntará qué parches queremos añadir. Como ya es típico, aceptamos con 'y' y cancelamos con 'n'. ¿Sencillo, no? Una vez tenemos ese archivo "Patch_pepe" generado (ojo, no tiene extensión), lo copiamos manualmente y lo pegamos dos veces, una en el repositorio orignal (que está en "principal") y otra vez en la copia que se llamaba "juan". Y, ahora sí, el último comando:

Código: Seleccionar todo
darcs apply Patch_pepe


Para ejecutarlo, debemos estar en el repositorio original (el de "principal"), así que muévete hasta allí y asegúrate de hacer una copia de "Patch_pepe" en ese directorio como ya te dije antes. Luego ejecuta el comando, y... ¡ya está! ¡Se ha aplicado el parche que envió "pepe"! Si quieres haz "darcs changes" para comprobarlo. La sintaxis del comando es muy simple: "darcs", obviamente; luego "apply" de aplicar y por último el nombre del archivo con el parche, en este caso "Patch_pepe". Para finalizar esta mini-guía, ve a la carpeta "juan" donde también tienes una copia de "Patch_pepe" y trata de hacer lo mismo, o sea, de aplicar el parche. ¿Qué pasa? Pues que no funciona... Efectivamente, hay dos restricciones básicas: no se pueden generar parches desde el repositorio original y tampoco se pueden aplicar parches a las copias del repositorio original... ¿Y ahora cómo actualizo la copia de "juan"? ¡Muy sencillo! Primero debes actualizar la copia del repositorio original, o sea, "principal" con el parche de "pepe" (ñesto ya lo hemos hecho). Luego vas al directorio "juan" y... ¡claro, el comando "darcs pull"! Así habrás actualizado también el directorio de Juan.

¡Hemos acabado! Espero que os haya servido para algo y, si no... ¡No pasa nada! Estoy acostumbrado a hacer cosas inútiles... :D

Perdón por el mensaje tan largo y un saludo.
Última edición por Alex_13_estu el Sab Abr 19, 2008 8:00 am, editado 1 vez en total
Alex_13_estu
 
Mensajes: 75
Registrado: Jue Mar 27, 2008 5:22 pm

buen trabajo

Notapor drincast » Vie Abr 18, 2008 6:24 pm

Buen trabajo

Bueno Alex_13_estu, buena por lo el tuto, pues ya me había leído el que recomiendas, pero este me dejo un poco más claro los conceptos de cómo generar los parches y cargarlos en el dir principal.

Esta genial,

Una consultica, pues creo que sos el que mas ha manejado el darcs, como hago para que el darcs me identifique los caracteres especiales (tildes), pues instale la versión que no necesita de cygwin, y el comando export no funciona en la consola de Windows.

Ve gracias, seguí así,

SALUDOS
:lol:
drincast
 
Mensajes: 34
Registrado: Mié Mar 12, 2008 4:23 pm
Ubicación: Colombia

Notapor Alex_13_estu » Sab Abr 19, 2008 7:55 am

¡Hola drincast! Es cierto, no me acordaba que ese comando no funcionaba bajo Windows. Ya he añadido ese detalle en el manual, así que está todo solucionado. En lugar de "export" hay que usar "set". Nada más, gracias por haberme avisado del fallo.

Un saludo.
Alex_13_estu
 
Mensajes: 75
Registrado: Jue Mar 27, 2008 5:22 pm

Notapor lacabra25 » Jue Ago 07, 2008 1:03 pm

hola, esta bien la mini guia de darcs, solo una cosa, ¿si el repositorio original no esta en el mismo ordenador que la copia, se realizaria la actualizacion con pull del mismo modo?, y otra cosa, si quisiera tener colgado el repositorio original en un servidor (uno ftp ya que trabajamos con archivos) ¿como aplicaria los parches y coomo ejecutaria los comandos, es decir, al servidor ftp no puedo acceder desde el simbolo del sistema y ejecutar darcs o si?, la mini guia esta completa mientras no se trabaje con un servidor, ¿podrias explicar con algun ejemplo como se aria trabajando con el reposiroio en un servidor?

Y un ultimo detalle, ¿sabes de alguna interfaz grafica para darcs en windows o si es posible usar darcs desde devc++ configurandolo como CVS?

Gracias por esta miniguia sobre darcs.

Edito esto para no poner otro post, pues se me olvido preguntar antes, si es posible añadir en vez de un archivo (darcs add yo.txt) una carpeta completa, pues a veces puede ser que en un proyecto en grupo los archivos se organizen en carpetas, incluso en trabajos que no se hacen en grupo, como una carpeta donde iran todas las imagenes del juego y cosas asi, y no quisiera añadirlos sueltos y que al copiar el repositorio aparezcan todos mezclados, sino añadirlos todos juntos añadiendo la carpeta (si es posible añadirlos todos a la vez) y que despues en la copia del repositorio aparezcan dentro de sus correspondientes carpetas.

Vuelvo a editar porque probando darcs para aprender a manejarlo me he visto con un problema, si de un repositorio se hacen dos copias, pongamos pepe y jaime, y el repositorio principal modifica un archivo añadiendo algo al final y pepe y jaime tambien modifican el mismo archivo al final (por ejemplo para añadir sus nombres al final de una lista de personas que estan trabajando en el proyecto, por inventarnos un ejemplo) una vez pepe hace record y despues hace pull para recivir lo que se ha modificado del repositorio oficial da una especie de error y me aparece y el archivo en cuestion aparece con texto con ^^^^^^ y cosas asi ¿a que se debe?. Despues intente aplicar el cambio realizado por jaime al repositorio original y me da otro error que creo que es igual, esto me ocurre al hacer apply en el repositorio original ¿a que se debe?, ¿como lo soluciono?, tambien probe a despues de poner apply y el nombre del archivo del parche de jaime poner --mark-conflicts o algo asi por como esto me aparecia en el mensaje de alerta y el texto con ^^^^^^ que no me aparecia antes en el archivo del repositorio original ahora me aparece ¿hay alguna forma de evitar estos problemas o de solucionarlos sin tener que arreglarlo a mano, pues con archivos de texto se arregla relativamente facil a mano, pero si son imagens, por ejemplo, es mas delicado ponerse a cambiar bytes de una imagen desde un editor de texto?
Esta cuenta ahora a pasado a la cuenta jhg
Avatar de Usuario
lacabra25
 
Mensajes: 222
Registrado: Mié Abr 02, 2008 9:45 pm
Ubicación: Tenerife (España)


Volver a Artículos, traducciones y documentación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado