2.11.2009

Git para trabajar en puestos diferentes

Sea por la razón que sea hace unas semanas comencé a usar git. Realmente no sabía si era una gilipollez más de los programadores Rails o de verdad es tan útil y pragmático como algunas de las herrameintas que usan.

Como soy un hombre de los que quedan pocos, lo instalé y comencé a llevar mi aplicación web para mi nuevo proyecto-negocio con git, al principio un poco contrariado debido al cambio que hay de subversion (centralizado) a git (distribuído), sin embargo pronto esa confusión se tornó en sorpresas (y para bien!):

- No necesitaba tener ningún servidor, cosa que se agradece, puedo montar mi repositorio en cualquier sitio sin ningún proceso funcionando. Hace ya unos años explicaba como montar un pequeño server svn, ahora eso ya no sirve para nada.

- Basta con copiar la carpeta ya tienes todo el repositorio en otro sitio ya que el propio repositorio va dentro de la típica carpeta .git.

- Si quiero tenerlo centralizado no tengo que tener nada especial, con un demonio ssh ya lo tienes.

Y para qué lo uso. Aparte de para llevar la trazabilidad adecuadamente, me permite compartir el trabajo de un puesto a otro. A lo largo del día trabajo a veces hasta en 3 máquinas diferentes, algunas sin conexión a internet, así que puedo llevarme mi trabajo en el pincho USB. Cómo funciona?

para empezar se crea un repositorio y se añade el código
#git init .
#git add *
#git commit -a -m "fist commit"

Imaginemos que voy a otro lado y quiero hacer unos cambios, clono el repositorio y trabajo allí:

#cd /media/disk
#git clone /home/javi/repo/project

ahora trabajo sobre ese repositorio, puedo crear ramas, "comitear", "revertear" (ojo con los comandos que no son iguales que svn) y toda la parafernalia que puedes hacer en svn, git o cual quiera que sea tu sistema preferido.

Cuando llegas a casa de nuevo símplemente mezclas los cambios

#cd /home/javi/repo/project
#git pull /media/disk/project

los cambios se mezclan como si tal cosa. Así de fácil.

De momento no he jugado demasiado con las ramas, seguramente por mi malísima experiencia en svn con las ramas y posteriores merges (todos los conocemos). Todo se andará.

9 comentarios:

miguelSantirso dijo...

Mola! Esto es muy interesante porque llevo un tiempo buscando el por qué de la "moda" de los cvs distribuidos... Me has convencido con esto xD Lo de llevar todo el proyecto en el USB me ha parecido genial. Tendré que probarlo

Lord Taran dijo...

Oye, pues tiene buena pinta. Imagino que también podrás acceder por red a un repositorio?

windenntw dijo...

las ramas funcionan sin problemas, el merging entre N ramas es automático :)

para manejarte un poco mejor, mírate como visualizar el repositorio usando "gitk --all", como hacer merges con "git merge" y como hacer rebases con "git rebase".

OrcoFeo dijo...

Linus Torvalds creó GIT hace tiempo porque no le terminaban de gustar para el desarrollo de Linux los que había (CVS, SVN, ...).

Teniendo en cuenta lo distribuido de su desarrollo en muchísimas ramas simultáneas que después acaban (o no) en la rama oficial del núcleo, tiene por fuerza que ser bueno el GIT este para el tema de las ramas.

javi santana dijo...

@Lord sí, también se puede, con la misma filosofía. Mírate un tutorial de git, en cualquiera te explica como hacerlo

@windenntw: acabo de instalar gitk, tiene buena pinta. Los rebases en svn los hacía a mano y era un infierno. No sé si con la 1.5 de svn la cosa irá mejor.

PpluX dijo...

Te falta algún git push por alguna parte, no? cuando haces un clone de un dir a o otro para integrar los cambios bien lo "pusheas" o bien configuras el nuevo clonado como remote del primero.

javi santana dijo...

Siempre hago pull porque para coger los cambios de otra "rama" me pongo en la carpeta a donde quiero "mezclar".

Lo cierto es que aún no me he metido demasiado con push y otros comandos porque eso me está funcionando bien.

Cómo lo usas tú para usar push?

PpluX dijo...

Ah, ya... usas el nombre del directorio, tus git siempre son directorios locales. En ese caso los pushes o los pull deberían funcionar por igual.

Yo el push lo uso más por usar generalmente ssh como pasarela entre dos git. En ese caso un repositorio sabe del otro pero no al revés, y lo más sencillo es hacer el push desde el git clonado.

También pasaría lo mismo si usas el servidor de git propio para distribuir los git's entre tus máquinas.

patoroco dijo...

Al final hiciste el post de git, jeje. Yo aún sigo con SVN, por pereza más que por otra cosa, ya que tampoco controlo demasiado a nivel de comandos (prefiero usar los menus de Coda por ejemplo ^^), pero vamos, supongo que no tardarán mucho en implementar el soporte en este software si se empieza a hacer popular.