Tabla de contenido
Una vez más aquí. En esta ocasión vamos a por el volumen 5 de la serie de artículos sobre el sistema de gestión de código fuente descentralizado llamado git. En el último artículo lo dejamos en utilizar Merge o Rebase, ahora vamos a ver cómo empezar a trabajar con repositorio remotos alojados en GitHub.
GitHub
Este es el servicio de alojamiento para repositorios git más importante del mundo (o eso dicen). Aun que no hay que desdeñar otros servicios que se han ido consolidando a lo largo del tiempo como son GitLab o BitGucket.
GitHub nos va a permitir tener un repositorio remoto, lo cual nos va a resultar útil si necesitamos tener un repositorio como copia de seguridad o para realizar trabajos en grupo. Para poder disponer de este servicio, resulta imprescindible darse de alta, cosa que podemos hacer de manera sencilla a través del proceso de alta.
Creando un repositorio
Una vez que nos hemos dado de alta y logueado en el sistema, en la barra superior derecha veremos un icono con un +, que al hacer clic ahí nos ofrecerá opciones como las siguientes:
- Crear un nuevo repositorio de código.
- Importar desde otro, un repositorio existente.
- Crear un gist o fragmento de código suelto.
- Se puede crear una nueva organización, que permite agrupar desarrolladores y sus repositorios.
- Crear un proyecto, lo cual ofrece herramientas de gestión.

Para seguir con este conjunto de ejercicios, vamos a crear un repositorio que nos permitirá hacer las pruebas que vamos a llegar a cabo en las siguiente líneas.
Una vez seleccionada la opción crear un nuevo repositorio de código, veremos la siguiente pantalla. En ella basta con poner el nombre del proyecto. La descripción es opcional y podemos añadirla más tarde. Para este ejemplo el resto podemos dejarlo vacío.

Cuando pulsemos el botón «Create repository», GitHub nos va a mostrar información muy útil para terminar la configuración. Existen diferentes opciones, que no tengamos código para ese repositorio, que ya tengamos un repositorio local o remoto y queramos subirlo a GitHub. En cada caso, veremos una explicación.

Para este ejemplo vamos a subir nuestro código existente a GitHub, por lo que vamos a utilizar la segunda opción que nos muestra la pantalla.
Trabajando con el repositorio remoto
git remote
Lo primero que vamos a tener que indicarle a git es cual es nuestro repositorio remoto. Podremos tener más de uno, pero lo normal es tener un remoto y llamarlo «origin».
Si queremos saber si ya tenemos un remoto o no, solo tendremos que utilizar el comando:
git remote -v
Por el momento todavía no tenemos ningún repositorio añadido. Este se debe indicar con el comando add, el nombre del remoto (origin) y la URL que nos proporcionarán desde la página de GitHub.
Estas URL suelen ser ssh o https, pero como no tengo las claves ssh configuradas en mi equipo, voy a seguir adelante utilizando las https. Ahora bien, la URL que vamos a utilizar es la que GitHub nos indica al crear el repositorio. Si se te ha olvidado la URL, puedes volver al página de tu repositorio y hacer clic en el botón verde que dice «Code«. Se abrirá una ventanita en la que podremos copiar la URL del repositorio.

Cuando ya tengamos claro la URL del repositorio, vamos a dirigirnos a la terminal y a utilizar el siguiente comando para añadir el repositorio:

git remote add origin https://github.com/sapoclay/ejemplo.git
Una vez añadido, ahora si que podemos comprobar que se ha añadido el repositorio remoto. Esto lo haremos con el comando:

git remote -v
Si por el motivo que sea nos equivocamos en algo, podemos eliminarlo con:
git remote remove origin git remote -v
git push, subiendo cambios
Para esto, vamos a suponer que tenemos un repositorio local con todos los commits, ramas, etc … y que ya tenemos listo nuestro repositorio remoto en GitHub. Vamos a hacer un push, que va a subir el repositorio y los cambios que hagamos en ese sitio remoto:

git push origin master
Al hacer push necesitamos indicar a qué remoto se hace (por defecto se utiliza origin) y a qué rama remota, master en este caso. Aun que podremos hacer estas operaciones con cualquier rama. También necesitaremos el nombre de usuario y contraseña que utilizamos para crear el repositorio en GitHub.
git pull, descargando del repositorio
Este comando vendría siendo el contrario a git push. Con el vamos a descargar contenido del repositorio remoto al directorio en el que nos encontremos. Este comando nos va a permitir mantener actualizado nuestro repositorio local con respecto al remoto, que suele utilizarse como referencia o versión oficial para los desarrolladores.
Si utilizamos nuestro repositorio recién creado vacío, no hará gran cosa de momento. El código local está actualizado con respecto al remoto, por que es exactamente el mismo.

git pull origin master
git clone, clonando el repositorio remoto
Ahora vamos a experimentar un poco con diferentes usuarios. Vamos a clonar el repositorio remoto en otro directorio. Para hacerlo vamos a salir del directorio de nuestro repositorio local y a movernos a home.
Después vamos a clonar el repositorio utilizando la URL que utilizamos antes, la que obtuvimos en GitHub. Además indicaremos la carpeta de destino:

git clone https://github.com/sapoclay/ejemplo.git copia_ejemplo

Cuando termine la clonación, nos pasamos directorio para hacer algunos cambios en el archivo README.md.
Ahora ya se pueden guardar los cambios y subirlos al servidor. Al haber clonado el repositorio, ya no es necesario configurar el remote:
git commit -a -m "Cambio de README.md desde repositorio clonado"
Para subirlo tan solo tendremos que utilizar:

git push
Tras esto, ya podemos volver al directorio en el que empezamos. Una vez en el, haremos algunos cambios en el archivo README y en conflicto.php. Tras hacerlos, aplicamos los cambios:

git commit -a -m "Múltiples cambios"
Llegados a este punto, si hacemos push, va a haber problemas. El repositorio remoto ya tiene cambios que se han subido desde otro sitio, y nuestro repositorio local no está al día. Por este motivo no nos va a permitir hacer un push a master.
Para aplicar los cambios que hay en remoto tendremos que hacer un git pull, con lo que después podremos aplicar nuestros cambios. Un pull está haciendo un merge, y hay archivos en conflicto. En este momento podemos optar por:
Abortar la operación con:
git merge --abort
Si queremos seguir adelante, tendremos que resolver los conflictos y terminar con:
git add . git commit -m "Conflictos resueltos"
Ahora si que ya deberíamos poder hacer un push:
git push origin master
Para evitar los conflictos, lo mínimo que se puede hacer es que antes de hacer cualquier cambio, hacer siempre un git pull para tenerlo todo al día y crear una nueva rama y aplicar los cambios ahí.
Hasta aquí vamos a llegar con el volumen 5 de esta serie de artículos sobre git. En otro momento más y mejor, aun que no prometo nada.