lunes, 10 de octubre de 2022

GIT - 4 - Trabajando con repositorios remotos.

Lo normal es que cuando tenemos un repositorio remoto, bien sea en GitHub o en otro servidor distinto, trabajaremos con el varias personas por lo que es normal que se introduzcan cambios. Vamos una serie de comandos que nos facilitarán la tarea.

$ git remote -v 

Nos muestra las URLS asociadas con el control remoto-origen del repositorio. Normalmente suelen apuntar a la misma dirección pero no tiene porque ser así.

txema@macbook:~/Prueba$ git remote -v
origin	git@github.com:usuario/Prueba.git (fetch)
origin	git@github.com:usuario/Prueba.git (push)

$ git remote show origin

Nos muestra aun más información que el comando anterior. 

txema@macbook:~/Prueba$ git remote show origin
* remote origin
  Fetch URL: git@github.com:usuario/Prueba.git
  Push  URL: git@github.com:usuario/Prueba.git
  HEAD branch: main
  Remote branch:
    main tracked
  Local branch configured for 'git pull':
    main merges with remote main
  Local ref configured for 'git push':
    main pushes to main (up to date)

Ahora, imagina que un compañero ha realizado y subido cambios al servidor, si volvemos a ejecutar el comando.

txema@macbook:~/Prueba$ git remote show origin
* remote origin
  Fetch URL: git@github.com:usuario/Prueba.git
  Push  URL: git@github.com:usuario/Prueba.git
  HEAD branch: main
  Remote branch:
    main tracked
  Local branch configured for 'git pull':
    main merges with remote main
  Local ref configured for 'git push':
    main pushes to main (local out of date)

Puedes ver como el comando, en la última línea nos dice "local out of date" o "desactualizado local". Esto es que ha habido cambios desde la última vez que actualizamos nuestro repositorio con los datos del servidor.


$ git branch -r

Muestra las ramas remotas del repositorio.


$ git fetch 

Si este comando muestra alguna salida es porque le está diciendo al repositorio local que ha habido cambios en el repositorio remoto pero sin traer esos cambios al repositorio local. En otras palabras si lo ejecutas y te sale una respuesta es porque algo se ha modificado en el repositorio remoto pero no te modifica el repositorio local con el que estas trabajando.

Sin cambios en el repositorio remoto. (El comando no muestra ninguna salida)

txema@macbook:~/Prueba$ git fetch

Ahora modificaré el archivo readme.md del repositorio remoto y esto es lo que ocurre:

txema@macbook:~/Prueba$ git fetch
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
Unpacking objects: 100% (3/3), 708 bytes | 708.00 KiB/s, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
From github.com:usuario/Prueba
   f2612e6..7eb5580  main       -> origin/main

En cambio:

$ git pull

Trae los cambios de ese repositorio remoto al local, pero solo de la rama en la que estamos.

txema@macbook:~/Prueba$ git pull
Updating f2612e6..7eb5580
Fast-forward
 README.md | 1 +
 1 file changed, 1 insertion(+)

Lo mismo que con el comando "git push" podemos lograr haciendo:

1) git fetch  
2) git merge origin/main

txema@macbook:~/Prueba$ git fetch
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
Unpacking objects: 100% (3/3), 750 bytes | 750.00 KiB/s, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
From github.com:usuario/Prueba
   7eb5580..d660c34  main       -> origin/main

txema@macbook:~/Prueba$ git merge origin/main
Updating 7eb5580..d660c34
Fast-forward
 README.md | 1 +
 1 file changed, 1 insertion(+)


Podemos ver los cambios que ha habido usando:


$ git log -p -1

txema@macbook:~/Prueba$ git log -p -1
commit d660c34793c59a229a6ba3f2492ed97d3522eeda (HEAD -> main, origin/main, origin/HEAD)
Author: usuario <usuario@users.noreply.github.com>
Date:   Mon Oct 10 11:10:55 2022 +0200

    Update README.md

diff --git a/README.md b/README.md
index 6c611a5..3ad79b4 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,3 @@
 # Aquí Irán las instrucciones.
 Añadida una nueva rama
+ahora probare git fetch y git merge origin/main


Nueva Rama en Repositorio Remoto.

Vamos a suponer que un compañero ha creado en el repositorio remoto una rama llamada "auxiliar" para realizar pruebas del programa. Ahora mismo en nuestro repositorio local solamente tenemos la rama main. Si quisiéramos traerla al local lo haríamos con:

$ git checkout <nueva_rama_remota>

en nuestro caso

txema@macbook:~/Prueba$ git checkout auxiliar
Branch 'auxiliar' set up to track remote branch 'auxiliar' from 'origin'.
Switched to a new branch 'auxiliar'

y luego haríamos un "git pull" para actualizarla.

txema@macbook:~/Prueba$ git pull
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 694 bytes | 694.00 KiB/s, done.
From github.com:usuario/Prueba
   f2612e6..e442da5  auxiliar   -> origin/auxiliar
Already up to date.

Si queremos obtener el contenido de las ramas remotas pero sin fusionar automáticamente cualquier contenido que haya podemos usar:

$ git remote update

Esto obtendrá el contenido de todas las ramas remotas, para que podamos hacer un checkout o fusionarlas según sea necesario, peor no lo hace automáticamente.


Subir una nueva rama que hayamos creado localmente al repositorio remoto.

# Creamos la nueva rama local
txema@macbook:~/Prueba$ git checkout -b datos
Switched to a new branch 'datos'

# Creamos algo de contenido y hacemos una confirmación.
txema@macbook:~/Prueba$ echo '# Nueva rama' > datos.dat
txema@macbook:~/Prueba$ git add .
txema@macbook:~/Prueba$ git commit -m 'nuevo archivo en rama datos'
[datos 6746957] nuevo archivo en rama datos
 1 file changed, 1 insertion(+)
 create mode 100644 datos.dat

# Subimos la nueva rama al repositorio remoto con:
# git push -u origin [nueva_rama_local]
txema@macbook:~/Prueba$ git push -u origin datos
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 2 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 359 bytes | 359.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: 
remote: Create a pull request for 'datos' on GitHub by visiting:
remote:      https://github.com/usuario/Prueba/pull/new/datos
remote: 
To github.com:usuario/Prueba.git
 * [new branch]      datos -> datos
Branch 'datos' set up to track remote branch 'datos' from 'origin'.

Eliminar una Rama remota.


$ git push --delete origin <rama_a_borrar>







No hay comentarios:

Publicar un comentario