GitHubでのForkingとCloningの違いは何ですか?


186

プロジェクトのフォークを行うことcloneとそれを行うことの違いを知りたいのですが。

プロジェクトをフォークした場合にのみ、GitHub経由でプルリクエストを送信できますか?



2
ここに着陸し、Git(GitHubではない)で「フォーク」の説明を探している人。Gitには「フォーク」コマンドはありません。これはGitHub(Gitではない)の概念です。区別は簡単に忘れられます。
アンバサロ

回答:


113

基本的にそうです。A forkは、GitHubがプロジェクトを複製してユーザー名で登録するためのリクエストです。GitHubは2つのリポジトリ間の関係も追跡するため、2つのプロジェクト(および他のフォーク)間のコミットとプルを視覚化できます。

たとえ使用していなくても、クローンされたリポジトリからプルするように要求することはできますが、fork自分でそれを公開することに対処する必要があります。または、開発者git format-patchがツリーに適用できるパッチ(を参照)を送信します。


4
フォークはクローンよりも更新に多くの作業を要します。クローンは単純なで更新できますgit pull。フォークは複数のコマンドを受け取ります。そして、当然のことながら、私が見るほとんどすべてのフォークは時代遅れです。フォークは、ステロイドに関するMavenリポジトリの問題のようなものです。古くなった1つのリポジトリ(Maven)の代わりに、何千ものリポジトリ(Git)があります。
jww

@jwwはクローンをそのまま使用するのが最善のように聞こえます-では、なぜforkを使うのですか?
serup

@serup-フォークされたコピーであることが理由である可能性があるgit pullので、まだ何らかの関係が存在しています。コピー全体を複製して自分のローカルマシンに配置し、元のリポジトリから切断した場合。
JonH

134

リポジトリをフォークしていると言うときは、基本的にはGitHub IDでリポジトリのコピーを作成しています。ここで注意すべき重要な点は、元のリポジトリに加えられた変更は、分岐したリポジトリに反映されることです(フェッチしてリベースする必要があります)。ただし、フォークしたリポジトリに変更を加える場合は、元のリポジトリへのプルリクエストを明示的に作成する必要があります。プルリクエストが元のリポジトリの管理者によって承認された場合、変更は既存の元のコードベースにコミット/マージされます。それまでは、変更は分岐したコピーにのみ反映されます。

要するに:

フォーク&プルモデルを使用すると、誰でも既存のリポジトリをフォークして、ソースリポジトリへのアクセスを許可しなくても、自分のフォークに変更をプッシュできます。次に、プロジェクトメンテナが変更をソースリポジトリにプルする必要があります。

フォークした後、リポジトリ(自分の名前の下にあるもの)をマシンのローカルに複製できることに注意してください。変更を加え、フォークしたリポジトリにプッシュします。ただし、変更を元のリポジトリに反映するには、プルリクエストを承認する必要があります。

他の興味深い議論のカップル-

Gitフォークは実際にGitクローンですか?

GitHubフォークリポジトリを更新するにはどうすればよいですか?


24
「ここで注意すべき重要な点は、元のリポジトリに加えられた変更は、フォークされたリポジトリに反映されることです。」それは少し誤解を招くと思います。AFAIK、フォーク後に元のリポジトリに加えられた変更は、自動的にフォークに反映されません。これらの変更を手動で移動する必要があります。ただし、フォークボタンをクリックすると、フォークの前に発生した変更が新しいフォークにコピーされます。
Ajedi32 2015

「元のリポジトリに加えられた変更は、フォークされたリポジトリに反映されます」..本当に?? 自動的には望みません
KansaiRobot 2018

私はクライアントのプロジェクトで働いていて、クローンとプッシュモデルを使って仕事をしていました。ある日、私はそれをforkし、すぐに、完全なレポをforkする必要があるかというメッセージを受け取りました。私はそれがどのように間違っていると考えられているのか本当にわかりませんか?
user3075740 2018

フォーク後に元のリポジトリに加えられた変更は、自動的にはフォークに反映されませんが、そのためには、このブログのステップ3を確認してください。- help.github.com/articles/fork
a

