Supongamos que hemos creado un fork de un proyecto en GitHub y deseamos mantenerlo actualizado con los últimos cambios (commits) que va realizando su creador, autor o equipo de desarrollo original (llamado comúnmente upstream). En este breve artículo voy a explicar cómo hacerlo utilizando git desde línea de comandos en GNU/Linux.



Para mostrar el proceso completo, primero veamos la creación del fork. Accedemos a la página principal en GitHub del proyecto que deseamos "bifurcar" (crear un desarrollo derivado) y accedemos al enlace "Fork":

Luego, desde la página de nuestro fork, copiar la URL para clonar una copia de trabajo local. Para tal fin, se debe utilizar el enlace/botón "Clone or download":

Ahora podemos clonar una copia de trabajo para desarrollar el proyecto desde nuestro sistema local, utilizando el comando git clone:

root@linuxito:~/github# git clone https://github.com/linuxitux/sysstatgraph.git
Cloning into 'sysstatgraph'...
remote: Counting objects: 24, done.
remote: Total 24 (delta 0), reused 0 (delta 0), pack-reused 24
Unpacking objects: 100% (24/24), done.

Cabe recordar que los repositorios "bare" tienen la extensión .git por convención (para indicar que se trata justamente de un repositorio "bare").

Al clonar, se crea automáticamente un directorio con todos los archivos del proyecto. El nombre del directorio coincide con el nombre del repositorio, en este caso "sysstatgraph":

root@linuxito:~/github# cd sysstatgraph/

Una copia de trabajo local se puede conectar y sincronizar (track) contra uno o varios repositorios remotos. Luego de clonar una copia fresca, por defecto está conectada al repositorio desde donde fue clonada:

root@linuxito:~/github/sysstatgraph# git remote -v
origin  https://github.com/linuxitux/sysstatgraph.git (fetch)
origin  https://github.com/linuxitux/sysstatgraph.git (push)

Cada repositorio remoto tiene un nombre asociado. El repositorio origen, desde donde fue clonada una copia de trabajo, por defecto se denomina "origin".

Habiendo clonado desde nuestro repositorio, podemos hacer commits (publicar cambios) en el fork.

Ahora bien, a fin de poder actualizar los cambios realizados por el autor del proyecto original en nuestro fork, es necesario agregar el repositorio remoto (conectar) en nuestra copia de trabajo local. Desde la página principal del proyecto que hemos "forkeado", es posible copiar la URL del repositorio para conectarlo con nuestra copia de trabajo local (agregar un nuevo repositorio remoto) de la misma forma hemos hecho al clonarlo. Luego se utiliza el comando git remote para agregar el nuevo repositorio remoto:

root@linuxito:~/github/sysstatgraph# git remote add upstream https://github.com/magnetikonline/sysstatgraph.git

Por convención se utiliza el nombre "upstream" para denominar al repositorio correspondiente al proyecto que hemos forkeado:

root@linuxito:~/github/sysstatgraph# git remote -v
origin  https://github.com/linuxitux/sysstatgraph.git (fetch)
origin  https://github.com/linuxitux/sysstatgraph.git (push)
upstream        https://github.com/magnetikonline/sysstatgraph.git (fetch)
upstream        https://github.com/magnetikonline/sysstatgraph.git (push)

De esta forma "origin" corresponde con el repositorio perteneciente a nuestro fork, y "upstream" corresponde con el repositorio perteneciente al proyecto original.

Finalmente, para traer las últimas actualizaciones desde "upstream" y así mantener nuestro fork actualizado, ejecutar git pull sobre el repositorio "upstream" y la rama "master" (rama por defecto, o especificar otra rama de desarrollo diferente):

git pull upstream master

Luego es posible subir estos cambios a nuestro fork ejecutando un push:

git push origin master

Para más información, revisar las siguientes páginas de manual:

man git-clone
man git-remote
man git-pull
man git-commit
man git-push

Referencias


Tal vez pueda interesarte


Compartí este artículo