Colaboración y fusión de cambios en MQL5 Algo Forge
Creación de bifurcaciones #
Las bifurcaciones crean su propia copia del repositorio de otra persona bajo su cuenta. Esto le permite experimentar e introducir cambios de forma segura sin afectar al código fuente del autor del proyecto.
En el sitio web de MQL5 Algo Forge, podrá ver proyectos públicos de usuarios de MetaTrader 5 de todo el mundo. Seleccione el proyecto que le interese y haga clic en "Bifurcación" en la esquina superior derecha.

Al crear una bifurcación, podrá cambiar el nombre, seleccionar las ramas que desee copiar y editar la descripción. Luego haga clic en «Crear bifurcación» (Fork repository).

El repositorio creado aparecerá en su cuenta de MQL5 Algo Forge. En MetaEditor, actualice el contenido de la carpeta Shared Projects y aparecerá una copia creada en ella. Para empezar a trabajar con archivos de proyecto localmente, necesita: clonar un repositorio.
Clonación de proyectos #
La clonación descarga el repositorio de MQL5 Algo Forge a su computadora local. Esto crea una copia de trabajo local en la que puede editar archivos y crear commits, y luego enviar sus cambios al repositorio remoto.
En MQL5 Algo Forge, solo puede clonar repositorios a los que tenga acceso de escritura. Si desea trabajar localmente con archivos de proyectos públicos, primero cree una bifurcación de estosy luego clone su copia.
En MetaEditor, expanda la sección Shared Projects, haga clic con el botón derecho en el proyecto y seleccione «Clonar repositorio Git».

Creación de solicitudes de fusión #
Una solicitud de extracción es una propuesta para revisar y fusionar los cambios completados de una rama separada en una rama de destino. La solicitud de extracción también sirve como foro de debate: los participantes del proyecto pueden revisar el código, dejar comentarios y probar los cambios antes de que sean aceptados.
Los escenarios más comunes son:
- Si ha estado trabajando en una rama separada de su propio proyecto, cree una solicitud de extracción para fusionar sus cambios con la rama principal.
- Si estaba trabajando en una rama bifurcada, cree una solicitud de extracción para fusionar sus cambios con la rama principal del proyecto original. Posteriormente, uno de los responsables del proyecto deberá revisar y aceptar la solicitud.
Abra la página del repositorio con los cambios que desea realizar, seleccione «Fusiones» y, a continuación, haga clic en «Crear solicitud».

En la página «Crear solicitud», seleccione la rama a la que deben ir los cambios y la rama desde la que deben transferirse. Se resaltarán las diferencias entre las ramas seleccionadas. Haga clic en «Crear solicitud» para continuar.

En la página siguiente, proporcione un título y una descripción para su solicitud, y agregue información adicional si es necesario. Puede añadir etiquetas y etapas, asignar una persona responsable y permitir que los responsables del proyecto editen la solicitud.

Haga clic en «Crear solicitud de fusión» para completar la acción.
Fusión de cambios #
La fusión es el paso final en el que los cambios de una rama separada se combinan en la rama de destino mediante una solicitud de extracción (pull request). Esta operación requiere permisos de escritura, por lo que solo los responsables del proyecto con permisos de escritura podrán aceptar y fusionar la solicitud.
En el sitio web de MQL5 Algo Forge, abra la solicitud de fusión que desea combinar. En las pestañas «Commits» y «Archivos modificados», puede consultar sus commits y cambios, y luego volver a la pestaña «Discusión».

