フォークは、アップストリーム リポジトリと呼ばれる別のリポジトリのコピーとして開始されるリポジトリです。 フォークには独自の設定とアクセス許可がありますが、アップストリーム リポジトリへの接続は維持されます。
GitHubでフォークされたリポジトリを表示すると、アップストリーム リポジトリはフォークの名前の下に示されます。
フォークをブランチと区別する特徴
ブランチは、1 つのリポジトリの一部です。 フォークは、独自の設定とコラボレーション スペースを持つ独立したリポジトリです。
各フォークはそれぞれ独自のものを持つことができます:
- 支店
- メンバーおよびディスカッション
- Issue およびプルリクエスト
- アクションとプロジェクト
- タグ、ラベル、Wiki
どのリポジトリをフォークできますか?
任意のパブリック リポジトリを次の場所にフォークできます。
- 個人用アカウント
- 自分がリポジトリ作成アクセス許可を持っている organization
プライベート リポジトリにアクセスできて、所有者がフォークを許可している場合は、次の場所にリポジトリをフォークできます。
- 個人用アカウント
- 自分がリポジトリ作成アクセス許可を持っている GitHub Team 上の organization
プライベート リポジトリは、GitHub Free を使っている組織にはフォークできません。 GitHub Team と GitHub Free の詳細については、「GitHubのプラン」を参照してください。
リポジトリ、組織、およびエンタープライズ ポリシーでは、リポジトリをフォークできるかどうか、およびフォークを作成できる場所を制限できます。 プライベート リポジトリの場合、フォークへのアクセスは、リポジトリの可視性、組織のメンバーシップ、および管理者の設定によっても異なります。
マネージド ユーザーを含む Enterpriseのメンバーである場合は、フォークできるリポジトリに追加の制限が適用されます。
ドキュメントの GitHub Enterprise Cloud.
「AUTOTITLE」を参照してください。
フォークの可視性
フォークの可視性は、アップストリーム リポジトリのリポジトリ ネットワークに関連付けられています。 パブリック リポジトリ フォークはパブリックであり、プライベート リポジトリ フォークはプライベートです。 フォークの可視性を単独で変更することはできません。
リポジトリ ネットワーク内のすべてのリポジトリは、同じ可視性設定を共有します。 リポジトリネットワークには、アップストリームリポジトリ、そのフォーク、およびそのフォークから派生したフォークが含まれます。 「リポジトリ間の接続を理解する」を参照してください。
リポジトリを削除したり、可視性を変更したりすると、ネットワークに影響を与える可能性があります。 フォークを削除した場合、そのフォークからのコードコントリビューションはリポジトリ ネットワークから引き続きアクセスできます。
リポジトリが削除されたとき、または可視性が変更された場合のフォークの動作
警告
- プライベートリポジトリへの個人のアクセス権を削除すると、そのプライベートリポジトリからその人が作成したフォークはすべて削除されます。 プライベートリポジトリのローカルクローンは残ります。 プライベート リポジトリへのチームのアクセスが取り消されるか、プライベート リポジトリへのアクセス権を持つチームが削除され、チーム メンバーが別のチームを介してリポジトリにアクセスできない場合、リポジトリのプライベート フォークが削除されます。
- リポジトリへのアクセスを失った個人に、機密情報や知的財産を確実に削除してもらうのは、あなたの責任です。
- プライベート リポジトリに対する管理者アクセス許可を持つユーザーは、そのリポジトリのフォークを禁止することができ、組織の所有者は、組織内のプライベート リポジトリのフォークを禁止できます。 詳細については、「Organization のフォークポリシーを管理する」および「リポジトリのフォークポリシーを管理する」を参照してください。
可視性の変更により、フォークを新しいリポジトリ ネットワークに分割できるため、既存のフォーク所有者は予期しないアクセスを失うことなく作業を続けることができます。
| アクション | フォークへの影響 |
|---|---|
| プライベート リポジトリが削除される | そのプライベートフォークも削除されます。 |
| パブリック リポジトリが削除される | アクティブなパブリック フォークが、ネットワークの新しいアップストリーム リポジトリになります。 |
| パブリック リポジトリをプライベートに設定する | そのパブリック フォークは、別のネットワークでパブリックに維持されます。 |
| プライベート リポジトリがパブリックになっている | プライベートフォークはプライベートのままですが、それぞれ独立したプライベート ネットワークに分離されます。 |
パブリック リポジトリをプライベートに変更すると、星、ウォッチャー、依存関係グラフ、 Dependabot alerts、および code scanning 可用性にも影響を与える可能性があります。 変更する前に、リポジトリの可視性の設定を慎重に確認してください。
フォークの権限
プライベート フォークは、上流リポジトリのアクセス許可構造を継承します。 これは、プライベートリポジトリのオーナーがコードに対するコントロールを管理するための役に立ちます。 たとえば、上流リポジトリがプライベートで読み取り/書き込みアクセスをあるTeamに与えているなら、そのチームはプライベートの上流リポジトリのすべてのフォークに読み取り/書き込みアクセスを持つことになります。 (個人のアクセス許可ではなく) チームのアクセス許可のみが、プライベート フォークによって継承されます。
メモ
組織の基本アクセス許可を変更しても、プライベート フォークのアクセス許可は自動的に更新されません。詳細については、「Organization の基本レベルの権限の設定」を参照してください。
パブリック フォークは、上流のリポジトリのアクセス許可構造を継承しません。 フォーク所有者はフォークへのアクセスを制御しますが、リポジトリ ネットワークは引き続き Git データを共有します。 ネットワーク内の任意のリポジトリにプッシュされたコミットには、そのネットワーク内の他のリポジトリ (アップストリーム リポジトリを含む) からアクセスできます。
パブリック リポジトリを個人用アカウントにフォークすると、アップストリーム リポジトリの保守担当者が pull request ブランチにプッシュできるようになります。 これは、メンテナーがブランチを更新したり、テストを実行したり、マージする前に小さな問題を解決したりするのに役立ちます。 組織が所有するフォークにプッシュアクセス許可を付与することはできません。 「Allowing changes to a pull request branch created from a fork」を参照してください。
フォークされたリポジトリ向けのプッシュルールセット
プッシュ ルールは、リポジトリのフォーク ネットワーク全体に適用され、リポジトリへのすべてのエントリ ポイントが確実に保護されます。 たとえば、プッシュルールセットが有効になっているリポジトリをフォークした場合、フォークされたリポジトリにも同じプッシュルールセットが適用されます。
フォークされたリポジトリの場合、プッシュ ルールのバイパス アクセス許可を持つユーザーは、ルート リポジトリのバイパス アクセス許可を持つユーザーだけです。
「ルールセットについて」を参照してください。
重要なセキュリティに関する考慮事項
フォークは強力なコラボレーション ツールですが、見過ごしやすい方法でコードと履歴を公開できます。
- フォークには、上流のリポジトリとは別の固有のアクセス許可があります。
- アップストリーム リポジトリの所有者は、リポジトリ ネットワーク内のすべてのフォークを読み取ることができます。
- 組織の所有者は、個人用名前空間で作成されたフォークへの管理アクセス権を持つことができます。
- アップストリーム リポジトリへの誰かのアクセス権を削除しても、他の組織のフォークが必ずしも削除されるわけではありません。
- フォークが削除された後でも、リポジトリ ネットワーク内でコミットにアクセスできます。
機密性の高い作業のフォークを許可する前に、リポジトリまたは組織のアクセス許可と可視性モデルを確認します。
組織内のフォーク
同じ組織内のフォークは、アップストリーム リポジトリからコラボレーターとチーム設定をコピーします。 組織はこれらのフォークのアクセス許可を制御し、既存の目に見えるチームはアクセスを維持できます。
企業内におけるフォーク
内部リポジトリでは、単一レベルのフォークがサポートされます。 内部リポジトリのプライベート フォークをフォークすることはできません。 これにより、企業全体で表示されるリポジトリのアクセスと管理が簡単になります。