Entornos de desarrollo

1º DAM - Curso 2020-2021

User Tools

Site Tools


apuntes:git

Git: Sistema de control de versiones

Con el objetivo de que durante el curso podáis trabajar con la herramienta git utilizando Bitbucket como la plataforma para gestionar vuestros repositorios de código, os dejo aqui una serie de instrucciones muy básicas para comenzar a trabajar y realizar al menos las operaciones más esenciales.

Instalación de git

Lo primero que necesitaremos será instalar git en nuestro equipo. Podéis encontrarlo en su página web y, siguiendo las instrucciones del siguiente video, podéis instalarlo sin mayor problema en Windows.


Si utilizáis un Linux Debian o derivados podéis utilizar directamente apt para su instalación:

santi@zenbook:$ sudo apt-get install git

En cualquier caso no hay que olvidar que debemos configurar git antes de empezar a usarlo. Al menos deberemos configurar nuestra identidad, asignando un nombre y un email al equipo desde el que lo usaremos para identificarnos cada vez que sincronicemos nuestro repositorio local con el remoto (a parte de que además nos pida nuestras credenciales para conectarnos con Bitbucket)

santi@zenbook:$ git config --global user.name "Santiago Faci"
santi@zenbook:$ git config --global user.email "miemail@gmail.com"

También tenemos que tener en cuenta que siempre podremos comprobar esta y otras configuraciones en cualquier momento:

santi@zenbook:$ git config --list
user.name=Santiago Faci
user.email=miemail@gmail.com
. . .
. . .

Crear una cuenta en Bitbucket

El siguiente paso será crear una cuenta en Bitbucket para acceder a todos los servicios que está plataforma nos ofrece, tanto de gestión de repositorios para nuestros proyectos como de gestión de incidencias, Wiki, . . .


Crear un repositorio en Bitbucket

Una vez que tenemos una cuenta ya creada, podremos crear repositorios para nuestros proyectos.

En este caso, a modo de ejemplo, crearemos un repositorio remoto en Bitbucket y más adelante lo actualizaremos con un proyecto que hayamos iniciado en nuestro equipo (repositorio local)

Además, una vez creado el repositorio remoto en Bitbucket, en nuestro equipo marcaremos nuestro proyecto como un proyecto que será gestionado a través de git y lo configuraremos para que pueda ser gestionado a través de dicha herramienta y fijaremos como repositorio remoto con el que sincronizarse el que acabamos de crear en Bitbucket.

Marcamos el proyecto como un proyecto que será gestionado con git creando el repositorio local:

santi@zenbook:/miproyecto$ git init

Añadimos la URL del repositorio remoto con el que sincronizaremos nuestros cambios:

santi@zenbook:/miproyecto$ git remote add origin http://bitbucket.org/sfaci/miproyecto

Ahora ya tenemos nuestro repositorio local. Podemos continuar trabajando en el proyecto y seguir con el resto de comandos de esta parte cuando tengamos algo listo para subir al repositorio remoto, o bien podemos subir ya lo que tengamos listo en este momento.

Añadimos los cambios que queremos subir al repositorio remoto. En este caso añadimos todo lo que haya en la carpeta del proyecto. Otras veces quizás sólo queramos subir parte de lo que hemos desarrollado (una carpeta o simplemente algunos ficheros sueltos):

santi@zenbook:/miproyecto$ git add .

Marcamos esos cambios como listos para subir y añadimos el comentario para esta validación (commit)

santi@zenbook:/miproyecto$ git commit -m 'Subiendo los primeros cambios'

Subimos los cambios al repositorio remoto a la rama master (por ahora sólo trabajamos en esa rama directamente)

santi@zenbook:/miproyecto$ git push origin master


Subir un cambio en el proyecto al repositorio remoto

A medida que avancemos en el desarrollo de nuestra aplicación nos puede interesar ir subiendo algunos cambios al repositorio remoto. Lo podemos hacer en cualquier momento y además hay que tener en cuenta que no es necesario subir todo aquello que hayamos cambiado, sino que podemos añadir (git add) sólo aquellos cambios que nos interese.


Descargar un repositorio y actualizarlo

Por otra parte, también podemos necesitar acceder a un repositorio remoto ya creado para continuar a partir de ese trabajo ya realizado e ir subiendo nuevos cambios a medida que los realizemos. Para eso podemos clonar un repositorio remoto en nuestro equipo, realizar los cambios que vayamos necesitando y subir dichos cambios (a medida que nos interese) al repositorio remoto de donde clonamos inicialmente el proyecto.


Comprobar si hay cambios en el repositorio remoto

Crear una nueva rama

santi@zenbook:$ git checkout -b develop

Cambiar de rama

santi@zenbook:$ git checkout develop

Fusionar ramas

santi@zenbook:$ git checkout master
santi@zenbook:$ git merge develop

Eliminar un fichero del repositorio remoto

Hay que tener en cuenta que en este caso eliminaremos el fichero tanto del repositorio remoto como del local

