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を制限します。
関連ガイド
What Is git clone?What is git clone? An explainer on how cloning copies a repository with its full history, sets up the origin…
What Is a Pull Request?What is a pull request? An explainer on how PRs propose changes, gather review, run CI checks, and serve as t…
What Is a Git Remote?What is a Git remote? An explainer on named connections to hosted repositories, how push and fetch use them,…