Cuando esté listo, haga clic en «Crear commit de fusión» o seleccione otras opciones de fusión de la lista.
Opciones de fusión disponibles:
- Crear un commit de fusión: combina las ramas, creando un único commit de fusión que vincula ambos historiales de cambios. En el gráfico del historial, además, se almacena información sobre cuándo se ha creado la rama y cuándo se han fusionado sus cambios.
- Ejecutar rebase y fast-forward: primero desplace los commits de su rama al final de la rama de destino y, después, mueva el puntero de la rama de destino hacia adelante. El resultado será un historial lineal sin commits de fusión adicionales.
- Ejecutar rebase y crear un commit de fusión: primero desplace los commits de su rama al final de la rama de destino y, después, cree un commit de fusión independiente. El historial sigue siendo lineal, pero deja constancia clara del hecho de la fusión.
- Crear un commit de fusión: combine todos los commits de su rama en un solo commit antes de añadir los cambios a la rama de destino. Esto resulta útil si desea ocultar numerosos commits intermedios creados durante su trabajo.
- Solo fast-forward: realice una fusión únicamente si la rama de destino no ha recibido ningún cambio nuevo desde que se inició el trabajo. Si la rama de destino ha cambiado, la fusión fallará y deberá sincronizar las ramas manualmente primero.
Resolución de conflictos #
Para resolver conflictos es necesario utilizar un cliente Git externo o ejecutar comandos de Git en el terminal.
Conflictos al recibir y enviar cambios en el MetaEditor
Al enviar o recibir cambios locales desde o hacia un repositorio remoto, la fusión automática puede fallar debido a un conflicto. Esto suele ocurrir cuando ya se han enviado cambios al repositorio remoto que entran en conflicto con los suyos:
- Conflicto de contenido (edit—edit): otro desarrollador que trabaja en la misma rama ha modificado la misma línea de código que usted.
- Conflicto estructural (delete—modify): otro desarrollador ha eliminado o renombrado un archivo que usted modificó.
- Conflicto de archivos binarios: otro desarrollador ha modificado el mismo archivo binario, como una imagen o un PDF. Git no puede comparar archivos binarios línea por línea, por lo que no puede fusionar automáticamente dichos cambios.
- Conflicto «carpeta—archivo»: en una rama, se ha eliminado un archivo y se ha creado una carpeta con el mismo nombre en su lugar, mientras que en otra rama, este archivo se ha seguido utilizando y modificando.
Cuando se produce un conflicto de contenido (edit—edit) al recuperar cambios en el MetaEditor u otra herramienta de Git, Git agrega automáticamente marcadores de conflicto especiales al archivo: <<<<<<<, ======= y >>>>>>>.
Cómo resolver un conflicto simple en un cliente Git externo:
- Encuentre el archivo conflictivo: abra su cliente Git y determine qué archivos contienen conflictos.
- Seleccione un método para resolver el conflicto:
- Si su cliente Git admite la fusión visual, seleccione la versión deseada y conserve ambos cambios, o bien, fúndalos manualmente utilizando la herramienta de fusión. Una vez resuelto el conflicto, proceda al siguiente paso.
- Si necesita combinar elementos de ambas versiones o desea editar el archivo manualmente, ábralo en un editor de texto o en un entorno de desarrollo integrado (IDE). Localice los marcadores de conflicto alrededor de las líneas en conflicto y proceda al siguiente paso.
- Edite y guarde el archivo; modifique manualmente el fragmento conflictivo para que la versión final deseada permanezca en el archivo. Elimine los marcadores de conflicto y el código innecesario, y luego guarde el archivo.
- Agregue los cambios y cree un commit; el cliente Git debería detectar que el archivo ha cambiado. Añada el archivo al índice (o marque el conflicto como resuelto) y luego cree un commit para completar la fusión.
- Envíe cambios al repositorio remoto: envíe el commit creado con el resultado de la resolución de conflictos a la rama remota.
Conflictos de fusión en el sitio web de MQL5 Algo Forge
También puede producirse un conflicto de Git al intentar fusionar dos ramas directamente en el sitio web de MQL5 Algo Forge. En este caso, también será necesario un cliente Git externo o la línea de comandos en su computadora:
- Actualice su repositorio local: abra su cliente Git, obtenga los últimos cambios del repositorio remoto y cambie a la rama de destino a la que intenta enviar los cambios.
- Reproduzca el conflicto localmente ejecutando la misma fusión en su cliente Git. Esto debería generar el mismo conflicto que ha provocado que la fusión fallara en el sitio web de MQL5 Algo Forge.
- Resuelva el conflicto: abra los archivos afectados en un editor de texto o en un entorno de desarrollo integrado (IDE). Localice los marcadores de conflicto, fusione manualmente los cambios o seleccione la versión deseada, elimine por completo los marcadores y guarde los archivos.
- Agregue cambios y cree un commit: agregue los archivos corregidos a su cliente Git para marcar los conflictos como resueltos y cree un commit para completar la fusión.
- Envíe cambios al repositorio remoto: envíe el commit creado con el resultado de la resolución de los conflictos a la rama remota. Después de esto, el sitio web de MQL5 Algo Forge detectará automáticamente que el conflicto se ha resuelto y podrá realizar la fusión.