Archivo de la etiqueta: pull

Tutorial de Git – Aprende Git y GitHub/GitLab de manera fácil, rápida y sencilla – Parte 5

En el siguiente enlace tienes el índice para acceder al resto de entradas de este tutorial:

Hola a todos:

El el post anterior aprendimos lo que era un repositorio remoto y como crear una cuenta de GitHub y alojar nuestro proyecto en GitHub, hoy vamos a seguir aprendiendo un poco más sobre GitHub.

Clonar un repositorio: git clone

Si queremos descargar el código desde github, por ejemplo si borramos nuestro proyecto y queremos volver a descargarlo o queremos instalar nuestro proyecto en otra maquina solo tenemos que copiar la url de nuestro proyecto en github, para ello pulsamos en clone or download y copiamos la url.

Por ejemplo vamos a eliminar la carpeta proyectoGit1 de nuestro proyecto en nuestro ordenador.

Supongamos que la hemos borrado por error y hemos perdido todo nuestro proyecto.

Bien al tener alojado nuestro repositorio en GitHub podemos recuperarlo de la siguiente manera:

Primero vamos a nuestro repositorio en GitHub y pulsamos en el botón “Clone or download” y copiamos la url de nuestro repositorio:

Luego desde el bash navegamos hasta el lugar donde queremos clonar el proyecto y escribimos git clone y la url de nuestro proyecto, por ejemplo:

git clone https://github.com/Reviblog/holamundo.git

Ahora tendremos una copia exacta de nuestro repositorio en GitHub.

Como GitHub es una plataforma donde hay miles de proyectos de código abierto podemos clonar cualquier repositorio público, puedes descubrir proyectos muy interesantes en GitHub y clonarlos para estudiar su código y/o adaptarlo a tus necesidades.

Actualizar los cambios del repositorio remoto a nuestro repositorio local – fetch y pull

Imaginemos que se han realizado cambios en el repositorio remoto, por ejemplo que otro usuario ha añadido cambios y queremos actualizar estos cambios en nuestro repositorio local.

Para verlo con un ejemplo vamos a añadir un archivo desde GitHub a nuestro repositorio:

Para ello pulsamos en el botón Create new file:

Y editamos un archivo al que le podemos llamar por ejemplo productos.html y si queremos podemos poner unas líneas de código html dentro:

Para que la creación del nuevo archivo se haga efectiva tenemos que hacer un commit, debajo del editor veremos que hay un formulario para hacer commit, escribimos una descripción para el commit y pulsamos el botón Commit new file.

Ahora tenemos el archivo productos.html en el repositorio remoto de GitHub, sin embargo en nuestro repositorio local no lo tenemos, vamos a ver como actualizar nuestro repositorio local para que los cambios que se han producido en el repositorio remoto se sincronicen.

fetch

Siempre en un repositorio tienes una rama oculta, que puedes ver al usar git branch -a.

Esa rama oculta es origin/master.

Al usar git fetch origin, bajamos los cambios del repositorio remoto a la rama origin/master:

git fetch origin

Ahora ya tienes los cambios en origin/master, aparente no ha pasado nada, seguimos sin tener el archivo productos.html, para que los cambios se hagan efectivos tenemos que pasarlos a la rama master, para eso usamos el siguiente comando:

git merge origin/master

Ahora ya tenemos el archivo productos.html en nuestro repositorio local.

pull

Al usar el comando git pull estamos combinando git fetch + git merge.

Vamos a seguir los mismos pasos que dimos para crear el archivo productos.html y vamos a crear en GitHub un archivo que se llame por ejemplo vendedores.html.

Una vez que lo tengas creado y hayas hecho el commit vamos a actualizar este cambio del repositorio remoto a nuestro repositorio local, pero esta vez en lugar de utilizar el comando git fetch vamos a utilizar el siguiente comando:

git pull origin master

Ahora ya tenemos el archivo vendedores.html que acabamos de crear en GitHub en nuestro repositorio local.

Con git pull  nos ahorramos el usar un comando más, pero no conviene utilizar git pull si no estamos seguros de que cambios se pueda traer del repositorio remoto.

Fork

GitHub nos permite hacer una copia exacta de un repositorio para poder hacer modificaciones del repositorio original sin afectar a este, a esto se le llama fork.

Puedes encontrar un repositorio público de un proyecto que te resulte interesante y realizar cambios en este si afectar al original.

Cuando accedes a la página principal de GitHub te da la opción de explorar repositorios públicos:

Cuando entramos en un repositorio en la parte de arriba a la derecha tenemos un botón “Fork” donde se indica además el número de forks que se han realizado de este repositorio.

Al pulsar en el botón automáticamente se creará una copia exacta del repositorio en tu cuenta de github.

Los cambios que realicemos en este repositorio no van a modificar el repositorio original sino nuestra copia.

Una vez que hemos hecho el fork del repositorio para traerlo a nuestro ordenador solo tenemos que crear una carpeta, situarnos dentro de ella desde el terminal y utilizar el comando git clone ruta_del_repositorio.

Por ejemplo: 

