Git es un software de control de versiones para el mantenimiento de versiones de aplicaciones, extremadamente útil cuando éstas tienen un gran número de archivos de código fuente. Al principio, Git se pensó como un motor de bajo nivel sobre el cual otros pudieran escribir la interfaz de usuario o front end como Cogito o StGIT. 3 Sin embargo, Git se ha convertido desde entonces en un sistema de control de versiones con funcionalidad plena. 4 Hay algunos proyectos de mucha relevancia que ya usan Git, en particular, el grupo de programación del núcleo Linux.
Que es control de versiones:
Se llama control de versiones a la gestión de los diversos cambios que se realizan sobre los elementos de algún producto o una configuración del mismo. Una versión, revisión o edición de un producto, es el estado en el que se encuentra el mismo en un momento dado de su desarrollo o modificación.
Buenas Prácticas:
Cada desarrollador o equipo de desarrollo puede hacer uso de Git de la forma que le parezca conveniente. Sin embargo una buena práctica es la siguiente:
Se recomienda utilizar 4 tipos de ramas: Master, Development, Features, y Hotfix.
- Master:
Es la rama principal. Contiene el repositorio que se encuentra publicado en producción, por lo que debe estar siempre estable.
- Development:
Es una rama sacada de master. Es la rama de integración, todas las nuevas funcionalidades se deben integrar en esta rama. Luego que se realice la integración y se corrijan los errores (en caso de haber alguno), es decir que la rama se encuentre estable, se puede hacer un merge de development sobre la rama master.
- Features:
Cada nueva funcionalidad se debe realizar en una rama nueva, específica para esa funcionalidad. Estas se deben sacar de development. Una vez que la funcionalidad esté desarrollada, se hace un merge de la rama sobre development, donde se integrará con las demás funcionalidades.
- Hotfix:
Son bugs que surgen en producción, por lo que se deben arreglar y publicar de forma urgente. Es por ello, que son ramas sacadas de master. Una vez corregido el error, se debe hacer un merge de la rama sobre master. Al final, para que no quede desactualizada, se debe realizar el merge de master sobre development.
Etapas del Git:
Local:
1. Modificado
2. Staged (Preparado)
3. Commit (Confirmado)
Modificado -> Staged -> Commit
Como configurar el git por primera vez:
Después de Instalarlo:
[code language=»bash»]$ git config –global[/code]
Agregar Nombre de Usuario y Correo Electronico
[code language=»bash»]
$ git config –global user.name "[usuario]"
$ git config –global user.email "[usuario@dominio.com]"
[/code]
Para ver la Ayuda:
[code language=»bash»]
$ git help [opcion]
$ git help config
[/code]
Inicializando un Repositorio:
[code language=»bash»]$ git init [/code]
Inicializa un repositorio en la carpeta donde se encuentre o se ejecute el comando
Despues de esto, se agregan los archivo o carpetas del proyeccto
Para ver el estado de repositorio local:
[code language=»bash»]
$ git status
$ git status -s
[/code]
Aqui se muestran los archivos «untracked» o que no han sido agregados o preparados.
Para agregar a GIT (staged): para preparar la copia antes del commit.
[code language=»bash»]
$ git add [archivo para agregar]
$ git add .
[/code]
Agrega todos los archivos
El Commit:
[code language=»bash»]
$ git commit -m "Mensaje deseado para el comit en cuestion"
[/code]
El mensaje para el commit es obligatorio. Es importante escribir una buena descripción de los cambios contenidos en este commit.
El log de versiones:
[code language=»bash»] $ git log [/code]
–> muestra las versiones con commit
[code language=»bash»] $ git log –stat [/code]
El Checkout:
[code language=»bash»] $ git log [/code]
Se selecciona un id de version
[code language=»bash»] $ git checkout [id del commit] [nombre del archivo] [/code]
Este comando permite comodines como . o ., etc.
Nota: si se realiza un checkout, se debe de hacer un commit despues para preservar los cambios.
Cambiar comentario del Commit:
[code language=»bash»]
$ git commit amend -m "[mensaje]"
[/code]
Tags:
Etiquetas –> sirve para nombrar versiones dentro de los commits
[code language=»bash»]
$git tag -a version_0.1 -m "version 0.1 o de prueba"
[/code]
Para ver el tag:
[code language=»bash»]
$ git tag
[/code]
Para ver un tag con detalle:
[code language=»bash»] $ git show version_0.1 [/code]
[code language=»bash»] $ git log version_0.1 [/code]
Configurando una llave ssh para remoto:
[code language=»bash»] $ ssh-keygen -t rsa [/code]
El sistema pide nombre de archivo (dejar en blanco), pide frase (dejar en blanco)
Para ver la llave y copiarla en equipo remoto:
[code language=»bash»] cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> ‘cat >> .ssh/authorized_keys && echo "Key copied"’ [/code]
Este comando conecta el equipo local con el remoto, copia la llave local recien hecha en el remoto para autenticacion.
Inicializar Repositorio remoto:
Parado en el equipo remoto (por ssh puede ser), Se crea una carpeta con extension .git –> proyecto.git
[code language=»bash»] $ mkdir proyecto.git
$ cd proyecto.git
$ git init –bare [/code]
–> Inicializa repositorio tipo remoto para comando de push, clone, fetch
Para ver los Repositorios remotos:
[code language=»bash»]$ git remote -v [/code]
Para renombrar un git remoto se hace con remote rename:
[code language=»bash»]
$ git remote rename [nombre_original] [nuevo nombre]
$ git remote rename origin oficina-remoto
[/code]
Agregar Repositorio git remoto en local:
[code language=»bash»]
$ git remote add [nombre_origen] [dir_servidor]/ruta_directorio.git
$ git remote add servidor_oficina ssh://[USUARIO]@[DIR_IP]:[PUERTO_IP]/opt/git/[NOMBRE_PROYECTO].git
[/code]
Como subir de local a Remoto
[code language=»bash»]
$ git push [nombre_origen] master
$ git push origin master
[/code]
Para clonar un repositorio:
Cuando se clona un repositorio, estas cosas suceden:
- Se crea una carpeta con el nombre del repositorio,
- se inicializa el git (git init)
- se crea un repositorio remoto llamado origin
- se descargan todos los archivos y commits
- se hace checkout a la rama prinicipal (master)
Para clonar un repositorio remoto en local: en una carpeta local
[code language=»bash»] $ git clone [dir_servidor]/ruta_directorio.git [directorio_destino]
$ git clone ssh://[USUARIO]@[DIR_IP]:[PUERTO_IP]/opt/git/[PROYECTO].git[/code]
Nota 1: si se quiere seguir trabajando, se debe de tener en cuenta el nombre del repositorio remoto
Nota 2: cuando se clona, se crea automaticamente un repositorio git remoto llamado «origin». Este se puede renombrar
Obtener Cambios del remoto:
[code language=»bash»]
$ git pull [nombre_origen] master
[/code]