GIT básico¶
Lectura OBLIGATORIA => blog de Diego Martín.
Y en modo vídeo:
Resumen de zonas:¶

Para crear un README en texto plano, pero con un formato agradable y convertible recurriremos al formato Markdown (Fazt Code - Markdown )
Ejercicio:¶
- Crear un repo con README.md conectado con GitHub.
- Añadir colaborador (profe
@luiscastelar). - El
README.mdcontendrá vuestro nombre y email coorporativo. - Clonar repositorio en otra ubicación y realizar una captura. Añadirla (integrada) al READMe.md.
- Crear un archivo de credenciales (nombre de usuario y contraseña) denominado
.env. - Crear archivo
.gitignorecon el contenido:*.env
Aplicaciones auxiliares: GitFiend o GitG como apoyo visual a git bash. También Git Extensions como plug-in de VS.
Conectando nuevos equipos¶
Nuevo repositorio¶
Cuando queramos conectar nuevos equipos, p.e. el de casa, al repositorio BARE (central) deberemos:
- Tener acceso al repositorio
BAREmediante pares de llaves público/privadas, o por token[^1]. - Obtener la dirección del repositorio
BAREal que queremos conectar. Ésta debe ser del tipogit@github.com:luiscastelar/pruebasDAW1.git. Ésta dirección tiene 3 partes: git@github.com-> el servidor al que nos estamos conectando [^2].luiscastelar-> vuestro nombre de usuario en github (o el servidor al que os conectéis).pruebasDAW1.git-> el repositorio al que os estáis conectando.- Clonar el repositorio sobre el directorio que deseemos con
git clone git@github.com:luiscastelar/pruebasDAW1.git {{NOMBRE DEL DIRECTORIO}}.
A repositorio ya existente¶
También podemos conectar un repositorio local ya creado anteriormente y con contenido con el comando git remote add origin git@github.com:luiscastelar/pruebasDAW1.git, y posteriormente sincronizar sus contenidos con:
git pull origin main
git push -u origin main
Con el primer comando descargamos el contenido remoto y con el segundo subimos el contenido local y establecemos origin como push por defecto.
A menudo se producirán conflictos en el git pull que deberemos resolver a mano.
Revisión de la historia¶
- Detallado:
git log - Resumido en una línea:
git log --pretty=oneline - Con más datos:
git log --pretty=format:"%h - %an, %ar : %s" - En árbol:
git log --graph
Y por supuesto combinados: git log --pretty=oneline --graph
Ver cambios entre versiones¶
git diff <commit-id-1> <commit-id-2> -- file-to-check
Pudiendo ser hash de commit, etiquetas o nombre de ramas.
Revertir cambios¶
- git reset --soft HEAD~1
- git reset --hard HEAD~1
Fuente: @midudev
Merge y rebase¶
¿Qué ocurre cuando trabajamos con ramas o hemos realizado cambios desde 2 equipos distintos? \

Pues que tenemos que unir los caminos. Tenemos 2 opciones: merge y rebase.
git mergecrea un commit MERGE de unión de ambas ramas.git rebasecrea un commit REBASE que contiene los commits de la línea temporal alternativa y elimina la elimina. Como si nunca hubiera existido, pero con el mismo resultado que elmerge.
Ventaja: Visualmente más sencillo ya que el historial aparece lineal.
Inconveniente: Los creadores de los commits que desaparecen pierden el seguimiento de sus cambios por los HASH. => SÓLO REALIZAR EN REPOSITORIOS UNIPERSONALES o nunca.

cherry-pick¶
Nooooo:¶

