MetaEditorのヘルプ → プロジェクトおよびMQL5ストレージ → 変更の統合

MQL5 Algo Forgeでの共同作業と変更内容のマージ

プロジェクトのフォーク #

フォークすると、他のユーザーのリポジトリの個人用コピーが自分のアカウント配下に作成されます。これにより、元の作成者のコードベースに影響を与えることなく、安全かつ独立した環境で試行や変更を行うことができます。

MQL5 Algo ForgeのWebサイトでは、 公開プロジェクトを探索する 世界中のMetaTrader 5ユーザーが作成したパブリックプロジェクトを閲覧できます。気に入ったプロジェクトを見つけたら、右上隅にある[フォーク](Fork)をクリックします。

プロジェクトWebページをフォークする

フォークする際には、別の名前を指定したり、コピーするブランチを選択したり、説明を編集したりできます。[リポジトリをフォークする](Fork repository)をクリックします。

フォークオプションのWebページ

新しく作成されたリポジトリは、MQL5 Algo Forgeの自分のアカウント配下に表示されます。MetaEditorで[ Shared Projects ]を更新すると、新しく作成されたフォークのコピーを確認できます。プロジェクトのファイルをローカルで操作するには、まずリポジトリを クローンする必要があります。

プロジェクトのクローン #

クローンすると、リモートのMQL5 Algo Forgeからリポジトリがローカルコンピューターにダウンロードされます。これによりローカルの作業ディレクトリが作成され、ファイルを編集したり、変更をコミットしたりした後、その変更をリモートリポジトリにプッシュできるようになります。

クローンできるのは、MQL5 Algo Forgeで自分に書き込み権限があるリポジトリのみです。公開プロジェクトのファイルを自分のコンピュータ上でローカルに操作したい場合は、まずその プロジェクトをフォーク してから、フォークしたコピーをクローンする必要があります。

MetaEditorで[Shared Projects]を展開し、クローンしたいプロジェクトを右クリックして、[Gitクローン](Git Clone)を選択します。

プロジェクトのクローン

プルリクエストの作成 #

プルリクエスト(マージリクエスト)とは、独立したブランチで完了した作業をレビューし、対象のブランチに統合するための正式な提案です。また、共同作業者がコードを確認、コメント、テストできるディスカッションの場としても機能します。これにより、コードが受け入れられる前に、すべてが正常に動作することを確認できます。

一般的な使用例は次のとおりです。

  • 自分のプロジェクトで別のブランチを使用して作業した場合、その変更をメインブランチにマージするためにプルリクエストを作成します。
  • フォークしたコピーのいずれかのブランチで作業した場合、その変更を元のプロジェクトのメインブランチにマージするためにプルリクエストを作成します。その後、プロジェクトのメンテナーのいずれかがプルリクエストを承認し、受け入れる必要があります。

変更を含むリポジトリのWebページを開き、[プルリクエスト](Pull requests)をクリックして、[新規プルリクエスト](New pull request)ボタンをクリックします。

ブランチ比較Webページ

 

新規プルリクエストページで、マージ先のブランチを選択し、変更を取り込む元のブランチを選択します。選択した2つのブランチ間の差分が強調表示されます。[新規プルリクエスト](New pull request)ボタンをクリックして続行します。

ブランチ比較Webページ

次のページで、プルリクエストの名前、コメント、その他の詳細を入力します。ラベルやマイルストーンを追加したり、特定のユーザーをプルリクエストの担当者に割り当てたり、メンテナーによる編集権限を設定したりすることもできます。

プルリクエストオプションWebページ

[プルリクエストを作成](Create pull request)をクリックすると、プルリクエストが作成され、リポジトリに登録されます。

変更のマージ #

マージは、プルリクエストを介して、変更を含む独立したブランチを対象のコードベースに統合するための最終ステップです。この操作には書き込み権限が必要であるため、承認およびマージを実行できるのは、権限を持つプロジェクトのメンテナーのみです。

MQL5 Algo ForgeのWebサイトで、マージするプルリクエストを開きます。[コミット](Commits)タブと[変更されたファイル](Files changed)タブで変更内容を確認し、内容を把握した後、[会話](Conversation)タブに戻ります。

プルリクエストのマージオプションWebページ

内容に問題がないことを確認したら、[マージコミットを作成](Create merge commit)ボタンをクリックします。別のマージ方法を選択することもできます。

