Si eres un contruibuidor activo de algún proyecto open source te darás cuenta de que éste después de que algún pull request
es aceptado, éste no se sincroniza atomáticamente con la copia de tu proyecto, lamentablemente éste proceso debe realizarse de manera manual, pero no te preocupes en este blog te enseñaremos a hacerlo.
Nota: Un
repositorio
es un espacio en el que se almacenan los archivos de un proyecto. Engit
un repositorio está represantado con una URL.
El proceso se resume en 3 pasos:
- Registrar el respositorio original como fuente de datos.
- Obtener los cambios del repositorio original.
- Combinar ramas entre repositorios.
- Subir los cambios.
1. Registrar el respositorio original como fuente de datos.
Al realizar el clon
de algún proyecto, por default tendrémos registrado una fuente de origen
, esta fuente apuntará a la url del respositorio situado en nuestra cuenta. Podemos asegurarnos de ello ejecutando el comando:
git remote -v
Esto mostrará algo similar a lo siguiente:
origin URL_REPOSTORIO (fetch)
origin URL_REPOSTORIO (push)
En dónde la salida del comando se compone de 3 elementos:
-
NOMBRE_FUENTE
Es un nombre que nosotros le indicamos agit
para poder utilizar esta fuente de datos. -
URL_REPOSITORIO
Es la url en la cuál se encuentra guardada el repositorio. -
TIPO_ACCION
Determina que tipos de "movimiento" puede tener esa fuente. Solo existen 2 tipos de acción: descarga (fetch
) y subida (push
).
La manera de lograr sincronizar nuestro proyecto con el proyecto original, es agregar la url del repositorio como una fuente de datos adicional. Ésto se logra con la ayuda del comando:
git remote add NOMBRE_FUENTE URL_REPOSITORIO_ORIGINAL
Nota: El
NOMBRE_FUENTE
puede ser cualquier cosa, sin embargo, por convención suelen utilizarse las palabrasorigin
para hacer referencia a la URL de nuestro repositorio yupstream
para la url del repositorio original.
Al ejecutar esta línea agregamos una nueva fuente de datos a nuestro repositorio, podemos consultar los cambios ejecutando nuevamente:
git remote -v
Obteniendo algo similar a:
origin URL_REPOSITORIO (fetch)
origin URL_REPOSITORIO (push)
upstream URL_REPOSITORIO_ORIGINAL (fetch)
upstream URL_REPOSITORIO_ORIGINAL (push)
2. Obtener los cambios más reciente del repositorio original.
Nota, éste proceso se puede llevar a cabo en cualquier rama del proyecto, sin emabrgo, se recomienda realizrlo sobre la rama principal (usualmente
master
) para obtener los últimos cambios estables del proyecto.Si necesitas cambiar a la rama principal, utiliza el comando
git checkout master
Una vez que tenemos una fuente adicional de datos, podemos utilizar el NOMBRE_FUENTE
para obtener los cambios más recientes de cualquiera de nuestros repositorios, por defecto git
utilizará el repositorio de origen
, pero podemos cambiarlo al específicarlo como primer argumento del comando fetch:
git fetch NOMBRE_FUENTE
Esto descargará las referencias del repositorio original sobre NOMBRE_FUENTE/RAMA_ACTUAL
. Es decir, que los archivos aún no estarán actualizados en nuestro proyecto, para aplicar los cambios índicados en las referencias de NOMBRE_FUENTE/RAMA_ACTUAL
debemos combinar las ramas.
3. Combinar ramas entre repositorios.
Para combinar las ramas, basta con ejecutar un solo comando:
git merge NOMBRE_FUENTE/NOMNRE_RAMA
Nota: Este proceso no suele marcar ningún error, dado que los cambios que subiste ya fueron previamente aprobados. Pero en caso de tener algún problema, te recomiendo revisar si existen cambios locales en tu proyecto posterior a tu PR, en caso de haberlos deberías deshacerlos antes y/o crear un nuevo pull request con los cambios.
4. Subir los cambios.
Finalmente debemos subir todos los cambios a nuestro repositorio:
git push
Nota: si al hacer
push
marca conflictos, esto quiere decir que el proyecto original modificó la historia degit
, por ende, tendrás que forzar los cambios con:git push --force
Conclusión
Cómo se mencionó en un inicio, el proceso de sincronización de repositorios no es de manera automática, en realidad ésto tiene muchas ventajas cuando eres contribuidor ya que no tienes que preocupate por los cambios del repositorio hasta que logras terminar tus cambios y/o hasta que necesitas hacer más cambios sobre el proyecto.
Espero que esta guía te haya servido y si tienes algún comentario o duda, siente con libertad de expresarla en los comentarios.
Top comments (2)
Genial!,hay poco contenido en español sobre open-source,o por lo menos lo que yo pude encontrar por lo que se agradece tus aportes,Conoces alguna comunidad sobre Open-Source en español?
Gracias por tu comentario, Juan! No estoy seguro si hay de open source, pero puedes buscar la comunidad de tu lenguaje favorito más la el país de residencia, por ejemplo:
node Argentina
PHP Mexico
Go Colombia
Casi todos tienen un canal en Slack o in grupo en Facebook. En ellos publican sus proyectos y no dudo que te puedas involucrar.