Introducción a Git, GitHub/BitBucket...

elkaoD

En el foro de MV he propuesto que añadan GitHub a las redes de perfil (¡dad manita para darle visibilidad a la propuesta y que lo añadan!) pero como las cosas de palacio van despacio mientras tanto propongo que se vaya haciendo una lista.

Sé que aquí más de uno lo usamos pero los he visto de pasada y he ido perdiéndoles el rastro, así que os animo a que los posteéis (aunque no lo uséis mucho) y vamos recopilando mientras tanto.

EDIT: Ampliado también a BitBucket.


A grandes rasgos: un repositorio Git es un almacén de archivos (generalmente de texto, aunque también soporta binarios) con versionado, de tal forma que puedes subir tus proyectos y estos quedarán guardados y versionados, es decir, se guarda el histórico de tu proyecto. Gracias a ello puedes volver a cualquier punto en el pasado de forma cómoda, ver los cambios que se han ido realizando o incluso trabajar en "lineas del tiempo paralelas" (llamadas branches), por ejemplo para implementar una funcionalidad experimental sin romper tu código base... y luego mezclarlas cómodamente en la línea temporal principal.

Git fue desarrollado por Linus Torvalds, harto de las limitaciones del resto de sistemas de versionado, y liberado a la comunidad. Desde entonces, se ha impuesto como estándar de facto.

Aunque sea para pequeños proyectos, es genial. ¿A quién no le ha pasado romper un proyecto haciendo un cambio, romper todo, y no poder volver atrás porque ya has guardado ? ¿O romper algo y no saber exactamente qué habíamos cambiado? Con Git todo esto se acabó.


GitHub es un proveedor gratuito de repositorios Git públicos con una interfaz web MUY cómoda (y programas para desktop muy sencillos de usar.) Se podría decir que es el devianART de los programadores (salvando las distancias.)

Por defecto los repositorios de GitHub son públicos: todo el mundo puede ver y descargarse tu código. GitHub favorece el desarrollo colaborativo, a modo de red social. Aparte de las típicas funcionalidades como comentar código, issue tracker, wiki, etc. permite realizar forks de repositorios, es decir, llevarte un repositorio completo a tu cuenta y trabajar con él en forma paralela. Una vez hayas realizado cualquier trabajo en el repositorio, puedes realizar un "pull request" si te interesa que lo añadan a la línea principal de desarrollo del proyecto. Ideal para el software libre.

Si aún no usas GitHub te animo a probarlo. No sólo es útil para los desarrolladores, sino que además es un punto genial para recopilar tus proyectos, una suerte de portfolio para desarrolladores (un gran complemento a los CV, por cierto.) Y te obliga a hacer buen código, aunque sea por vergüenza por si lo ve alguien xD

Comentar también que GitHub también ofrece Gist. Una especie de PasteBin pero también colaborativo y versionado. De hecho todo Gist es a su vez un repositorio GitHub completo.


Empezar a usar Git puede asustar si no has usado nunca ningún sistema de versionado, sobre todo si quieres tener dominado el tema de branches y demás. El truco es empezar poco a poco, simplemente usarlo y ya irás aprendiendo. Versiona un proyecto y punto.

Sin embargo, desde GitHub sacaron aplicación con GUI que es sota-caballo-rey. MUY MUY fácil de usar.

http://windows.github.com/
http://mac.github.com/
http://eclipse.github.com/

Yo lo sigo usando por consola por temas de comodidad (y porque la aplicación no está para Linux) pero reconozco que la aplicación está muy pulida... y no sólo funciona con GitHub, sino con repositorios Git en general. ¡Probadla!

Recursos:

23
elkaoD

Comentar también que GitHub también ofrece Gist. Una especie de PasteBin pero también colaborativo y versionado. De hecho todo Gist es a su vez un repositorio GitHub completo.

Merkury

Siempre he querido usar GitHub, pero no le acabo de pillar el tranquillo.

Podías hacer un tuto los expertos de Github, para los mas newbies como yo :P

1 respuesta
Lecherito

Yo tengo Bitbucket y es "terkitos", como aquí, lo que siempre he dudado es para hacer más branches y merges sin que se joda todo xDDDD

MTX_Anubis

yo uso bitbucket que ofrecen más a cambio de menos que github

https://bitbucket.org/metalrastiz/

Lo uso para repos privados de proyectos que tengo y el que tengo publico que era para lecherito, un ejemplo hecho con osgi para que viera como se utilizaba pero que además creo que no se lo pasé nunca xD (lo siento mucho lecherito).

Por cierto, pon que git está desarrollado por linus hombre!

2 respuestas
Nucklear

Este es mi Github, no tengo nada salvo el script que hice en python para el MV-Coders on Fire, a ver si teniendo a mas gente me animo con algo y lo empiezo a usar:

https://github.com/Nucklear

Tunnecino

Yo te dejo mi github aunque todo lo tengo en repositorio privado, https://github.com/Arrogance y como dice #5 yo tb iré migrando los proyectos a bitbucket.

elkaoD

#3 sí que es verdad que empezar es complicado, sobre todo si quieres tener dominado el tema de branches y demás. El truco es empezar poco a poco, simplemente usarlo y ya irás aprendiendo. Versiona un proyecto y punto.

Sin embargo desde GitHub sacaron aplicación con GUI que es sota-caballo-rey. MUY MUY fácil de usar.

http://windows.github.com/
http://mac.github.com/
http://eclipse.github.com/

