フォーク ワークフローを調べる
フォーク ワークフローは、他の一般的な Git ワークフローとは根本的に異なります。
単一のサーバー側リポジトリを使用して "中央" コードベースとして機能するのではなく、すべての開発者にサーバー側リポジトリを提供します。
これは、各共同作成者が 2 つの Git リポジトリを持っていることを意味します。
- プライベート ローカル。
- パブリックサーバーサイド。
フォーク ワークフローは、パブリック オープンソース プロジェクトでよく見られます。
フォーク ワークフローの主な利点は、すべてのユーザーが 1 つの中央リポジトリにプッシュしなくても、コントリビューションを統合できることです。
開発者はサーバー側リポジトリにプッシュし、公式リポジトリにプッシュできるのはプロジェクト保守管理者だけです。
これにより、メンテナは、公式のコードベースへの書き込みアクセス権を与えることなく、開発者からのコミットを受け入れます。
フォーク ワークフローは、通常、元のプロジェクト メンテナのリポジトリにマージすることを目的としています。
その結果、大規模で有機的なチーム (信頼されていないサード パーティを含む) が安全に共同作業を行うための柔軟な方法を提供する分散ワークフローが得られます。
これにより、オープンソース プロジェクトに最適なワークフローにもなります。
しくみ
他の Git ワークフローと同様に、フォーク ワークフローは、サーバーに格納されている公式のパブリック リポジトリから始まります。
しかし、新しい開発者がプロジェクトの作業を開始する場合、公式リポジトリを直接複製することはありません。
代わりに、公式リポジトリをフォークしてサーバー上にコピーを作成します。
この新しいコピーは、個人のパブリック リポジトリとして機能します。他の開発者はそれをプッシュすることはできませんが、そこから変更をプルできます (これが必要な理由がすぐにわかります)。
サーバー側のコピーを作成した後、開発者は git クローンを実行して、そのコピーをローカル コンピューターに取得します。
他のワークフローと同様に、プライベート開発環境として機能します。
ローカル コミットを発行する準備ができたら、公式のコミットではなく、パブリック リポジトリにコミットをプッシュします。
次に、プル要求をメイン リポジトリに提出します。これにより、プロジェクトの保守担当者は、更新プログラムを統合する準備ができていることを認識できます。
pull request は、提供されたコードに問題がある場合に便利なディスカッション スレッドとしても機能します。
このワークフローのステップ バイ ステップの例を次に示します。
- 開発者は、"公式" サーバー側リポジトリを "フォーク" します。 それによってサーバー側のコピーが作成されます。
- 新しいサーバー側のコピーは、ローカル システムに複製されます。
- "公式" リポジトリの Git リモート パスがローカル クローンに追加されます。
- 新しいローカル機能ブランチが作成されます。
- 開発者は新しいブランチに変更を加えます。
- 変更に対して新しいコミットが作成されます。
- ブランチは、開発者のサーバー側のコピーにプッシュされます。
- 開発者は、新しいブランチから '公式' リポジトリへのプル要求を開きます。
- pull request はマージが承認され、元のサーバー側リポジトリにマージされます。
この機能を公式のコードベースに統合するには:
- 保守担当者は、共同作成者の変更をローカル リポジトリにプルします。
- プロジェクトが壊れないことを確認します。
- それをローカルのメインブランチにマージします。
- サーバー上の公式リポジトリにメイン ブランチをプッシュします。
この投稿はプロジェクトの一部になり、他の開発者は公式リポジトリからプルしてローカル リポジトリを同期する必要があります。
フォーク ワークフローの "公式" リポジトリの概念は単なる慣例であることを理解することが不可欠です。
公式リポジトリを作成する唯一のことは、それがプロジェクトメンテナーのリポジトリであるということです。
フォークと複製
"フォークされた" リポジトリと "フォーキング" は特別な操作ではないことに注意してください。
フォークされたリポジトリは、標準の git clone コマンドを使用して作成されます。 フォークされたリポジトリは、通常、Azure Repos などの Git サービス プロバイダーによって管理およびホストされる "サーバー側クローン" です。
フォークされたリポジトリを作成する一意の Git コマンドはありません。
複製操作は、基本的にリポジトリとその履歴のコピーです。