はじめに
フォークされているリポジトリがあるプロジェクトへ参画することになったのですが、恥ずかしながらフォークという言葉に聞き覚えがなかったため調べてみました。
フォーク(fork)とは?
GitHub Docsを見てみると下記のように書かれています。
フォークとは、元の "上流" リポジトリとコードと可視性の設定を共有する新しいリポジトリです。
うーん、ピンときませんね。
一つ一つ分解して見ていくことにしましょう。
上流リポジトリについて
オリジナリのリポジトリのことを「上流の」リポジトリと呼びます。
フォークを使うと上流のリポジトリをベースとして、Github上に別のリポジトリとして新たに作成されます。
また、リポジトリをフォークした後は、上流のリポジトリから更新をフェッチしてフォークを最新の状態に保つことができ、プルリクエストを使ってフォークから上流のリポジトリに変更を提案できます。
フォークの可視性について
フォークは「コード」と「可視性の設定」を上流リポジトリと共有するリポジトリです。
例えば、上流のリポジトリがパブリックである場合、フォークも全てパブリックになります。
リポジトリを削除したり、リポジトリの可視性を変更すると、リポジトリのフォークに影響するため注意が必要です。(※詳しくはこちらを参照してください)
どんな時にフォークを使うのか?
フォークを活用することで、上流のリポジトリに影響を及ぼすことなく自由に変更を加えることができるため、主に以下のような用途があるようです。
オーブンソースプロジェクトへの貢献
オープンソースプロジェクトに貢献する場合(バグ修正や新規機能の追加など)、まずリポジトリをフォークして自分のGitHubアカウントにコピーを作成します。
その後、ローカルで変更を加え、プルリクエストを通じて上流のリポジトリに変更を提案します。
独自のカスタマイズ
公開されているプロジェクトを自分の用途に合わせてカスタマイズしたい場合にフォークします。
上流のリポジトリには影響を与えず、自分だけカスタマイズされたバージョンを持つことができます。
例えば、ほとんどのLinuxディストリビューションは他のディストリビューションからの派生であり、その多くはDebian、Red Hat、Slackwareのどれかをフォークしたものです。
学習目的
他の人のコードを学ぶためにリポジトリをフォークします。
フォークしたリポジトリで自由に実験しながら、オリジナルのコードベースを参照し、コードの動作や構造を理解することができます。
自分が勉強したい言語を使っているOSSなどがあれば、非常に参考になりそうです。