En este minitutorial de Git daremos un recorrido de cómo usar Git y cuales son sus comandos básicos. Git es una de las herramientas básicas en el desarrollo de aplicaciones web, así como lo es Xdebug, PHPUnit y PHING (estos últimos específicos en PHP).
Git es un popular sistema de control de versiones disponibles como servicios en la Web (en modalidad de pago o gratuitamente), por ejemplo: GitHub y BitBucket.
Git es una herramienta poderosa en el manejo del control de versiones, que permite llevar un seguimiento de los cambios de nuestros archivos en un proyecto determinado, incluso sin estar conectado a un servidor de control de versiones propiamente tal, como sucede en otras herramientas de este tipo.
En la práctica, la forma de trabajar con Git es mediante el uso de las ramas (branch), donde tendremos básicamente:
- Rama Master (master): es la rama donde que llevará el seguimiento de los archivos que mantienen el código estable del proyecto.
- Ramas de Desarrollo: son las ramas que creamos en la medida que vamos agregando nuevas funcionales o sencillamente haciendo un proceso de refactorización del código.
Instalar Git
Para chequear si Git se encuentra instalado en el sistema, se requiere abrir una consola bash y ejecutar el comando:
git —version
Si Git no se encuentra instalado en nuestro equipo, podemos descargarlo desde:
https://git-scm.com/downloads
Git está disponible para los siguientes sistemas operativos: Windows, Mac OS X, Linux y Solaris.
Configuración de básica de Git
Si Git se encuentra instalado, podemos ver la configuración de Git actual mediante el comando:
git config —list
Para establecer una nueva configuración, podemos hacerlo indicándole a Git si deseamos hacerlo a nivel de sistema (--system
), a nivel de usuario (--global
), o a nivel de proyecto.
Si deseamos establecer una nueva configuración de Git a nivel de usuario, que es lo tradicional, señalando los parámetros de nombre de usuario y su correo electrónico, entonces desde una consola bash ejecutamos los comandos:
git config —global user.name ‘My Nombre'
git config —global user.email my@email.com
Para chequear si la nueva configuración ha tenido efecto, usamos:
git config —list
Finalmenta, aunque no es parte de la configuración de Git propiamentetal, es muy recomendable establecer una llave SSH para usarlo como identificación al momento que trabajemos con repositorios Git remotos, situación que en algún momente sucederá. La llave SSH se genera con el comando:
ssh-keygen
También es posible saber si existe una llave SSH creada previamente, si estamos en Mac OS X entonces en nuestra carpeta de usuario aparecerá un directorio oculto de nombre ‘.ssh’
Inicializar un repositorio Git
Los proyectos se manejan en carpetas (directorios) y es en la raiz de esa carpeta donde ejecutamos el comando parar inicializar un repositorio Git para ese proyecto:
git init
Si nuestro proyecto se lozaliza en la carpeta
C:/wamp/www/mi_primer_proyecto/
, entonces en esa carpeta debemos inicializar Gitgit init
y así crear un repositorio Git local para ese proyecto.
Para conocer el estado del repositorio se usa la instrucción:
git status
También es posible iniciar un repositorio desde un repositorio remoto Git. Esto se puede efectuar usando distintos protocolos de comunicación (http, https, ssh), lo habitual es usar el protocolo SSH, en ese caso si tenemos un repositorio en BitBucket y contamos con los permisos para clonar ese repositorio, entonces nos podemos ubicar por ejemplo, en la carpeta C:/wamp/www/
y ejecutamos la instrucción en una consola bash:
git clone git@bitbucket.org:mi_username_en_bitbucket/nombre_proyecto.git
En la cuenta de BitBucket debemos colocar la parte pública de nuestra llave SSH, para de esta forma BitBucket reconozca nuestra petición como válida y autorizada.
Establecer archivos para seguimiento en Git
Conocer el estado del repositorio lo hacemos mediante la instrucción:
git status
Para agregar archivos al próximo commit (una especie de snapshot de la rama en un repositorio):
git add nombre_archivo
Para agregar todos los archivos a un nuevo commit:
git add -A
Crear un commit:
git commit -m 'aquí va el comentario informativo de ese commit'
En el ciclo de vida de un repositorio suceden muchos commits, si necesitamos visualizar los commits:
git log --oneline --decorate
Para volver a alguno de los commits anteriores y recuperar la carpeta del proyecto a un estado anterior:
git checkout codigo_numerico_del_commit
Podemos asignarle un Tag al commit actudal de modo de usar el Tag en vez de código numérico generado por Git:
git tag nombre_de_la_tag_creada
También es posible asignarle un nombre a un commit cualquiera usando la instrucción:
git tag nombre_de_la_nueva_tag codigo_numerico_del_commit
Para mostrar todos los tags:
git tag
Si queremos volver al útimo commit de la rama usamos:
git checkout nombre_de_la_rama
Trabajando con Ramas
Mostrar las ramas presentes en el repositorio:
git branch
Mostar todas las ramas incluso las remotas:
git branch --all
La rama prefijada con asterisco (*) en su nombre, es la forma que tiene Git para indicarnos la rama en la cual estamos posicionados actualmente.
Crear una rama a partir de una cualquiera, basta con posicionarnos en una rama cualquiera y ejecutar la orden.
git branch nombre_de_la_nueva_rama
Cambiar de ramas en Git:
git checkout nombre_rama
Fusionar ramas, nos posicionamos en una rama y elegimos otra rama la cual deseamos fusionar con la actual:
git merge nombre_rama_a_fusionar
Eliminar la rama, para llevar a cabo la operación debemos estar fuera de la rana que vamos a eliminar:
git branch -d nombre_de_rama_a_borrar
Trabajando con repositorios remotos
Agregar un repositorio remoto Git que se ubique localmente:
git remote add origin /c/wamp/www/repositorio
La instrucción anterior se aplica en Windows cuando usamos la terminal bash que nos provee Git.
O clonar un repositorio de remoto usando SSH, para tal efecto es necesario disponer de claves SSH en nuestro sistema y disponer de la llave pública de esa misma clave en el sistema que administra el repositorio remoto.
git clone git@bitbucket.org:mi_user/nombre_proyecto.git
Para generar las claves se usa ’ssh-keygen’, como ya se mencionó anteriormente.
Agregar los cambios del repositorio remoto en nuestro repositorio local:
git pull origin master
Si no queremos perder los cambios de nuestro repositorio local al hacer el pull del repositorio remoto, entonces usamos:
git pull --rebase
Enviar los cambios a un repositorio remoto:
git push origin master
Por defecto, git denomina ‘origin’ al repositorio remoto.
Otras utilidades básicas de Git
Eliminar el seguimiento (tracking) de un archivo que ya se encuentra en el repositorio:
git rm --cached mi_archivo.txt
Es habitual definir un archivo llamado ‘.gitignore’ en la raiz de la carpeta al inicio del proyecto, para informale a Git acerca de los archivos y carpetas a las cuales no se les hará seguimiento. Es decir, deshabilita el control de versiones para esos archivos y carpetas por parte de Git, en general se trata de archivos de caché o similares.
Eliminar un directorio que ya se encuentra trackeado en el repositorio:
git rm -r --cached mi_directorio
Hay que tener cuidado con el uso de las instrucciones del tipo ‘git -rm –…’, pues son de caracter destructivo.
Conclusiones
Es este ha sido un vistazo a nivel general de las instrucciones básicas que debemos conocer para ser operativos con Git usando solamente una terminal bash.
Referencias
Remover el archivo de la historia de todos los branch del repositorio: https://help.github.com/articles/remove-sensitive-data/
Homepage de Git: https://git-scm.com
Servicio online de repositorios Git:
- GitHub: https://github.com.
- BitBucket: https://bitbucket.org.
Manual de Git en versión PDF: https://git-scm.com/book/en/v2