GitHubのforkについてまとめています。
GitHubのforkはリポジトリをGitHub内で複製する
fork(派生)とはある時点のリポジトリをベースとして、GitHub上に別のリポジトリとして作成することです。
ソフトウェア開発におけるフォークは、あるソフトウェアパッケージのソースコードから分岐して別の独立したソフトェアを開発することを指しますが、同じようなニュアンスになります。たとえば、ほとんどのLinuxディストリビューションはDebian、Red Hat、Slackwareのいずれかのフォークですし、OpenSSHはSSHからのフォークです。
開発現場によっては、ソースコードのマスターのプライベートリポジトリ(GitHub Enterprise)をGitHubに置き、開発メンバー全員がforkして個別のリポジトリを作成し、ソースコードの修正を行ったらpull requestでマスターリポジトリに変更を伝えるという使い方もあるようです。
【関連記事】
▶GitHub Enterpriseは、企業にうれしい機能がいっぱいあります!
メンバー全員がリポジトリをフォークするメリットは、GitHubの操作で致命的なミスをしてしまった場合でも、影響範囲はメンバー一人分だけで済むことです。最悪の場合、フォークしなおせばリカバリーできます。複数の開発会社が協業している場合などは、開発会社ごとにリポジトリをフォークすることもあるかも知れません。
GitHubのフォークとクローンの違い
cloneとforkは何が違うんでしょう?cloneとはリポジトリの複製を、単にローカル環境に作成することを言います。ローカルにクローンしたリポジトリに対しては、自由にコミット、プッシュ、マージをおこなうことができます。
forkすると、オリジナルのリポジトリの所有者にforkしたことが通知されます。OSSの開発などでは、forkすること=バグ潰しの手伝いをするなど貢献の意思ありと見なされることがあるようです。面識のないリポジトリオーナーにforkをおこなう際は、注意したほうが良いかも知れません。
単に公開されているリポジトリをベースにして何かを作ろう、とか、ビルドして動きを見てみようという場合ならforkではなくcloneを使うのが良いでしょう。
GitHubのフォークとブランチの違い
一般的には、リポジトリごと分岐(フォーク)するのではなく、同一のリポジトリ内で分岐(ブランチ)することが多いようです。ブランチは、masterブランチと開発ブランチといった大きな分け方のほか、「機能Aの修正用ブランチ」と、修正作業ごとにブランチして、おおもとのブランチに影響を与えないよう作業することが可能です。
フォークを行うと、管理対象がリポジトリ全体となるため、GitコマンドやGitHubに関するより高度な知識が要求されます。
ブランチを作って作業する場合は、上位のブランチに対してpull requestを行います。フォークした場合にソースコードの変更を反映させるには、オリジナルのリポジトリに対してpull requestを行います。フォーク時のpull requestはブランチのpull requestよりも手順が複雑になるというデメリットがあります。
pull requestは、ソースコードの変更のレビューとマージを行う依頼を出すGitの機能です。レビュー担当者がソースコードをレビュー(確認)し、他の修正者との競合や誤りがなければ大元のソースコードにマージ(統合)をおこないます。
GitHubでフォークする手順
GitHubでリポジトリをフォークするには、対象のプロジェクトページを開き、画面右上のForkボタンをクリックします。ボタンの右にある数字はForkされた数です。4K=4,000件以上フォークされていることになります。
fork自体はGitHub内で完結するため、10秒~数十秒程度で完了します。
forkはリポジトリ内のブランチも複製します。また、forkしたリポジトリに対してはリポジトリオーナー権限が付与されるため、リポジトリを自由に変更できます。また、オリジナルリポジトリで変更された内容を同期して取り込むことも可能です。
具体的には、端末機にて、git remote addにて、オリジナルリポジトリをリモートリポジトリとして追加します。これで端末機にはオリジナルリポジトリでの変更箇所が取得できるようになり、forkしたリポジトリにオリジナルでの変更を反映したり、変更内容によっては意図的に反映しないなどの操作が可能になります。
関連)GitHubでFork/cloneしたリポジトリを本家リポジトリに追従する – Qiita
今回は、以下のリポジトリをforkしました。
参考)google-research/google-research: Google Research
GitHubのクライアントツール Fork
GUIベースのGitとして、「Fork」という名前のツールがあります。
関連)Fork – a fast and friendly git client for Mac and Windows
Windows用とMac用があり、GUI上でGitの操作が行なえます。
関連)Git Fork でストレスフリーな gitライフを Git GUI Fork の紹介 – まめ – たんたんめん
Forkには基本機能として以下を備えています。一般の開発者が処理するワークフローに加えて、レビュアーやリポジトリオーナーがおこなう作業も可能です。
- フェッチ、プル、プッシュ
- コミット、修正
- ブランチとタグを作成および削除します
- リモートリポジトリの作成と削除
- チェックアウトブランチまたはリビジョン
- チェリーピック
- リバート(コミットを取り消す)
- マージ
- リベース
- stash(変更の対比)
- サブモジュール
ForkはGitの機能を一通り盛り込んでいるため、初見だと多機能で複雑に見えるかも知れません。開発者として最低限のgit操作(コミットやプルリクエスト)が必要な場合は、機能を絞ったGitHub Desktopなどを検討したほうが良いかも知れません。
【関連記事】
▶GitHub DesktopはWindows用Gitツール インストールと使い方の解説
Forkには以下のような特徴があります。
- 競合部分のマージ merge-conflictリゾルバを使用し、マージの競合を簡単に解決
- インタラクティブリベース GUIでコミットの編集、並び替え、
- 画像の差分確認
- 履歴ビュー コミット履歴が確認できる
利用者によると、UIのレスポンスが良い点や、画像ファイルのプレビュー、好きなコマンドを登録しておけるCustom Commandsが便利と、評価されているようです。
Forkは有料で、1ユーザあたり49.99ドル。一度に3台のマシンで使用できます。試用は無料で、試用期間は特に制限されていません。
GitHubのForkのまとめ
- GitHubのForkはリポジトリの分岐を表す場合と、Git用ツールを表す場合あり
- GitHubのFork(リポジトリ分岐)は、GitHub内でリポジトリを複製する
- GitHubのFork(Gitツール)は、管理機能も含めたGitの機能が使えるGUIツール