PRÁCTICA (voluntaria)¶
Haz sólo lo que no tengas ya en el ejercicio anterior:
- Crea una cuenta en github (con el email corporativo).
- Crea un repositorio privado (vacío).
- Sigue los pasos que te proporciona para crear un git local o subir uno existente.
- Crea un README.md con:
- Autor del repositorio
- eMail de contacto (corporativo)
- Crea un directorio para la UT1 con un README.md donde documentes esta práctica.
- En otra carpeta, clona tu repositorio remoto.
- Captura de pantalla.
- Súbela a ./img
- Enlázala al README de la práctica.
- Crea un archivo “a.txt” con 3 líneas y sincroniza con el repositorio remoto.
- Modifica la primera línea del archivo en la web y la tercera en local con contenidos distintos e intenta sincronizarlos. Captura el conflicto y añádelo a la documentación.
- Busca la estrategia de solucionar el conflicto y realiza un merge.
- Mediante gitfiend o gitg captura la línea de tiempo.
- Regresa al punto 7 (en el tiempo) y muestra el contenido del archivo a.txt mediante una captura.
- Vuelve al
HEADy documentalo todo.
Trabajando con ramas:¶
Creación y fusión de ramas¶
Sincronización de ramas¶
En ocasiones aparecen nuevas ramas en remoto que debemos crear en local para poder descargar las actualizaciones. ¿Lo más sencillo?
for remote in `git branch -r | grep -v /HEAD`; do git checkout --track $remote ; done`
git pull -a
Gestión de ramas¶
Traer commits a la rama RAMA¶
Cuando en la rama dev hemos realizado commits interesantes puede ser de gran relevancia poder traérnoslos a la rama main.
Para ello sólo necesitamos conocer su hash (1) y, desde la rama main (a la que lo queremos llevar) deberemos escribir git cherry-pick HASH.
(1) Para capturar su hash, nos ubicaremos en la rama dev con git checkout dev y veremos el historial de commits con git log. Ésto nos arrojará el hash de cada commit, además de la descripción, autor y marca temporal.
Jugando con ramas¶
Ejercicios¶
Forks¶
Pull request¶
Preguntas que todo programador debería conocer¶
Mover ramas¶
Resulta que me he liado y he creado una rama main en remoto y en local no leí y deje por defecto la rama master. ¿Qué puedo hacer?
Tenemos varias opciones, pero voy a simplificarlas en 2:
- Renombrar la rama remota de main a master y seguir las indicaciones que nos proporciona github:
bash git branch -m main master git fetch origin git branch -u origin/master master git remote set-head origin -a - Clonar la rama main en un nuevo repositorio remoto, aplicar los cambios en local a mano (sugiero la aplicación Meld) y subir los cambios.
Hooks¶
Algo general: Hooks - Jeremy Holcombe
Pre-commit¶
Como estamos trabajando sobre Java, utilizaremos un pre-commit inicial para verificar el estilo de código.
Si estuviéramos en otros lenguajes, especialmente aquellos sin tipado fuerte, podríamos verificar algunas cosas sobre tipos y analizadores sintácticos en lenguajes no compilados.
- Instalación
- Configuración de git para utilizar el analizador
- Ajustes de estilos. Podemos querer adaptarlo a nuestra necesidades (de empresa).
- Probarlo:
bash git commit -m"style fix google" Comenzando auditoría... Auditoría concluida. [main e0eaeed] style fix google 1 file changed, 128 insertions(+), 105 deletions(-) rewrite Palindromos.java (96%)
Podemos ver en las líneas 2 y 3 que realiza la auditoría de código y la pasa sin warnings.
En este punto, podría ser interesante plantearnos si deberá pasar los test antes de los commits, después o antes del push.
Post-receive¶
Utilizado para CI/CD... lo veremos ampliamente más adelante.
Referencias:¶
- Documentación OFICIAL -> Git reference manual y en español
- David Poza
- Manuel Cillero
- Vídeos aclarativos -> PildorasInformáticas 1-5, 10-11
- Pelao Nerd - 1 y Pelao - 2
Notas al pie¶
[^1]: Es un sistema de acceso a nuestro repositorio que se genera un token con los permisos necesarios a el repositorio adecuado y con fecha de caducidad, lo cual otorga bastante seguridad. [Información sobre acceso por token]. [^2]: Puede haber otros servidores interesantes, p.e. gitlab, gitbucket, o el vuestro privado.