Colaboração e incorporação de alterações no MQL5 Algo Forge
Criação de forks #
Um fork cria uma cópia própria do repositório de outro usuário na sua conta. Isso permite experimentar e fazer alterações com segurança, sem afetar o código-fonte original do autor do projeto.
No site do MQL5 Algo Forge, você pode visualizar projetos públicos de usuários do MetaTrader 5 de todo o mundo. Selecione o projeto desejado e clique em "Fork" no canto superior direito.

Ao criar um fork, você pode alterar o nome, selecionar as branches que serão copiadas e editar a descrição. Em seguida, clique em "Criar fork".

O repositório criado aparecerá na sua conta do MQL5 Algo Forge. No MetaEditor, atualize o conteúdo da pasta Shared Projects. A cópia criada aparecerá nela. Para começar a editar localmente os arquivos do projeto, é necessário clonar o repositório.
Clonagem de projetos #
A clonagem baixa o repositório do MQL5 Algo Forge para o computador local. Com isso, é criada uma cópia de trabalho local na qual você pode editar arquivos e criar commits e, depois, enviar as alterações ao repositório remoto.
Só é possível clonar repositórios para os quais você tenha permissão de gravação no MQL5 Algo Forge. Se quiser editar localmente os arquivos de um projeto público, primeiro crie um forke depois clone sua cópia.
No MetaEditor, expanda a seção Shared Projects, clique com o botão direito do mouse no projeto e selecione o comando "Clonar repositório Git".

Criação de solicitações de merge #
Pull request (solicitação de merge) é uma proposta para revisar e incorporar à branch de destino as alterações prontas de uma branch separada. A solicitação também funciona como espaço de discussão: os participantes do projeto podem revisar o código, deixar comentários e testar as alterações antes de aceitá-las.
Os cenários mais comuns são:
- Se você trabalhou em uma branch separada do seu próprio projeto, crie uma solicitação de merge (pull request) para incorporar as alterações à branch principal.
- Se você trabalhou em uma branch de um fork, crie um pull request para incorporar as alterações à branch principal do projeto original. Depois disso, um dos mantenedores do projeto deverá revisar e aceitar a solicitação.
Abra a página do repositório que contém as alterações desejadas, selecione "Merges" e clique em "Criar solicitação".

Na página "Criar solicitação", selecione a branch que receberá as alterações e a branch de origem. As diferenças entre as branches selecionadas serão realçadas. Clique em "Criar solicitação" para continuar.

Na página seguinte, informe o título e a descrição da solicitação e, se necessário, acrescente informações adicionais. Você também pode adicionar rótulos e milestones, atribuir um responsável e permitir que os mantenedores do projeto editem a solicitação.

Clique em "Criar solicitação de merge" para concluir a operação.
Merge das alterações #
O merge é a etapa final em que as alterações de uma branch separada são incorporadas à branch de destino por meio de uma solicitação de merge. Essa operação exige permissão de gravação, portanto somente os mantenedores do projeto que tenham essa permissão podem aceitar a solicitação e executar o merge.
No site do MQL5 Algo Forge, abra a solicitação de merge que deseja concluir. Nas guias "Commits" e "Arquivos alterados", você pode revisar os commits e as alterações realizadas e, em seguida, retornar à guia "Discussão".

