Совместная работа и объединение изменений в MQL5 Algo Forge
Создание форков #
Форк создает вашу собственную копию чужого репозитория под вашей учетной записью. Это позволяет безопасно экспериментировать и вносить изменения, не затрагивая исходный код автора проекта.
На сайте MQL5 Algo Forge можно просматривать публичные проекты пользователей MetaTrader 5 со всего мира. Выберите интересующий проект и нажмите «Ответвление» (Fork) в правом верхнем углу.

При создании форка можно изменить название, выбрать ветки для копирования и отредактировать описание. Затем нажмите «Создать ответвление» (Fork repository).

Созданный репозиторий появится в вашем аккаунте MQL5 Algo Forge. В MetaEditor обновите содержимое папки Shared Projects — а ней появится созданная копию. Чтобы начать работать с файлами проекта локально, необходимо клонировать репозиторий.
Клонирование проектов #
Клонирование загружает репозиторий из MQL5 Algo Forge на локальный компьютер. В результате создается локальная рабочая копия, в которой можно редактировать файлы и создавать коммиты, а затем отправлять изменения в удаленный репозиторий.
Клонировать можно только те репозитории, к которым у вас есть права на запись в MQL5 Algo Forge. Если вы хотите работать локально с файлами публичного проекта, сначала создайте его форк, а затем клонируйте свою копию.
В MetaEditor раскройте раздел Shared Projects, щелкните правой кнопкой мыши на проекте и выберите команду «Клонировать репозиторий Git».

Создание запросов на слияние #
Pull request (запрос на слияние) — это предложение проверить и объединить готовые изменения из отдельной ветки с целевой веткой. Запрос также служит площадкой для обсуждения: участники проекта могут просмотреть код, оставить комментарии и протестировать изменения перед их принятием.
Наиболее распространенные сценарии:
- Если вы работали в отдельной ветке собственного проекта, создайте запрос на слияние (pull request), чтобы объединить изменения с основной веткой.
- Если вы работали в какой-либо ветке форка, создайте pull request, чтобы объединить изменения с основной веткой исходного проекта. После этого один из сопровождающих проекта должен проверить и принять запрос.
Откройте страницу репозитория с нужными изменениями, выберите «Слияния», а затем нажмите «Создать запрос».

На странице «Создать запрос» выберите ветку, в которую должны попасть изменения, и ветку, из которой нужно их перенести. Различия между выбранными ветками будут подсвечены. Нажмите «Создать запрос», чтобы продолжить.

На следующей странице укажите название и описание запроса, а также при необходимости добавьте дополнительную информацию. Можно добавить метки и этапы, назначить ответственного и разрешить сопровождающим проекта редактировать запрос.

Нажмите «Создать запрос на слияние», чтобы завершить действие.
Слияние изменений #
Слияние — это завершающий этап, на котором изменения из отдельной ветки объединяются с целевой веткой через запрос на слияние. Для выполнения этой операции необходимы права на запись, поэтому принять и объединить запрос могут только сопровождающие проекта с такими правами.
На сайте MQL5 Algo Forge откройте запрос на слияние, который хотите объединить. На вкладках «Коммиты» и «Измененные файлы» можно проверить коммиты и внесенные изменения, после чего вернуться на вкладку «Обсуждение».

