Control de versiones con GIT
GIT es un sistema distribuido de control de versiones (ale, ¿como se te ha quedado el cuerpo?).
¿Qué es un sistema de control de versiones? Para explicarlo de forma sencilla, podríamos decir que es una forma de guardar todo el historial de un proyecto de forma que se almacenan todas las modificaciones que vamos haciendo sobre los archivos que editamos (que ha cambiado, quien lo ha cambiado, que había antes…).
Hay otros sistemas de control de versiones como Subversion o CVS, sin embargo GIT ha conseguido mucha popularidad en poco tiempo por ser muy fácil de usar y estar creado por Linus Torvalds (el del pingüino). Ademas, muchos de los grandes proyectos de hoy en día lo están usando (Ruby on Rails, jQuery, Android, Wine, Fedora, VLC, Gnome, etc).
Para los no iniciados en ningún sistema de estos, empezar puede resultar un poco difícil. En este post voy a intentar explicar los comandos básicos para iniciarnos en GIT.
GIT tiene muchas ordenes, pero con unas pocas podemos defendernos y trabajar perfectamente.
Antes de nada, necesitamos un servidor GIT (no es realmente necesario, pero para un trabajo en equipo hace las cosas mucho mas sencillas).
Para no liarnos en exceso, usaremos alguno de los que podemos encontrar gratuitamente en Internet. Para mi gusto, uno de los mejores es GitHub. Os creáis una cuenta gratuita y seguimos. Venga, que os espero.
¿Ya? Ok.
Ahora vamos a crear nuestra clave SSH. La clave SSH es un archivo que identifica nuestro ordenador. Esta clave debemos almacenarla en local y también enviarla al servidor. Cuando queramos enviar datos de nuestros proyectos al servidor, éste la validará y comprobará si podemos o no hacerlo.
Para no liarme en cómo crear las llaves, os pongo únicamente los enlaces a los tutoriales (muy cortos y fáciles, no os preocupéis) sobre como hacerlo en Windows, Linux y Mac.
Ahora que ya tenemos todo preparado, vamos crear un nuevo repositorio (un proyecto, vaya) pinchando en botón de New Repository.
En la siguiente pantalla, rellenamos los datos que nos piden.
Después de esto, nos aparecerá una pantalla con las instrucciones para empezar a usar GIT. La verdad es que los chicos de GitHub lo han puesto muy fácil y claro todo. De todas formas explicaré un poco las instrucciones.
Lo primero de todo será instalar GIT (duh!). En Linux, podéis buscarlo por el apt-get o similar. Seguro que lo encontrais. Los usuarios de Mac o Windows tendréis que instalarlo a partir del paquete instalador que encontraréis en la pagina oficial de GIT.
Después de la instalación, el siguiente paso será configurar vuestros datos de usuario (solo lo tendréis que hacer la primera vez que usáis GIT, no por cada proyecto que creéis). Con estas directivas nos identificamos en cada commit (guardado de datos en el repositorio) y podremos controlar quien hizo cada cambio en los archivos.
He de decir que los comandos de GIT los vamos a ejecutar en una consola / terminal / ventana de comandos. Aunque hay interfaces gráficas, prefiero hacer esto de la “forma tradicional”. Así que abrimos una nueva ventana de terminal.
Ejecutamos los comandos que ponen en la página de GitHub.
mkdir nombre_de_nuestro_proyecto
Con esto ya tenemos una carpeta en donde vamos a guardar nuestro proyecto.
Ahora nos metemos dentro de la recién creada carpeta.
cd nombre_de_nuestro_proyecto
Iniciamos el repositorio con:
git init
Este comando nos creará una carpeta .git que contendrá todo el historial de los archivos. Nunca, repito, NUNCA deberemos tocar esta carpeta o su contenido, pues podríamos perder todo el historial del proyecto.
El siguiente comando:
touch README
Con esto creamos un archivo vacío llamado README. Podemos hacer esto o podemos meter cualquier archivo que nosotros queramos dentro de la carpeta.
Ahora empieza la parte interesante y que repetiremos continuamente en nuestro trabajo diario:
git add README
git add nombre_archivo es el comando que usaremos para decirle a GIT – oye, prepárate para guardar este archivo en el repositorio.
Es un comando que usaremos continuamente, pues a cada modificación de un archivo existente o inclusión de uno nuevo, tenemos que invocar este comando.
Ahora, el segundo comando más usado:
git commit -m "first commit"
Este comando es el que dice – todos los cambios que he hecho hasta ahora, guárdalos!
Es obligatorio en este comando escribir el -m “mensaje_que_explica_los_cambios_realizados”.
Hasta este momento, nuestra carpeta de proyecto no sabe que tiene que guardarse en GitHub. Es decir, no le hemos dicho que está enlazada con el repositorio que acabamos de crear en nuestra cuenta. Para eso hacemos lo siguiente (sólo lo deberemos hacer una vez).
git remote add origin git@github.com:vuestra_cuenta_de_github/el_nombre_de_vuestro_repositorio.git
¡Ahora ya lo sabe!
Por último, enviamos los datos a GitHub con:
git push origin master
¡Y ya está! ¡Nuestro proyecto ya está subido en GitHub!
Eliminad la carpeta de vuestro ordenador y vamos a descargarla desde el servidor para ver como funciona desde aquí.
¿Ya la habéis eliminado?
Pues id a la pagina de vuestro proyecto. Vereis algo como esto:
Esa cadena que veis git@github.com:vuestra_cuenta_de_github/el_nombre_de_vuestro_repositorio.git es la cadena que identifica la descarga de vuestro repositorio con permisos de escritura. Esto no quiere decir que cualquiera que tenga esa cadena pueda tocar vuestro proyecto. Para eso está lo que os comentaba antes acerca del archivo SSH. Si alguien que no está identificado usa esa cadena, el repositorio no se descargará.
Si le dais al botón Read-Only os dará otra cadena que solo tiene permisos de lectura. Aunque seáis vosotros en vuestro ordenador, los archivos que os descarguéis con esa cadena no podréis volver a subirlos.
Empezamos pues, descargando el repositorio con la primera cadena. Nos vamos de nuevo a la ventana de terminal y escribimos:
git clone git@github.com:vuestra_cuenta_de_github/el_nombre_de_vuestro_repositorio.git
El comando git clone como veis, sirve para descargar el repositorio que se encuentra en esa cadena de conexión.
Modificad ahora cualquier archivo del repositorio. Bien.
Si ahora ejecutáis:
git status
Os dice que el archivo ha sido modificado. Este comando sirve basicamente para eso, para ver que ha cambiado y que no hemos guardado en el repositorio.
Vamos a guardar los cambios realizados.
git add nombre_del_archivo
git commit -m "Modificación de prueba"
Ok, ya vuelve a estar a la última.
Si ahora hacemos un git status veremos como ya nos dice que no hay nada por guardar.
Ahora vamos a ver otro comando:
git rm nombre_del_archivo
Este comando elimina el archivo señalado de nuestro repositorio. Lo borra para siempre… aunque seguimos teniendo su historial hasta este punto.
Para guardar el cambio, como siempre:
git commit -m "Me cargo este archivo que ya no necesito"
Por ultimo, para enviar todos los cambios realizados al servidor, hacemos:
git push
Y nuestro repositorio online volverá a estar actualizado.
¡Ah! ¡Se me olvidaba!
Si algún otro usuario modifica nuestro proyecto, la copia que tenemos en local quedará desfasada, claro. No es necesario volver a descargarse el proyecto. Imaginad que tenéis archivos que aun no los habéis enviado al servidor, pero queréis descargar la copia mas actualizada. Sería un engorro descargar todo de nuevo y poner estos archivos en la nueva copia. Para eso existe el comando:
git pull
Este comando os descargará las actualizaciones que se han realizado en el proyecto sin tocar las cosas que aun no habéis subido.
Ok, pues hasta aquí lo súper básico de GIT. Con esto ya podréis usarlo y si necesitáis mas información, escribidlo en los comentarios.
¿Es necesario hacer un ‘git add nombre_del_archivo’ para cada archivo que he modificado?
Si, es necesario.
Aunque si estas dispuesto a añadir TODOS los archivos modificados hay un atajo que es git commit -a -m “comentarios acerca de las modificaciones”.
Atento al modificador -a, que lo que hace es un git add por cada archivo.
Hay que ver lo anticuado que me he quedado…
Hola, apenas stoy utilizando GitHub, tengo una duda, cómo puedo eliminar un archivo dentro del sistema de GitHub?, ya lo elimine por linea de comandos en el git, espero me puedan ayudar y que me haya dado a entender.
Saluditos
Gracias.
@Adri git rm -ruta al archivo-