santi@zenbook:$ git rm Fichero.java

Y en el caso de un directorio

santi@zenbook:$ git rm -r directorio

Evitar que algunos ficheros/carpetas formen parte del repositorio

También es posible evitar que algunos ficheros o carpetas o incluso extensiones determinadas pasen a formar parte del repositorio de forma permanente. En este caso hablamos de que estos ficheros se ignoran incluso aunque estén dentro de alguna carpeta que se incluya para ser gestionada como parte del repositorio. De esa manera podemos trabajar más cómodamente sin necesidad de ir teniendo cuidado de no incluirlos.

En este caso pensamos en ficheros como los .class generados al compilar una clase Java, o los .jar, las carpetas que almacenan las configuraciones de los proyectos en cualquier lenguaje y también cualquier otro fichero que quizás queramos usar para el desarrollo pero no sea necesario enviar al repositorio como parte del código del proyecto.

En este caso es necesario crear un fichero con el nombre .gitignore en la carpeta raíz del repositorio y añadimos los ficheros, carpetas o extensiones que queremos que se ignoren. A continuación se muestra un ejemplo.

.gitignore
# Ficheros generados Java
*.class
*.jar
 
# Ficheros OSX
.DS_Store
 
# Carpetas que contienen ficheros generados
bin/
out/

Por último, y una vez creado el fichero, se tendrá que añadir como parte del repositorio como cualquier otro. Se permite que se hagan cambios siempre y cuando se validen y suban como corresponde.

Dejar de mantener un fichero en el repositorio remoto

Ahora suponemos que queremos dejar de sincronizar con el repositorio remoto un fichero pero queremos seguir manteniéndolo en el repositorio local porque, por ejemplo, queremos que forme parte del proyecto pero sólo en nuestro equipo.

santi@zenbook:$ git rm --cached Fichero.java

Y para el caso de un directorio

santi@zenbook:$ git rm -r --cached directorio

Y si además lo que realmente queremos es que esos ficheros o carpetas no formen parte del repositorio remoto podemos hacer que sean ignorados añadiéndolos el fichero .gitignore

Eliminar del repositorio remoto ficheros eliminados ya en local directamente

Al utilizar Git deberíamos utilizar el comando git rm para eliminar cualquier fichero del repositorio. Si por alguna razón ya hemos eliminado algunos ficheros del proyecto directamente sin utilizar el comando anterior, Git nos pedirá todavía que hagamos los cambios efectivos para el repositorio remoto si queremos hacer el correspondiente commit para que estos ficheros se eliminen en nuestro repositorio en Internet.

En ese caso, podemos utilizar este comando, que marca como eliminados para el repositorio remoto todos aquellos ficheros que hayamos eliminado en local directamente.

santi@zenbook:$ git rm $(git ls-files --deleted)

Obtener el historial de commits del repositorio

Podemos obtener el historial de cambios (commits) utilizando el comando git log (para salir del historial hay que pulsar la tecla escape)

santi@zenbook:$ git log
commit f1f20725ad152654bf7684b324109b1eace75b04
Author: . . .
Date:   Sat Nov 4 10:44:37 2017 +0100
 
    Cambios para hacer que funcione algo
 
commit e63e2b06f7fe4b724dabe78d437baa964ad384f6
Author: . . .
Date:   Sat Nov 4 10:43:12 2017 +0100
 
    Ya se puede registrar
 
commit a1160bce457b6e86f1cd7bb40205703f269dcb57
Author: . . .
Date:   Sat Nov 4 02:59:08 2017 +0100
 
    Arreglado el bug de eliminar
. . .
. . .

También podemos visualizar una versión reducida de este historial utilizando la opción –oneline:

santi@zenbook:$ git log --oneline
f1f2072 Cambios para hacer que funcione algo
e63e2b0 Ya se puede registrar
a1160bc Arreglado el bug de eliminar
. . .
. . .

Obtener el estado del código para un commit determinado

Si conocemos el hash de un commit concreto, podemos obtener el estado del código en el momento de dicho commit utilizando el comando git checkout pasando el hash de dicho commit como se muestra en el ejemplo.

santi@zenbook:$ git checkout a1160bce457b6e86f1cd7bb40205703f269dcb57
Note: checking out 'a1160bce457b6e86f1cd7bb40205703f269dcb57'.
 
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
 
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
 
  git checkout -b new_branch_name
 
HEAD is now at a1160bce... Arreglado el bug de eliminar

Para conocer el hash del commit podemos utilizar el comando git log tal y como se explica en el punto anterior o bien acceder a la sección de GitHub o Bitbucket donde se muestra dicho historial desde la misma web.

Y para volver al estado actual, en este caso a la rama master, que es donde estaba trabajando:

santi@zenbook:$ git checkout master
Previous HEAD position was a1160bce... Arreglado el bug de eliminar
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.

© 2020 Santiago Faci

apuntes/git.txt · Last modified: 2020/07/17 08:14 by Santiago Faci