Se estiver tudo pronto, clique em "Criar commit de merge" ou escolha outra opção de merge na lista.
As opções disponíveis são:
- Criar commit de merge: combina as branches criando um commit de merge separado, que conecta os dois históricos de alterações. Dessa forma, o gráfico do histórico preserva as informações sobre quando a branch foi criada e quando suas alterações foram incorporadas.
- Executar rebase e fast-forward: primeiro reposiciona os commits da sua branch no final da branch de destino e, em seguida, avança o ponteiro da branch de destino. O resultado é um histórico linear, sem commits adicionais de merge.
- Executar rebase e criar commit de merge: primeiro reposiciona os commits da sua branch no final da branch de destino e, em seguida, cria um commit de merge separado. O histórico permanece linear, mas o merge fica registrado explicitamente.
- Criar commit squash: combina todos os commits da sua branch em um único commit antes de adicionar as alterações à branch de destino. Isso é útil quando você deseja ocultar os vários commits intermediários criados durante o desenvolvimento.
- Somente fast-forward: executa o merge apenas se a branch de destino não tiver recebido novas alterações desde o início do seu trabalho. Se a branch de destino tiver sido modificada, o merge não será realizado e será necessário sincronizar primeiro as branches manualmente.
Resolução de conflitos #
Para resolver conflitos, é necessário usar um cliente Git externo ou executar comandos Git no terminal.
Conflitos ao obter e enviar alterações no MetaEditor
Ao enviar alterações locais para o repositório remoto ou obter alterações dele, o merge automático pode falhar devido a um conflito. Isso geralmente ocorre quando já foram enviadas ao repositório remoto alterações que entram em conflito com as suas:
- Conflito de conteúdo (edit-edit): outro desenvolvedor que trabalha na mesma branch alterou a mesma linha de código que você.
- Conflito estrutural (delete-modify): outro desenvolvedor excluiu ou renomeou um arquivo que você modificou.
- Conflito de arquivos binários: outro desenvolvedor modificou o mesmo arquivo binário, como uma imagem ou um PDF. O Git não consegue comparar arquivos binários linha por linha e, por isso, não pode combinar automaticamente essas alterações.
- Conflito "pasta-arquivo": em uma branch, um arquivo foi excluído e uma pasta com o mesmo nome foi criada em seu lugar; na outra branch, esse arquivo continuou sendo usado e modificado.
Quando ocorre um conflito de conteúdo (edit-edit) ao obter alterações no MetaEditor ou em outra ferramenta Git, o Git adiciona automaticamente ao arquivo marcadores especiais de conflito: <<<<<<<, ======= e >>>>>>>.
Como resolver um conflito simples em um cliente Git externo:
- Localize o arquivo com conflito: abra o cliente Git e identifique quais arquivos apresentam conflitos.
- Escolha como resolver o conflito:
- Se o cliente Git oferecer suporte a merge visual, selecione a versão desejada, mantenha as duas alterações ou combine-as manualmente usando a ferramenta de merge. Depois de resolver o conflito, passe para a próxima etapa.
- Se for necessário combinar elementos das duas versões ou editar o arquivo manualmente, abra-o em um editor de texto ou IDE. Localize os marcadores de conflito ao redor das linhas afetadas e passe para a próxima etapa.
- Edite e salve o arquivo: ajuste manualmente o trecho em conflito para que o arquivo contenha a versão final desejada. Remova os marcadores de conflito e o código desnecessário e, em seguida, salve o arquivo.
- Adicione as alterações e crie um commit: o cliente Git deverá detectar que o arquivo foi modificado. Adicione o arquivo ao índice, ou marque o conflito como resolvido, e depois crie um commit para concluir o merge.
- Envie as alterações ao repositório remoto: envie para a branch remota o commit criado com o resultado da resolução do conflito.
Conflitos durante o merge no site do MQL5 Algo Forge
Também pode ocorrer um conflito do Git ao tentar fazer merge de duas branches diretamente no site do MQL5 Algo Forge. Nesse caso, você também precisará usar um cliente Git externo ou a linha de comando no computador:
- Atualize o repositório local: abra o cliente Git, obtenha as alterações mais recentes do repositório remoto e alterne para a branch de destino na qual você pretende incorporar as alterações.
- Reproduza o conflito localmente: execute no cliente Git o mesmo merge. Isso deverá gerar o mesmo conflito que impediu a conclusão do merge no site do MQL5 Algo Forge.
- Resolva o conflito: abra os arquivos afetados em um editor de texto ou IDE. Localize os marcadores de conflito, combine manualmente as alterações ou escolha a versão desejada, remova todos os marcadores e salve os arquivos.
- Adicione as alterações e crie um commit: adicione os arquivos corrigidos ao índice usando o cliente Git para marcar os conflitos como resolvidos e crie um commit para concluir o merge.
- Envie as alterações ao repositório remoto: envie para a branch remota o commit criado com o resultado da resolução do conflito. Depois disso, o site do MQL5 Algo Forge detectará automaticamente que o conflito foi resolvido e você poderá concluir o merge.