Skip to content
Latchkey

forkとは?

forkは、他人のリポジトリの自分用のサーバー側コピーで、そこで自由に変更を加え、pull requestを通じて元へ提案し戻せます。

forkは、書き込みアクセスを持たないプロジェクトに貢献する手段です。元のリポジトリ内でbranchする代わりに、全体を自分のアカウントへコピーし、そこで作業し、元へpull requestを開きます。これはオープンソースの協働の基盤です。

forkとcloneの比較

cloneはリポジトリをローカルマシンへコピーします。forkはそれをホスティングプラットフォーム上で自分のnamespaceへコピーします。通常はサーバー上でforkし、それから自分のforkをローカルにcloneします。forkは、元へpushできないときでもpushできる場所を与えてくれます。

fork-and-pullワークフロー

upstreamのプロジェクトをforkし、自分のforkをcloneし、元をupstreamというremoteとして追加し、forkを同期し続けます。

Setting up a fork
gh repo fork owner/project --clone
git remote add upstream https://github.com/owner/project.git
git fetch upstream

変更を提案し戻す

branchを自分のforkへpushし、元のリポジトリをターゲットとするpull requestを開きます。メンテナーはそこでレビューします。forkを所有しているため、upstreamのプロジェクトに対する権限を必要とせず自由に反復できます。

forkとCI/CD

forkからのpull requestはセキュリティ上の問いを提起します。forkの作者がupstreamのプロジェクトのsecretへ自動的にアクセスを得るべきではありません。CIプラットフォームはforkのPRを制限された権限で実行し、secretを必要とするworkflowが動く前にメンテナーの承認を要求することで、deploy keyやtokenを信頼できないコードから守ります。

forkを最新に保つ

  • 元のリポジトリをupstreamのremoteとして追加する。
  • 乖離を避けるため、upstreamの変更を定期的にfetchしてmergeする。
  • デフォルトbranchではなく、feature branchからpull requestを開く。
  • forkからのpull requestではCIの権限が制限されることを想定する。

重要なポイント

  • forkは、自分のnamespace内にあるリポジトリのサーバー側コピーです。
  • fork-and-pullワークフローを通じてオープンソースへの貢献を支えます。
  • CIは、信頼できないコードを守るためforkのpull requestではsecretを制限します。

関連ガイド