DUICUO

これは大騒動です!プルリクエストって一体何ですか?

[[379085]]

この記事は、雷嘉(レイ・ジア)著のWeChat公式アカウント「微笑みの建築家」から転載されたものです。転載の許可については、「微笑みの建築家」WeChat公式アカウントまでお問い合わせください。

チームではコミッターの役割を担い、同僚のコードレビューとマージを手伝っています。グループチャットで同僚から「ねえ、私のPRをマージしてくれない?」とか「ねえ、MRを提出したんだけど、マージしてくれない? 緊急にパッチが必要なんだ」といった声がよく聞こえてきます。少し混乱しました。PRとMR、どちらが正しいのでしょうか? 違いは何でしょうか? コードをマージする前に、この2つの概念を理解しておくことにしました。(皮肉です)

プルリクエストとは何ですか?

PRはPull Requestの略で、GitHubを頻繁に利用する人にはお馴染みのものです。GitHubには4,000万人の開発者と数億ものオープンソースプロジェクトが存在します。他の人のオープンソースリポジトリにコードを投稿したい場合は、通常、まずプロジェクトをフォークし、ローカルで修正を加えて自分のフォークしたリポジトリに送信します。最後にPRを送信し、他の人がコードをマージするのを待ちます。

Github のワークフロー:

フォークワークフロー

ステップ6に注目しましょう。Xiaomingはコードを書き終えた後、元の作者のリポジトリにマージしたいと考え、「プルリクエスト」を作成しました。プルリクエスト?これは明らかにプッシュです。Xiaomingは変更を元の作者のリポジトリにプッシュしました。「プッシュリクエスト」の方が適切だと思います。

GitHubが「プルリクエスト」と呼ぶことにこだわっているので、そのロジックを理解してみましょう。Xiaomingがコードを書き終えて、「元の作者さん、いくつか変更を加えました。変更をプルバックしてください!」と考えていると想像してみてください。元の作者の視点からすると、プルリクエストと呼ぶのは妥当に思えます。毎日、数え切れないほどの人が私のリポジトリからコードをフォークしています。私は興味のあるコードだけをプルバックするのです。

自分自身を納得させたと思います。

マージリクエストとは何ですか?

MR は Merge Request の略で、GitLab を使用したことがある人なら誰でも知っているはずです。

余談ですが、GitHubはこんなにユーザーフレンドリーなのに、なぜ今でもGitLabが使われているのでしょうか?これは数年前に遡ります。MicrosoftがGitHubを買収する前は、GitHub上のすべてのプロジェクトは公開する必要がありました。つまり、たとえ出来の悪いコードであっても公開しなければならず、隠すことはできなかったのです。しかし、一部の中小企業やスタートアップ企業は、コードなどのコア資産を公開したくありませんでした。彼らはプライベートリポジトリを切実に必要としていたため、多くの企業がGitLabを選びました。もちろん、GitHubは後にプライベートリポジトリを開放しましたが、それはまた別の話です。

マージワークフロー

チームの各メンバーは、リモート リポジトリの開発ブランチからコードをプルし、開発ブランチに基づいてローカルに新しい機能ブランチを作成し、変更を加えた後に機能ブランチをリモート リポジトリにプッシュし、機能ブランチを開発ブランチにマージするためのマージ リクエストを作成します。

上記のプロセスから、マージ リクエストは独自の機能ブランチをメイン ブランチにマージするものであることがわかります。

プルリクエストとマージリクエスト

上記の 2 つの例をまとめてみましょう。

GitHub はフォーク モデルで動作しており、開発者はプル リクエストを作成し、元の作者に「コードをプルバックしてください」と依頼することでコードを送信します。

GitLab は、開発者がコードを送信し、新しいマージ リクエストを作成して機能ブランチをメイン ブランチにマージするブランチ モデルを使用します。

上記の要約は一見理にかなっているように思えますが、GitHubではブランチ機能も、GitLabではフォーク機能も使えることを忘れないでください。さらに不可解なのが、次の点です。

GitHub では、ブランチのマージは依然として Pull Request と呼ばれ、GitLab ではフォーク モードは Merge Request とも呼ばれます。

いいえ、この回答は受け入れられません。Stack Overflowで他の人の理解度を調べてみたところ、案の定、とても人気のある投稿がありました。

プルリクエストとマージリクエスト

ある回答では、GitLab の公式説明が引用されていました。

マージリクエストまたはプルリクエストは、Git管理アプリケーションで作成され、割り当てられた担当者に2つのブランチをマージするよう依頼するものです。GitLabやGitoriousなどのツールでは、担当者に要求される最終的なアクションであるため、「マージリクエスト」という名称が付けられています。この記事では、これらを「マージリクエスト」と呼びます。

簡単に言えば、これら 2 つのステートメントは根本的に異なるわけではなく、異なる視点から異なる方法で提示されているだけです。

はい、公式の結論は明らかです。これら 2 つは同じものなので、これ以上心配する必要はありません。

クレイジーな暴言

初心者にとって、GitHubのプルリクエストを理解するのはかなり難しいかもしれません。様々なウェブサイトでユーザーの声を見てみましょう。

スタックオーバーフロー

写真

知湖

国内外を問わず、多くのユーザーがこの名称を理解していません。本来はコードの提出を指すのに、なぜ「プルリクエスト」と呼ばれるのかと疑問に思う人もいます。中には、スペルミスではないかと疑うユーザーもいます。

GitHub に名前を付けるなら、次のような名前になるかもしれません。

プッシュリクエスト

マージリクエスト

考えすぎだよ。「もしも」なんて考えられないんだ。(笑)

要約

プルリクエストとマージリクエストは、どちらも本質的にはコードをマージする方法ですが、単に異なる視点から異なる方法で表現しているだけです。したがって、学習や仕事ではどちらを使用しても問題ありません。

さらに、適切な名称は、初心者が技術やビジネスを理解する上で非常に役立ちます。例えば、「リバースプロキシ」という用語を見ると、多くの初心者が混乱してしまいます。他にも分かりにくい用語に遭遇した場合は、コメント欄でお気軽にご意見・ご指摘ください。