Если все готово, нажмите «Создать коммит слияния» или выберите другие варианты слияния из списка.
Доступные варианты слияния:
- Создать коммит слияния — объединяет ветки, создавая отдельный коммит слияния (merge), который связывает обе истории изменений. В графе истории при этом сохраняется информация о том, когда ветка была создана и когда ее изменения были объединены.
- Выполнить rebase и fast-forward — сначала переносит коммиты вашей ветки в конец целевой ветки, а затем перемещает указатель целевой ветки вперед. В результате получается линейная история без дополнительных коммитов на слияние.
- Выполнить rebase и создать коммит слияния — сначала переносит коммиты вашей ветки в конец целевой ветки, а затем создает отдельный коммит на слияние. История остается линейной, при этом в ней явно фиксируется факт слияния.
- Создать объединяющий коммит — объединяет все коммиты вашей ветки в один коммит перед добавлением изменений в целевую ветку. Это удобно, если нужно скрыть многочисленные промежуточные коммиты, созданные в процессе работы.
- Только fast-forward — выполняет слияние только в том случае, если целевая ветка не получила новых изменений с момента начала вашей работы. Если целевая ветка была изменена, слияние не выполняется, и сначала необходимо синхронизировать ветки вручную.
Разрешение конфликтов #
Для разрешения конфликтов необходимо использовать внешний Git-клиент или выполнять команды Git в терминале.
Конфликты при получении и отправке изменений в MetaEditor
При отправке локальных изменений в удаленный репозиторий или получении изменений из него автоматическое слияние может завершиться ошибкой из-за конфликта. Обычно это происходит, когда в удаленный репозиторий уже были отправлены изменения, которые конкурируют с вашими:
- Конфликт содержимого (edit–edit) — другой разработчик, работающий в той же ветке, изменил ту же строку кода, что и вы.
- Структурный конфликт (delete–modify) — другой разработчик удалил или переименовал файл, который вы изменили.
- Конфликт бинарных файлов — другой разработчик изменил тот же бинарный файл, например изображение или PDF. Git не может сравнивать бинарные файлы построчно, поэтому не способен автоматически объединить такие изменения.
- Конфликт «папка–файл» — в одной ветке файл был удален и вместо него создана папка с таким же именем, а в другой ветке этот файл продолжили использовать и изменять.
При возникновении конфликта содержимого (edit–edit) во время получения изменений в MetaEditor или другом Git-инструменте Git автоматически добавляет в файл специальные маркеры конфликта: <<<<<<<, ======= и >>>>>>>.
Как разрешить простой конфликт во внешнем Git-клиенте:
- Найдите конфликтующий файл — откройте Git-клиент и определите, какие файлы содержат конфликты.
- Выберите способ разрешения конфликта:
- Если Git-клиент поддерживает визуальное слияние, выберите нужную версию, оставьте оба изменения или объедините их вручную с помощью инструмента слияния. После разрешения конфликта перейдите к следующему шагу.
- Если нужно объединить элементы обеих версий или вы хотите отредактировать файл вручную, откройте его в текстовом редакторе или IDE. Найдите маркеры конфликта вокруг конфликтующих строк и перейдите к следующему шагу.
- Отредактируйте и сохраните файл — вручную измените конфликтующий фрагмент так, чтобы в файле осталась нужная итоговая версия. Удалите маркеры конфликта и ненужный код, затем сохраните файл.
- Добавьте изменения и создайте коммит — Git-клиент должен определить, что файл изменен. Добавьте файл в индекс (или отметьте конфликт как разрешенный), а затем создайте коммит, чтобы завершить слияние.
- Отправьте изменения в удаленный репозиторий — отправьте созданный коммит с результатом разрешения конфликта в удаленную ветку.
Конфликты при слиянии на сайте MQL5 Algo Forge
Конфликт Git может возникнуть и при попытке объединить две ветки непосредственно на сайте MQL5 Algo Forge. В этом случае также потребуется внешний Git-клиент или командная строка на вашем компьютере:
- Обновите локальный репозиторий — откройте Git-клиент, получите последние изменения из удаленного репозитория и переключитесь на целевую ветку, в которую вы пытаетесь внести изменения.
- Воспроизведите конфликт локально — запустите в Git-клиенте такое же слияние. В результате должен возникнуть тот же конфликт, из-за которого слияние не удалось выполнить на сайте MQL5 Algo Forge.
- Разрешите конфликт — Откройте затронутые файлы в текстовом редакторе или IDE. Найдите маркеры конфликта, вручную объедините изменения или выберите нужную версию, полностью удалите маркеры и сохраните файлы.
- Добавьте изменения и создайте коммит — Добавьте исправленные файлы в Git-клиент, чтобы отметить конфликты как разрешенные, и создайте коммит для завершения слияния.
- Отправьте изменения в удаленный репозиторий — Отправьте созданный коммит с результатом разрешения конфликта в удаленную ветку. После этого сайт MQL5 Algo Forge автоматически обнаружит, что конфликт устранен, и вы сможете выполнить слияние.