Yo lo sigo usando por consola por temas de comodidad (y porque la aplicación no está para Linux) pero reconozco que la aplicación está muy pulida.

1 respuesta
Tunnecino

#8 Además, esa misma APP vale para cualquier repositorio git, por ejemplo yo lo uso con github y con bitbucket en windows.

1 respuesta
elkaoD

Por cierto, dad manita para darle visibilidad a la propuesta para que añadan GitHub a las redes de perfil y así quizá con visibilidad de animen desde el MVTeam. ¡Los BitBucketeros insistid también para que añadan también vuestra red si os interesa!

#5 cómo se me pudo pasar!? xD

#9 en efecto, aunque tener la integración con GitHub es genial.

RaCe

yo siempre he querido ponerme a usarlo pero lo de no tener repos privados me tira un poco para atrás, ahora que veo que hay app para mac compatible con bitbucket que permite privados voy a intentar ponerme

EnZo

Gracias por añadirme elkaoD. A ver si subo mi spserver, que tenia en mente hacerlo este verano.

Github está cogiendo mucha fama la verdad. Tanta que incluso he visto proyectos que se están migrando de google code a este. Y bueno sourceforge ya ha quedado en el olvido por culpa de estos dos (mi impresion).

r2d2rigo

Y los que somos demasiado hipsters y usamos CodePlex?

2 respuestas
BLZKZ

yo también uso de eso cuando me da el venazo xD

https://github.com/blzkz

1 respuesta
B

El mío: https://github.com/SantiMunin

1 respuesta
HeXaN

¿Aquí podemos preguntar las dudas que tengamos o se deja sólo para la lista de usuarios?

1 respuesta
elkaoD

#13

#14 #15 añadidos.

#16 por mí que se pongan dudas y demás también, porque si no el hilo va a ser pobretón. Quizá un cambio de título no le vendría mal :)

Tunnecino

Para los de MAC, aquí tenéis un cliente para Git, Mercurial, SVN... http://www.atlassian.com/software/sourcetree/overview

BLZKZ

por cierto gitg es una GUI para usar git que está bastante bien (linux)

Lecherito

Alguien que explique cómo funcionan bien los branches y merge, y cómo dos usuarios pueden editar algo al mismo tiempo? <3

1 respuesta
elkaoD

#20

Sobre branching, no podría explicarlo mejor que:

http://learn.github.com/p/branching.html

+

http://es.wikipedia.org/wiki/Diff

Gracias a "diff" no se guardan los archivos completos sino sólo sus diferencias. Esto es lo que permite que dos usuarios modifiquen el mismo archivo, ya que no se guarda el nuevo archivo sino sólo lo que esos usuarios han cambiado.

Hay casos especiales (conflictos), como por ejemplo que un usuario modifique una linea que otro ha borrado. Aquí inevitablemente hay que hacer el merge a mano, pero las herramientas te facilitan la vida (te crean varios archivos: el tuyo, el del otro usuario, el del commit anterior al conflicto y un archivo con el texto completo + los conflictos lado-a-lado para que simplemente borres o modifiques lo que quieras.)

Pyronhell

Mi github: http://www.github.com/pyronhell

Yo cliente git en OS X uso Tower

Tig

Aquí estoy yo

https://github.com/Maragues

Casi todo lo que he hecho es privado para otras compañías, no es muy interesante mi github...

BLZKZ

Yo añadiría el cheat sheet de git (que viene en github) a #1 http://rogerdudler.github.com/git-guide/files/git_cheat_sheet.pdf

1 respuesta
elkaoD

#24 hecho. Luego pondré algunas URLs más que para mí son básicas (http://learn.github.com por ejemplo.)

1 respuesta
elkaoD

BUMP FTW

Un truquito que a mucha gente no se le ocurre y a mí me resulta vital para trabajar con más gente: al ser Git un sistema distribuído se pueden crear sub-redes temporales de repositorios.

Esto yo lo uso cuando estoy trabajando con alguien en alguna feature experimental. En lugar de subir al servidor central (como podría ser GitHub) los dos extremos ejecutan este comando:

git daemon --export-all --base-path=~/git_repos_folder/ --reuseaddr --detach

Esto ejecuta un demonio de Git en modo read-only al que acceder con git://ip-o-host/nombre-repo. Ahora cada vez que yo toco código, mi compañero puede hacer un pull de mi repositorio (y viceversa) y trabajar en una feature en paralelo sin molestar al resto del equipo.

Se puede poner también con acceso de escritura (pero van sin usuarios y con permiso para TODO, ojo...) Para más info: Git daemon

1
Tunnecino

Por cierto, añadir a #25 esto: http://try.github.com Un curso rápido sobre como usar git.

11 días después
Foxandxss

Buena idea, yo añadí el mio en mi perfil :)

EnZo

Iba a preguntarle a elkaoD por mp, pero puede que algun pardillo como yo necesite la misma ayuda.
He creado un nuevo repositorio de una clase en JS. El caso es que lo he subido todo, y al rato me he dado cuenta de que la estrucura de carpetas no es la que quiero y he creado nuevas subcarpetas y he movido todos los archivos.

Compo puedo updatear todo mi proyecto desde linea de la shell? Por inferfaz no me deja.

2 respuestas
BLZKZ

#29 si lo has updateado en github directamente haz un clone.

Si lo tienes updateado en local usa

git add *
git commit -m "blablabla"
git push

(hablo de memoria, pero creo que era así xD)

2 respuestas