利用可能なマージ方法とその動作

  • マージコミットを作成(Create merge commit):新しい専用の「マージコミット」を作成して2つのブランチを統合し、両方の履歴を結び付けます。これにより、ブランチがいつ開始され、いつ統合されたのかを示す分岐の履歴がグラフ上に明確に残ります。
  • 移動して先送り(Rebase then fast-forward):まず、ブランチのコミットを対象ブランチの先端に移動(rebase)し、その後、対象ブランチのポインタを先に進めます。余分なマージコミットを作成せず、完全に平坦で直線的な履歴になります。
  • 移動してマージコミットを作成(Rebase then create merge commit):まず、ブランチのコミットを対象ブランチの先端に移動(rebase)しますが、両者を統合する際には最後にマージコミットを作成します。これにより履歴を直線的に保ちながら、マージが行われたことを明示的に記録できます。
  • スクアッシュコミットを作成(Create squash commit):ブランチに含まれる個々のコミットを1つのクリーンなコミットにまとめてから、対象ブランチに追加します。作業途中で作成された細かなコミットや、整理されていないコミット履歴をまとめて非表示にしたい場合に適しています。
  • 先送りのみ(Fast-forward only):作業を開始してから対象ブランチに新しい変更が追加されていない場合にのみ、変更を統合します。対象ブランチに新しい変更が追加されている場合、マージは失敗するため、まず自分のブランチを手動で同期する必要があります。

競合の解決 #

競合を解決するには、 外部のGitクライアントを使用する か、ターミナルでコマンドを実行する必要があります。

MetaEditorでのプルまたはプッシュ時の競合

ローカルからリモートへ変更をプッシュする場合、またはリモートからローカルへ変更をプルする場合、自動マージが競合によって失敗することがあります。これは、同じブランチに対して複数のユーザーが変更を行い、競合する変更がすでにリモートリポジトリにプッシュされている場合に発生します。典型的な競合には、次のようなものがあります。

  • 内容の競合(edit–edit):同じブランチで作業している別の開発者が、あなたが変更したものと同じコード行を変更した場合に発生します。
  • 構造上の競合(delete–modify):同じブランチで作業している別の開発者が、あなたが編集したファイルを削除または名前変更した場合に発生します。
  • バイナリファイルの競合:同じブランチで作業している別の開発者が、あなたが編集したものと同じバイナリファイル(画像やPDFなど)を編集した場合に発生します。Gitはバイナリファイルを1行ずつ読み取ることができないため、これらのファイルを自動的にマージすることはできません。
  • ディレクトリとファイルの競合:一方のブランチで、あなたまたは別の開発者がファイルを削除し、そのファイルとまったく同じ名前のフォルダを作成した場合に発生します。一方、もう一方のブランチでは、別のユーザーがそのファイルを単独のファイルとして引き続き使用・編集している場合に、この競合が発生します。

MetaEditorまたはその他のツールで変更をプルする際に内容の競合(edit–edit)が発生すると、Gitは競合しているコード行を競合マーカー(<<<<<<<、=======、>>>>>>>)で自動的に囲みます。

外部Gitクライアントで基本的な競合を解決する場合、一般的には次の手順で行います。

  1. 競合しているファイルを特定するGitクライアントを開き、競合が発生しているファイルを確認します。
  2. 競合の解決方法を決定する:
    • Gitクライアントにビジュアルマージ機能が組み込まれている場合、どちらのバージョンを残すかを選択したり、両方の変更を採用したり、マージツールを使用して手動で組み合わせたりできます。画面の指示に従って競合を解決したら、手順4に進みます。
    • 両方のバージョンの要素をファイルに残したい場合、または自分でファイルを編集したい場合、ファイルをテキストエディターまたはIDEで開きます。競合しているコード行の周囲にある競合マーカーを探し、手順3に進みます。
  3. 編集して保存します。競合しているブロックを手動で編集し、最終的に残したい内容になるようにファイルを修正します。競合マーカーと不要なコードを削除してから、ファイルを保存します。
  4. ステージングしてコミットします。Gitクライアントによってファイルが変更されたことが検出されます。ファイルをステージング(または「解決済み」としてマーク)してから、変更をコミットし、マージ処理を完了させます。
  5. リモートへプッシュします。新しくコミットした競合解決の結果をリモートブランチに送信します。

MQL5 Algo Forge Webサイトでのマージ時の競合

MQL5 Algo Forge Webサイトで、あるブランチを別のブランチにマージする際にも、Gitの競合が発生することがあります。この場合も、コンピューター上の 外部Gitクライアント またはコマンドラインツールを使用して、次の操作を行う必要があります。

  1. ローカルリポジトリを最新の状態にします。ローカルのGitクライアントを開き、リモートリポジトリから最新の更新をフェッチします。その後、マージ先として指定している対象ブランチに切り替えます。
  2. ローカルで競合を再現します。Gitクライアントで同じマージ操作を実行します。これにより、MQL5 Algo Forge Webサイトでのマージを妨げたものと同じ競合が発生するはずです。
  3. 競合の解決方法を決定します。影響を受けたファイルをテキストエディターまたはIDEで開きます。競合マーカーを確認し、コードを手動で編集して変更内容を組み合わせるか、適切な変更を選択します。その後、競合マーカーをすべて削除してファイルを保存します。
  4. ステージングしてコミットします。解決したファイルをGitクライアントでステージングし、競合が解決済みであることをGitに通知します。変更をコミットして、マージを正式に完了します。
  5. リモートへプッシュします。新しくコミットした競合解決の結果をリモートブランチに送信します。MQL5 Algo Forge Webサイトが競合の解決を自動的に検出するため、その後、マージを実行できるようになります。