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.
Primero se debe actualizar la lista de paquetes:
Luego se procede a instalar git:
Las instrucciones asumen que se tiene 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 se use Arch Linux, se debe cambiar apt-get install por pacman -S
Descarga e instala el programa: http://git-scm.com/download/win
En Linux simplemente se debe abrir la consola. En Windows se debe 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 se debe indicar a Git el nombre y correo. Eso se hace con los siguientes comandos (omitir signo $):
Reemplazar FIRST_NAME y LAST_NAME por el nombre y apellido respectivamente. Reemplazar MY_NAME@example.com por su correo institucional.
Para crear un repositorio a traves de GitLab se debe primero configurar una conexión segura con la plataforma. Para eso se debe generar un par de llaves RSA (una llave privada y una llave pública) que asegura que la comunicación con el servidor sea confiable. (Para curiosidades, se pueden encontrar mayores detalles sobre el cifrado RSA aquí).
Luego, en el servidor se debe conocer la llave pública que se encuentra en el archivo .pub generado. (Esta llave corresponde al archivo /home/user/.ssh/id_rsa.pub si se deja todo en blanco).
Una manera de visualizar dicha llave es:
Se debe ingresar a https://gitlab.com/ creando una cuenta con el correo especificado a git en la terminal. Posterior al login se debe ir a la sección de configurar ssh-keys, para llegar a este lugar se debe realizar:
Aqui se procede a insertar la llave generada, además 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
Se selecciona la opcion de creacion de un projecto/repositorio en blanco, lo que nos mostrara la siguiente ventana:
Se selecciona 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 permite a GitLab mostrar una serie de comandos a modo de recordar los pasos iniciales.
Se debe privatizar el 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 se creó el repositorio y se quiere hacer privado, se debe ir al Dashboard (Página Principal), elegir el 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 se haga esto, el repositorio sólo es visible para miembros pertenecientes a este).
Para añadir los integrantes del grupo al repositorio, se debe ir al menu de la izquierda y seleccionar Project Information->Members.
Ahora seleccionar la sección Invite Members. Se desplegará una ventana donde se podrá ingresar el usuario de la persona a añadir y el permiso que tendrá, para esto último se recomienda seleccionar la opción Maintainer.
Para finalizar, dejar en blanco la fecha de expiración de acceso y presionar el botón azul Invite 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 se estime conveniente. Puede ser un IDE inteligente, se pueden haber creado las carpetas y archivos. Lo unico que importa es que se tenga total control de cual es la carpeta raiz del proyecto.
Es importante que se conozca donde se quiere bajar el proyecto, mediante la consola dirigirse a la carpeta donde se quiera descargar y ejecutar:
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 los nombres después del comando, separados con espacios uno del otro.
O bien, también se pueden 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 puede 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 se van a enviar los cambios, en este caso se deja por defecto origin y a cuál branch de la ubicación remota se aplican los cambios. En este caso, se hace al branch master.
En resumen el flujo de trabajo de subida al repositorio es: git add [archivos] -> git commit -m "mensaje" -> git push
Si los integrantes realizan commits mientras no se encuentra trabajando y ninguno de los archivos genera conflictos con los que se encuentran en el repositorio remoto, se puede utilizar el comando pull para descargar los archivos del repositorio remoto y así actualizar el repositorio local.
En caso de estar trabajando con múltiples branches, se puede incorporar como parámetros la ubicación del repositorio remoto y la branch de la cual se requieren los archivos. Típicamente en este caso estos parámetros corresponden a origin y master respectivamente.
Al iniciar una nueva jornada de trabajo, es muy probable que se desee conocer el estado actual del repositorio. Para ello, puede hacer uso del comando log. Dicho comando muestra 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 hay un nuevo commit por parte de uno de algun integrante y se desea saber los cambios efectuados, se puede hacer uso del comando show para ello. Este comando recibe por argumento el índice del commit a visualizar.
Se muestra una lista detallada de los cambios realizados, donde se añade 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 se desea comparar los cambios realizados actualmente que no han sido pasado al stash, con el último commit realizado en la branch de trabajo, se puede hacer uso del comando diff.
Finalmente, si se 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 utiliza las mismas teclas para navegar por la información y para salir del modo.
El uso de branches o ramas permite un trabajo más ordenado pues permite 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 la parte propia 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 se 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, se puede 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 se 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 resulta dificil o genera confusión, puede revisar el ejemplo ilustrado de uso de Git