「元のリポジトリに加えられた変更は、フォークされたリポジトリに反映されます」-クローンを作成した後、これは不可能ですか?
変数

26
  • フォークされたプロジェクトは、オンラインリポジトリ(リポジトリ)にあります。
  • クローンされたプロジェクトはローカルマシン上にあります(私は通常、リポジトリをフォークした後にクローンを作成します)。

オンラインリポジトリでコミット(またはローカルリポジトリでコミットしてからオンラインリポジトリにプッシュ)してから、プルリクエストを送信できます。

プロジェクトマネージャーはそれを受け入れて、メインのオンラインバージョンで変更を取得できます。


13

クローンとは、リポジトリの2つの(場合によっては異なる)バージョンを適切に複製および分離する場所です。1つのリポジトリが修正されると、pushコマンドを使用して、新しいコンテンツを他のリポジトリにアクティブにコピーする必要があります。そして、フェッチされた他のリポジトリの変更。

サーバー上でリポジトリをフォークする場合、両方のリポジトリが同じサーバーの同じ[固定オブジェクト]コンテンツを使用するため、コンテンツを複製する必要はありません。「トリック」は、各ユーザーがリポジトリの完全な個人用コピーを持っていると信じるように、さまざまなユーザーの視点を管理することです。フォーク間のプッシュとフェッチは、ユーザーのポインタを更新するだけです。

下位レベルでは、gitは内部で同じことを行います。3つの異なるファイルがあり、それぞれにが含まれているHello World場合、gitはHello World blobの1つのコピーを単純に「フォーク」し、必要に応じて3つの場所それぞれにそれを提供します。

サーバーでforkできることは、Githubの大規模なストレージの許容量が平均してそれほど大きくないことを意味しています。


5

簡単に言えば、フォークはおそらく「GitHub ID /プロファイルの下でのクローニング」と同じです。フォークは、明らかにいくつかの例外を除いて、いつでもクローンよりも優れています。フォークされたリポジトリは、クローンされたリポジトリとは異なり、常に元のリポジトリと監視/比較されます。これにより、変更を追跡し、プルリクエストを開始し、元のリポジトリで行われた変更をフォークされたものと手動で同期することができます。


5

@AniketThakurの答えはとても良いですが。次の質問にはまだ誰も回答していません。

プロジェクトをフォークした場合にのみ、GitHub経由でプルリクエストを送信できますか?

いいえ。リポジトリのコントリビューターであれば、次のことができます。ローカルクローンを作成する。ローカルブランチを作成します。そのブランチにコミットを追加します。ローカルブランチをgithubにプッシュします(プロセス内にリモートブランチを作成します)。そのブランチをマスターブランチ(または任意のブランチ)にマージするように要求するプルリクエストを作成します。


3

質問者が示唆したことを行った場合(フォークするのを忘れて、ローカルでリポジトリを複製し、変更を加え、プルリクエストを発行する必要がある場合)、元に戻すことができます。

  1. プルリクエストを送信したいレポをフォークする
  2. ローカルの変更をリモートにプッシュする
  3. プルリクエストを発行する

2

GitHubのもう1つの奇妙な微妙な違いは、変更が元のリポジトリにプルされるまで、フォークへの変更がアクティビティログにカウントされないことです。さらに、フォークを適切なクローンに変更するには、どうやらGithubサポートに連絡する必要があります。

なぜ私の貢献は表示されません

コミットはフォークで行われました

フォークで行われたコミットは、あなたの貢献にはカウントされません。それらをカウントするには、次のいずれかを実行する必要があります。

プルリクエスト開いて、変更内容を親リポジトリにマージします。フォークを切り離してGitHubのスタンドアロンリポジトリに変換するには、GitHubサポートに連絡してください。フォークに独自のフォークがある場合は、フォークをリポジトリと共に新しいネットワークに移動するか、現在のネットワークに残すかをサポートに知らせてください。詳細については、「フォークについて」を参照してください。


2

簡単に言えば、「フォーク」は自分のGitHubアカウントでホストされているプロジェクトのコピーを作成します。

「クローン」は、コンピューター上のgitソフトウェアを使用してソースコードをダウンロードし、そのコンピューターへのバージョン履歴全体をダウンロードします

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.