git clone https://github.com/Reviblog/holamundo.git

pull request

Cuando varias personas colaboran en un mismo proyecto es común que cada colaborador haga un fork del proyecto original para poder realizar cambios sin afectar al proyecto original, una vez hechos los cambios el colaborador debe solicitar al administrador del proyecto original para que integre esos cambios en la rama original.

Vamos a ver con un ejemplo práctico cómo funciona:

Imaginemos que hemos hecho un fork de un repositorio,  para verlo con más claridad vamos a simular que somos otro usuario, para ello podemos hacer la prueba creando otra cuenta de GitHub con otra cuenta de correo que tengamos y haciendo un fork del repositorio holamundo  que tenemos en nuestra primera cuenta.

Para poder estar logeado con las dos cuentas puedes utilizar dos navegadores (Firefox y Chrome… o los que tengas instalados), si solo tienes un navegador deberás cerrar sesión antes de iniciar con la otra cuenta.

Para hacer un fork iniciamos sesión en GitHub con la segunda cuenta que hemos creado y en el buscador de la cabecera ponemos el nombre de nuestro usuario de la primera cuenta y  el nombre del repositorio, después pulsamos el botón “All GitHub” para que busque en todo GitHub.

Una vez localizado nuestro repositorio entramos en él y hacemos un fork desde nuestra segunda cuenta de GitHub pulsando en el botón fork:

Tras unos segundos tendremos una copia del proyecto holamundo en nuestra segunda cuenta de GitHub.

Entramos en la copia del proyecto  que se ha creado en nuestra segunda cuenta de usuario y copiamos la url del proyecto para hacer un clone:

Creamos una carpeta que podemos llamar prueba_pull_request y situándonos en ella desde la consola hacemos un clone:

git clone https://github.com/edurevilla/holamundo.git

Esto habrá creado una carpeta holamundo dentro de la carpeta con el contenido del proyecto.

Desde consola entramos en la carpeta holamundo que se acaba de crear:

cd holamundo

Ahora vamos a editar el archivo productos.html y añadimos algunas lineas de código:

<html>
  <head></head>
  <body>
<h1>Listado de productos</h1>
    <ul>
	<li>Producto 1</li>
	<li>Producto 2</li>
	<li>Producto 3</li>
	<li>Producto 4</li>
    </ul>
  </body>
</html>

Una vez modificado el archivo añadimos los cambios al stage:

git add .

Y hacemos un commit:

git commit -m "Hemos modificado productos.html"

Por último subimos los cambios al repositorio de github:

git push -u origin master

Nos pedirá que introduzcamos el usuario y contraseña de nuestra cuenta de GitHub, en este caso el de la segunda cuenta que hemos creado de prueba.

Bien, ahora tenemos dos versiones diferentes del proyecto holamundo, la original y la del fork que hemos realizado con nuestra segunda cuenta de usuario.

Queremos que los cambios que hemos realizado en nuestro fork del proyecto se integren en el repositorio original, para ello tenemos que hacer una petición “pull request“.

Para ello tenemos que seleccionar el botón “New pull request“:

A continuación se mostrará un resumen de los cambios con respecto a la rama original, una vez revisados los cambios pulsamos el botón “Create pull request“.

Podemos poner un comentario para explicar los cambios que hemos realizado:

Por último pulsamos en el Botón “Create pull request” para mandar la solicitud.

Si ahora accedemos a nuestra primera cuenta de GitHub donde tenemos el proyecto holamundo original podemos ver en la pestaña Pull requests que tenemos una solicitud:

Seleccionamos la pestaña Pull request y vemos que tenemos una solicitud que pone “Hemos modificado productos.html”, si seleccionamos la solicitud nos da la opción de  integrar los cambios pulsando el botón “Merge pull request“, también podemos dejar un comentario, por ejemplo si consideramos que algo está mal y queremos solicitar un cambio en el código antes de hacer el merge.

En este caso podemos poner que todo está correcto y pulsar el botón “Comment“, y después pulsar el botón “Merge pull request” para incorporar los cambios al repositorio original.

Nos pide que confirmemos el merge así que pulsamos el botón “Confirm merge” y ya tenemos los cambios hechos por el segundo colaborador en el repositorio original.

Como puedes ver se puede mantener una conversación entre los colaboradores del proyecto para comentar los cambios que se hacen.

El administrador del proyecto original es el que decidirá qué cambios se incorporan al repositorio.

Si revisamos ahora el contenido del archivo productos.html  en el repositorio original de GitHub veremos que ahora ya contiene los cambios que le hemos añadido desde el fork.

GitHub es una herramienta muy potente para el desarrollo colaborativo de código abierto. Tiene muchas funciones avanzadas que se escapan al propósito de este tutorial de iniciación, pero con lo que has aprendido ya puedes empezar a alojar tus proyectos en GitHub y/o colaborar en proyectos existentes.

Eso es todo por hoy, en el próximo post veremos uno de los mayores competidores de GitHub, me estoy refiriendo como no a GitLab.

En el siguiente enlace tienes el índice para acceder al resto de entradas de este tutorial: