Skip to content
Profesor IAP edited this page May 3, 2018 · 52 revisions

Trabajando con GIT

Recomendaciónes

Instalar extensión "Open Terminal Here" explicado en este documento https://goo.gl/O0k6IU para ahorrar tiempo en escribir la localización donde queremos que trabaje nuestro terminal.

Configuración

Si quieres evitar que aparezca usuario como autor de tus subidas de código al repositorio, configura tu nombre y dirección de correo electrónicos

git config user.name "profeIAP"

git config user.email correoProfeIAP@correo.es

Si quieres comprobar tu configuración, lanza el siguiente comando para listar todas las propiedades que Git ha configurado

git config --list

EJEMPLO

$ git config --list

user.name=profeIAP

user.email=correoProfeIAP@correo.es

color.status=auto

Puedes comprobar qué valor tiene Git para una clave específica

git config {clave}

EJEMPLO

$ git config user.name

profeIAP

###¿Cómo corregir el usuario que ha realizado un commit?

Corregimos el nombre de usuario (y su correo electrónico) siguiendo los pasos que tenemos en el apartado de arriba.

Una vez hecho, lanzamos el siguiente comando

git commit --amend --author="carmen456 <carmen456@gmail.com>"

Donde:

  • carmen456 es el usuario de github
  • <carmen456@gmail.com> es la dirección de correo electrónico

NOTA: No olvides poner la dirección de correo electrónico entre los signos de mayor y menor.

Obtención de ayuda

Si alguna vez necesitas ayuda usando Git, hay tres formas de ver la página del manual para cualquier comando de Git

git help {comando}

git {comando} --help

man git-{comando}

EJEMPLO

$ git help commit

$ git add --help

$ man git-status

Descargar proyecto completo

git clone https://github.com/profeIAP/panelDeControl

CUIDADO: cambia la dirección http por la de tu proyecto

Clonar rama remota

git clone -b NOMBRE_RAMA https://github.com/profeIAP/panelDeControl

Donde NOMBRE_RAMA es la rama del servidor que deseas descargarte.

Utilizar versión anterior del proyecto

Si quieres probar cómo funcionaba el proyecto en alguna de las versiones anteriores deberás lanzar un

git checkout HASH_VERSION

Donde HASH_VERSION es el ID del commit (p.e. el 723420 de uno de los commits de nuestro repositorio) al que quieres "viajar" en el tiempo.

Obteniendo el HASH_VERSION

Los distintos HASH_VERSION puedes consultarlos directamente en el apdo. commits de nuestro GitHub (o lanzando un git log desde la terminal)

Deshaciendo el salto

Para volver al "presente" (última versión existente del proyecto) deberás lanzar un

git checkout master

Actualización

La forma más sencilla es lanzar

git pull

pues actualiza automáticamente los cambios sin necesidad de lanzar varios comandos. No siempre funciona: requiere que tus compañeros no hayan modificado el mismo fichero que tú (conflicto que debe ser resuelto manualmente)

Si no funciona el comando anterior deberás recurrir a:

git fetch # Pregunta si hay cambios en el servidor

git status # No necesario (es para ver qué ha cambiado)

git merge origin # Se trae los cambios (hasta que no lo hagas tienes tu código)

Ahora debes editar los ficheros que te indique GIT que tiene algún conflicto (ábrelos con el editor y busca las anotaciones que ha metido GIT)

Subida

git add .

git commit -m "Un comentario explicatorio de lo que hemos hecho"

git push origin master

Resolviendo "colisiones"

Fusionar (merge) ficheros de texto no suele se complicado pero, cuando hablamos de ficheros binarios (como la base de datos o alguna imagen) da más problemas.

Ante una colisión de este tipo debemos plantearnos ¿qué fichero debemos dejar?

Si decides que el tuyo es el "bueno", lanza un:

git checkout --ours -- path/to/file.txt

Si el bueno es el subido por otro compañero, lanza un

git checkout --theirs -- path/to/file.txt

Donde path/to/file.txt es la ruta al fichero en conflicto.

Ejemplo: supongamos (será más habitual de lo que deseas) que

  • insertas alumnos y/o partes desde la aplicación web. Dicha información se almacena en la BD (y por tanto, cambia el binario)
  • Otro compañero crea una tabla nueva para guardar nuevos datos (tu base de datos no contendrá dicha tabla hasta que te actualices)

¿Qué "checkout" debes lanzar?

Parece claro que es más importante tener la nueva tabla a que se pierdan los datos que has introducido ¿no te parece?

En dicho caso, lanzaremos un git checkout --theirs -- model/dictados.db porque:

  • Es más importante su fichero (--theirs)
  • El fichero que ha colisionado es model/dictados.db (donde model es la carpeta donde tenemos la base de datos y dictados.db es el fichero que la contiene)

Añadir un repositorio remoto

De utilidad (entre otros) cuando

  • tengas código en tu equipo que no has clonado del repositorio "oficial" de tu grupo o
  • quieras comparar vuestro trabajo con los ejemplos del profesor.

git remote add repoProfe https://github.com/USUARIO_GIT/NOMBRE_REPOSITORIO.git

Donde:

Comparar código local contra un repositorio

Imagina que quieres saber qué diferencias hay entre lo que está en tu equipo y algún repositorio (el de tu grupo de trabajo y/o el del profesor)

git diff master origin/master

Compara tu rama master (local) contra la rama master del repositorio de tu grupo de trabajo.

Ramas en remoto

Para subir nuestro código a una rama del repositorio compartido usaremos un

git push origin NOMBRE_DE_TU_RAMA

Para descargar el código de una rama del servidor lanzaremos un

git checkout -t origin/NOMBRE_DE_TU_RAMA

Deshacer commit

Si nos hemos equivocado haciendo un commit (detectamos que hemos olvidado añadir y/o eliminar algún fichero, se ha introducido algún fallo, ...) y nos damos cuenta antes de hacer el push, podemos eliminar dicho commit sin perder los cambios que se hayan hecho en los ficheros lanzando un

git reset HEAD~1

Bibliografía