Dentro de la industria de desarrollo de software es muy común tener un grupo de trabajo trabajando en distintos computadores, o incluso en distintos lugares geográficos, algo habitual principalmente en proyectos de código abierto, por lo que se necesita tener control estricto sobre el código fuente de los proyectos, ya que bajo ese ambiente de trabajo, se pueden dar situaciones como las siguientes:
Ante dichas situaciones, lo más recomendado es utilizar un sistema de manejo de código y control de versiones, ya que estos sistemas cuentan con herramientas adecuadas para abordar tales problemas; y dentro de ese grupo de sistemas, uno de los más destacados y populares es Git.
Las instrucciones asumen que tienes instalada una distribución tipo Debian (como Ubuntu o Linux Mint). Dependiendo de cuál sea tu distribución de Linux el manejador de paquetes puede variar. Por ejemplo, en el caso de que uses Arch Linux, debes cambiar apt-get install por pacman -S
Descarga e instala el programa: http://git-scm.com/download/win
En Linux simplemente debes abrir la consola. En Windows debes abrir la consola Git que puedes encontrar en Start > All Programs > Git > Git Bash. El resto de operaciones son idénticas entre las versiones de Git de ambos sistemas operativos.
Primero debes indicarle a Git tu nombre y correo. Eso se hace con los siguientes comandos (omitir signo $):
Para crear un repositorio a traves de GitLab se debe primero configurar una conexión segura con la plataforma. Para eso debe generarse un par de llaves RSA (una llave privada y una llave pública) que asegurará que la comunicación con el servidor será confiable. (Para curiosidades, se pueden encontrar mayores detalles sobre el cifrado RSA aquí).
Luego, en el servidor se debe debe conocer tu llave pública que se encuentra en el archivo .pub generado. (Esta llave corresponde al archivo /home/user/.ssh/id_rsa.pub si dejaste todo en blanco).
Una manera de visualizar dicha llave es:
Ingresamos a https://gitlab.com/ creando una cuenta con el correo especificado a git en la terminal. Posterior al login debemos irnos a la seccion de configurar ssh-keys, para llegar a este lugar debemos realizar:
Aqui procederemos a insertar nuetra llave generada, ademas de un nombre para identificarla, y una fecha en la que esta expirara
Con este proceso se termina de válidar la conexión entre el terminal Git de su computador y el servidor, permitiendo la creación de repositorios.
La creacion de un repositorio en GitLab es tan sencillo como hacer unos click's y configurar algunos parametros estandar
Seleccionamos la opcion de creacion de un projecto/repositorio en blanco, lo que nos mostrara la siguiente ventana:
Seleccionamos un nombre, una descripcion opcional, y el nivel de visibilidad privado (leer siguiente punto antes de continuar). Se recomienda no inicializar el repositorio con el archivo README, esto le permitiria a GitLab mostrarle una serie de comandos a modo de recordarle los pasos iniciales.
Usted debe privatizar su repositorio para evitar compartir información con otros grupos, ya sea a propósito o de forma involuntaria. Al momento de crear el repositorio se debe seleccionar la opción para que sea privado. Si ya creó el repositorio y lo quiere hacer privado, usted debe ir al Dashboard (Página Principal), elegir su repositorio desde el menú Your Projects, estando en la pagina del proyecto ir al menú vertical de la derecha entrar a la sección Settings->General, expandir Permissions y allí mismo verificar que Project Visibility se encuentre en Private (Cabe destacar que una vez haga esto, el repositorio solo sera visible para miembros pertenecientes a este).
Para añadir los integrantes de su grupo al repositorio, seguir los mismos pasos para llegar al menú Settings (Dashboard/Projects->Your Projects->Project_to_manage->Settings).
Ahora seleccionar la sección Members. Se desplegará una ventana donde podrá ingresar el usuario de la persona a añadir y el permiso que tendrá, para esto último se recomienda seleccionar la opción Master.
Para finalizar, dejar en blanco la fecha de expiración de acceso y presionar el botón verde Add to project para concluir el proceso.
¡¡Recuerde agregar a los ayudantes de su asignatura a su repositorio!! Los ayudantes deben tener acceso a su repositorio para poder visualizar su código y así proceder a evaluarlo. El no realizar esto podría conllevar a que ¡su tarea no sea evaluada a tiempo!.
Cuando se termina de crear el repositorio remoto, se mostrara en la web información para configurar el repositorio de forma local.
El flujo de integracion deberia ser el siguiente: Creacion de un proyecto en una terminal -> Subida del proyecto a GitLab -> Bajar el proyecto desde el resto de las terminales del equipo
Este proyecto puede ser creado de la manera que estimen conveniente. Puede ser un IDE inteligente, pueden ustedes haber creado las carpetas y archivos. Lo unico que importa es que tengan total control de cual es la carpeta raiz del proyecto.
Es importante que sepan donde quieren bajar el proyecto, mediante la consola diriganse a la carpeta donde quieran descargarlo y ejecuten:
Al trabajar en Git, se van dando distintas instancias donde se almacenan los cambios realizados a los archivos, entre ellas el stash, el área de preparación y finalmente el sistema de archivos del repositorio, lo que permite tener un mayor respaldo de la información que se va generando y/o eliminando, además de un mayor control y evitar así cambios irreversibles.
Por lo tanto, al momento de generar cambios en el repositorio local, el primer paso para respaldarlos en el repositorio remoto es mover los cambios realizados al stash, lo que se hace con el comando add.
Se puede agregar más de un archivo escribiendo sus nombres después del comando, separados con espacios uno del otro.
O bien, también se agregar todos los archivos de la carpeta actual al reemplazar el nombre del archivo por un punto (.).
Por el contrario, si se desea eliminar contenido del repositorio local y reflejarlo en el repositorio remoto, se debe usar el comando rm:
Al igual que con el comando add, se pueden eliminar más de un archivo a la vez o eliminar todos los archivos de la carpeta en la que se encuentra trabajando, siguiendo las mismas reglas que las mencionada para dicho comando.
Una vez terminada la preparación del stash, estos cambios deben pasar al área de preparación. Para ello, se hace uso del comando commit. El comando agrupa todos los cambios del stash bajo un índice alfanumérico y posiblemente un comentario descriptivo, cuando se hace uso de la opción -m.
Finalmente, para enviar los cambios ya preparados al servidor se debe usar el comando push, el cual detalla a que ubicación remota vamos a enviar los cambios, en este caso dejamos por defecto origin y a cuál branch de la ubicación remota se aplicarán los cambios. En este caso, lo haremos al branch master.
En resumen el flujo de trabajo de subida al repositorio es: git add [archivos] -> git commit -m "mensaje" -> git push
Si sus compañeros realizaron commits mientras usted no trabajaba y ninguno de sus archivos genera conflictos con los que se encuentran en el repositorio remoto, puede utilizar el comando pull para descargar los archivos del repositorio remoto y así actualizar su repositorio local.
En caso de estar trabajando con múltiples branches, se pueden incorporar como parámetros la ubicación del repositorio remoto y la branch de la cual se requieren los archivos. Típicamente en nuestro caso estos parámetros corresponderán a origin y master respectivamente.
Al iniciar una nueva jornada de trabajo, es muy probable que usted desee conocer el estado actual del repositorio. Para ello, puede hacer uso del comando log. Dicho comando mostrará una lista de los commits realizados en la branch en la que se encuentran trabajando, desde el más actual hasta el primer commit.
Por cada commit se muestra el índice que lleva, el autor del commit, la fecha de publicación y el mensaje descriptivo dado por el usuario. Para navegar por el log, utilizar las flechas arriba y abajo, y para salir de la lista de logs, apretar la tecla q.
Si se percata que se realizó un nuevo commit por parte de uno de sus compañeros y desea saber los cambios efectuados, puede hacer uso del comando show para ello. Este comando recibe por argumento el índice del commit a visualizar.
Se mostrara una lista detallada de los cambios realizados, donde se añadirá un - al comienzo de una fila para indicar que ésta se eliminó y un + para indicar que se agregó la fila que se presenta a continuación. Para navegar por los cambios utilizar las teclas Re Pág y Av Pág y utilizar la tecla q para salir de la descripción.
Si desea comparar los cambios realizados actualmente que no han sido pasado al stash, con el último commit realizado en la branch de trabajo, puede hacer uso del comando diff.
Finalmente, si desea comparar los cambios que se encuentran en el stash, con el último commit realizado en la branch de trabajo, puede hacer uso del comando status.
Se despliega la información de la misma manera que al utilizar el comando show y se utilizan las mismas teclas para navegar por la información y para salir del modo.
El uso de branches o ramas permitira un trabajo más ordenado pues permitira trabajar con versiones del proyecto sin afectar la linea de trabajo principal, como por ejemplo una rama que se encargue de crear la grafica, otra rama que se encargue de agregar la base de datos, otra rama que se encargue de agregar funciones, etc. Luego de que una rama termine su trabajo y se encuentre seguro de su funcionamiento, puede funcionar su parte con la rama padre, y asi sucesivamente.
Ver ramas existentes
Creacion de una rama
Creacion de una rama y movimiento a esta automaticamente
Movimiento a una rama
Fusionar 2 ramas
Borrar una rama
La información entregada en esta guía corresponde a una pincelada de la capacidad que tienen estas herramientas de Git. Si desea tener más información sobre los comandos utilizados, o las distintas opciones y modos de operación que se les puede añadir, pueden hacer uso del comando man al anteponerlo a la instrucción Git a análizar, o bien, añadiendo la opción --help a la instrucción.
Si desea conocer operaciones avanzadas, tales como el manejo de branch, la modificación de commits o el uso de checkout, se recomienda el tutorial Git de tutorialspoint.
Cheat Sheet con operaciones principales de Git
Guía Introductoria al uso de Branches
Si alguno de estos pasos le pareció dificil o generó confusión, puede revisar el ejemplo ilustrado de uso de Git