GIT: Directorios remotos y diferencias entre git clone, git pull y git fetch

Repositorios remotos


Vamos a seguir con la serie de tutoriales de Git, con este tutorial vamos a dejar de trabajar en git de forma local y vamos a empezar a trabajar con un repositorio remoto.
Si te has perdido alguno de nuestros tutoriales, aquí os dejo los enlaces a ellos:
Para empezar elegiremos la plataforma con la que deseemos trabajar, yo he elegido GitHub, más que nada porque todos mis proyectos están en GitLab y me apetece probar GitHub y luego ver cuál me gusta más.
Creamos nuestro usuario y en la página de inicio de nuestro perfil, elegimos la opción crear un proyecto nuevo.
Empezamos a crear el repositorio, elegimos el nombre en mi caso se llamará S3R1, podemos darle una descripción al repositorio y luego nos sale la opción de que el repositorio sea público o privado. La diferencia entre ellos es que el público podrá ser visualizado por todos los usuarios. Podremos elegir la opción de iniciar el repositorio directamente con un archivo "README", en esta práctica no vamos a usar dicha opción.
Aclaración*: si creamos el repositorio en GitHub y la cuenta es gratuita solo podremos crear repositorios públicos. Punto para GitLab.

Enlace remoto/local


Una vez creado el repositorio en remoto, nos saldrán las siguientes instrucciones:
  • Creando un repositorio local nuevo.
  • Con un repositorio local ya existente.
  • Importar desde otro repositorio ya existente.
Para esta práctica vamos a hacerlo desde cero, así que nos interesa solo el primer apartado, "Create a new repository on the command line".
Nos situamos en el directorio donde vamos a crear nuestro proyecto e iniciamos nuestro repositorio local.
git init
Creamos un README, escribid en el de que trata vuestro proyecto y tendremos que hacer un "git add ." y un "git commit -m 'Nuestro mensaje'", hasta aquí todo es igual que antes.
Ahora vienen los cambios la primera vez que vayamos a subir el repositorio al remoto, deberemos configurarlo, es decir darle la ruta donde debe almacenarse.
git remote add origin https://github.com/avato92/S3R1.git
¿Qué hace este comando?
Vamos a ir paso por paso, "git remote add" es para añadir un repositorio remoto a nuestro repositorio local, "origin" es el nombre que yo le he dado al repositorio remoto y la URL del final es donde está situado mi repositorio remoto.
Ya lo tenemos configurado ahora vamos a subirlo al repositorio remoto con el comando:
git push origin master
Con este comando le estamos diciendo, sube el proyecto al repositorio "origin" que es el nombre que le hemos dado al remoto con el comando anterior, en la rama "master".
La próxima vez se puede abreviar con un git push, siempre que queráis seguir a origin y en la rama master. Si nos fijamos git nos pedirá las credenciales, el nombre del GitHub y la contraseña, una vez introducidos nos debe subir el archivo README.
Y si ahora entramos en GitHub y miramos nuestro repositorio debe aparecer el archivo que hemos subido.

Descargar el proyecto


Ahora me gustaría mostraros la potencia de Git, imaginemos que estamos en otro ordenador o que somos un grupo de trabajo y nuestro compañero ha creado el repositorio y necesitamos acceder al código.
Git nos da tres formas de hacerlo:
  • git clone [Ruta del repositorio]
  • git pull
  • git fetch

git clone


La primera vez deberemos hacer un "git clone" para descargar el proyecto, esto nos bajará todos los archivos y ramas en nuestro directorio.
Yo me he creado otro directorio S3R2, en el que simularé trabajar desde otro ordenador e ir subiendo archivos, desde uno o otro.
Me sitúo en el directorio S3R2 y introduzco el comando:
git clone https://github.com/avato92/S3R1.git

NOTA*: cuando hagamos un clone, nos creará un directorio con todos los archivos, si os fijáis en mi caso, estaba dentro del directorio S3R2, he hecho un git clone y me ha creado un directorio llamado S3R1.

git pull


Ahora vamos a simular que estamos trabajando y creamos un archivo llamado "gruposMusica.txt" y añadimos tres grupos.
Hacemos el proceso habitual, que hacíamos al trabajar en local, "git add .", "git commit -m 'El mensaje'".
Y ahora solamente introducimos "git push".


Se ha subido el archivo, pero si vamos al directorio desde el que hemos iniciado todo, la S3R1 original, veremos que no están los archivos nuevos que hemos subido.
Para que todos estén sincronizados, deberemos hacer un "git pull" o un "git fetch", por eso es tan importante siempre que empecemos a trabajar, hacer un pull sobre la rama que vamos a trabajar, porque no sabemos si pueden haber cambios realizados por otros compañeros de proyecto.
Nos situamos en el directorio S3R1 original e introducimos "git pull"

git fetch


Ya tenemos los repositorios sincronizados con el remoto, podemos seguir trabajando, ahora añadimos en el directorio original dos grupos más, creamos un archivo llamado "canciones.txt" con tres canciones y lo subimos al remoto.
Nuestro repositorio S3R2, vuelve a estar una rama atrás con el remoto, nos ubicamos en su directorio y ahora usaremos git fetch y veremos que sucede.
Hasta aquí todo normal, igual que si usásemos un "git pull".
Pero introducid en la consola "ls -l", no aparece "canciones.txt", intentad modificar "gruposMusica.txt", siguen apareciendo los tres grupos.
¿Qué sucede? Vaya comando más inútil no sirve para nada, menudo tutorial más malo que nos miente.
Para nada, hay que fijarse, si hacemos un "git status", veremos que nos dice que nuestro repositorio esta un paso por detrás de la rama origin/master
Si usamos el comando "git checkout origin/master", nos pondrá en la rama que ha creado al hacer el "git fetch" con toda la información actualizada.
Tenemos dos opciones, podemos hacer un "git pull" y listo como nos indica o podemos hacer un "git merge" desde la rama master.
Vamos a coger la opción merge, porque para hacer un "git pull", no hacía falta hacer un "git fetch", la gracia de este comando es que nos guarda en otra rama las modificaciones y así podemos ver si nos interesa fusionar con nuestro trabajo hecho o no.
Una vez analizado que todo lo que esta en la rama origin/master esta correcto y lo queremos fusionar, nos situamos en la rama master de nuestro repositorio y hacemos un "git merge origin/master".

Conclusión:


Pueden parecer comandos iguales, pero tienen ciertos matices para diferenciar los comandos "git clone", "git pull" y "git fetch":
  1. git clone: Se bajará el repositorio remoto y borrará todo lo anterior guardado en dicho repositorio local.
  2. git pull: Se bajará los cambios realizados en el repositorio remoto y los fusionará directamente con nuestro repositorio.
  3. git fetch: Se bajará el proyecto del repositorio remoto y lo ubicará en una rama nueva que creará, nosotros podemos hacer un "git checkout" para ver los cambios y cuando estemos listos hacer un "git merge".
Con esto doy por finalizado este hilo, en el siguiente me gustaría hablar de los conflictos con el "git fetch" y el "git pull" y en este ejemplo hemos trabajado con dos directorios locales diferentes y solo un directorio remoto, pero podemos trabajar también con varios directorios locales y varios directorios remotos. Bueno un saludo, espero vuestras dudas.

Comentarios

Entradas populares