Справка по MetaEditorПроекты и MQL5 Algo ForgeСовместная работа и слияние версий

Совместная работа и объединение изменений в 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-клиенте:

  1. Найдите конфликтующий файл — откройте Git-клиент и определите, какие файлы содержат конфликты.
  2. Выберите способ разрешения конфликта:
    • Если Git-клиент поддерживает визуальное слияние, выберите нужную версию, оставьте оба изменения или объедините их вручную с помощью инструмента слияния. После разрешения конфликта перейдите к следующему шагу.
    • Если нужно объединить элементы обеих версий или вы хотите отредактировать файл вручную, откройте его в текстовом редакторе или IDE. Найдите маркеры конфликта вокруг конфликтующих строк и перейдите к следующему шагу.
  3. Отредактируйте и сохраните файл — вручную измените конфликтующий фрагмент так, чтобы в файле осталась нужная итоговая версия. Удалите маркеры конфликта и ненужный код, затем сохраните файл.
  4. Добавьте изменения и создайте коммит — Git-клиент должен определить, что файл изменен. Добавьте файл в индекс (или отметьте конфликт как разрешенный), а затем создайте коммит, чтобы завершить слияние.
  5. Отправьте изменения в удаленный репозиторий — отправьте созданный коммит с результатом разрешения конфликта в удаленную ветку.

Конфликты при слиянии на сайте MQL5 Algo Forge

Конфликт Git может возникнуть и при попытке объединить две ветки непосредственно на сайте MQL5 Algo Forge. В этом случае также потребуется внешний Git-клиент или командная строка на вашем компьютере:

  1. Обновите локальный репозиторий — откройте Git-клиент, получите последние изменения из удаленного репозитория и переключитесь на целевую ветку, в которую вы пытаетесь внести изменения.
  2. Воспроизведите конфликт локально — запустите в Git-клиенте такое же слияние. В результате должен возникнуть тот же конфликт, из-за которого слияние не удалось выполнить на сайте MQL5 Algo Forge.
  3. Разрешите конфликт — Откройте затронутые файлы в текстовом редакторе или IDE. Найдите маркеры конфликта, вручную объедините изменения или выберите нужную версию, полностью удалите маркеры и сохраните файлы.
  4. Добавьте изменения и создайте коммит — Добавьте исправленные файлы в Git-клиент, чтобы отметить конфликты как разрешенные, и создайте коммит для завершения слияния.
  5. Отправьте изменения в удаленный репозиторий — Отправьте созданный коммит с результатом разрешения конфликта в удаленную ветку. После этого сайт MQL5 Algo Forge автоматически обнаружит, что конфликт устранен, и вы сможете выполнить слияние.