github上のフォークとブランチの違い


127

githubでホストされているプロジェクトをフォークした場合。すべてのブランチをフォークしますか?フォークがどのブランチに基づいているかを知るにはどうすればよいですか?つまり、どのブランチが私のPCにダウンロードされますか?


1
簡単な英語の説明:ブランチは、親フォークからのフォークのようなものです。フォークは、親ブランチがないブランチのようなものです。
ケンケン

回答:


41

GitHubのすべてのブランチがフォークにコピーされます。(明らかに、これにはそもそもGitHubにプッシュされなかったブランチは含まれません。)

しかし、フォークはGitHub-to-GitHubオペレーションです。PCには何もコピーされません。Git クローンとはまったく同じではありません。「プロジェクトを複製すると何がコピーされるのか」と質問する場合は、のマニュアルを参照してくださいgit-clone(1)


153

次のように考えてください。

リポジトリは、1つ以上のブランチにわたるチームの共同作業に対応します。すべての寄稿者は、独自のコピーを持っています。

メインリポジトリの各フォークは、寄稿者の作業に対応しています。フォークは、実際にはユーザーアカウントにリポジトリのクローンを格納するためのGithub(Gitではない)構造です。クローンとして、フォークを作成したときのメインリポジトリのすべてのブランチが含まれます。

フォーク内および/またはメインリポジトリ内の各ブランチは、作業方法に応じて、いくつかの種類のものに対応できます。各ブランチはプロジェクトのバージョンを参照できますが、修正プログラムや実験的な作業など、さまざまな開発チャネルにも対応できます。

プル要求(GitHubの生態系における)がタスクに対応します。分離された終了したタスクをメインリポジトリに提供するたびに、そのタスクで行われたコミットに対応するプルリクエストを作成します。これらのコミットは、私のフォークまたはブランチからメインリポジトリにプルされます。

Aは、コミットコードの変更のセットです。これはGitの最も興味深い点の1つです。ファイルを転送するのではなく、変更のログを転送します。


4
プルリクエストのfork / branchへのマッピングなど、関連するすべてのビットをどのように説明したかが気に入りました。「ファイルを転送せず、変更のログを転送する」...私はすでにそれを知っていましたが、このフレーズは完璧です!
harshvchawla

2
フォークがgitではなくgithubであることを明確にするためのプラスワン。ありがとう!
emery.noel

10

ForkはGitHub側のクローンです(すべてをクローンします)。
レポのクローンを作成すると、そのレポのすべての履歴が、そのすべてのブランチとともに取得されます。

理論的にはリモートリポジトリのデフォルトブランチを変更できますが、GitHubリポジトリからのクローンは主にマスターブランチを探します。GitHubクローンが取得する「デフォルト」ブランチを変更することを意味するので、マスターブランチの名前を変更する必要があります。


フォークしたレポのクローンを作成する(自分のPCに効果的にダウンロードする)と、すべてのブランチが自分のPCにあるのですか?しかし、1つのブランチに余分なファイルが追加されています。それで私のPCはそれらのファイルを持っているのでしょうか?
ジョナサン。

1
@ジョナサン:あなたのPCはすべてのブランチをすべてのファイルで取得します。ただし、実際には、作業ディレクトリ(これらのブランチの1つをチェックアウトするスペース)が、これらのファイルを表示する唯一のスペースになります。
VonC、2011

他のファイルは実際に.gitフォルダに保存されますか?
ジョナサン。

@ジョナサン:ルーズまたはパックされたオブジェクトとして、book.git-scm.com / 7_how_git_stores_objects.html(オブジェクトはblob(「ファイル」)である)、ツリー、コミットまたはタグを参照してください:book.git-scm.com/ 1_the_git_object_model.html
VonC

4

プロジェクトをフォークする場合は、プロジェクト全体のコピーをgit hubアカウントに作成しています。あなたはあなたのPCに何も対処していません

PCにコピーを作成するには、それを複製してすべてのものをプルする必要があります。そうすると、そのプロジェクトのすべてのブランチとコードを取得できます


2

Github Webサイトからプロジェクトのフォークを作成する場合、上流のプロジェクトからすべてのブランチを取得します。

新しく作成したフォークからローカルPCにクローンを作成するとorigin、PC のリモートがGithubのフォークのマスターブランチを指すようになります。


Help.GitHubページのForking a projectによると、ブランチの作成はupstreamあなたがしなければならないことです。その方法を教えてくれます。
JCサロモン

2
これはブランチではなくリモートです。
Arrowmaster

1

これは非常によく説明できます。GitHubに中央リポジトリがあります。パーソナルコンピュータでクローンを作成して変更を加えると、メインリポジトリのこのローカルクローンはフォークと呼ばれます。

ブランチは何か別のもので、fork / repoに含まれています。実際、ブランチは開発のさまざまな段階での作業です。これらは、一連の機能を保存したり、さまざまなユーザーにアクセス権を付与したり、サイトをクライアントにデモンストレーションしたりするために必要に応じて作成されます。


1

たちがブランチを使用するときとフォークを使用するときの実際の例を共有したいと思います

私たちのショップにはGitLabがあり、Laravelプロジェクトのパッケージで作業する必要がある場合があります。通常、ブランチを作成し、実際のLaravelプロジェクトで作業するときに、ローカルVM開発環境でテストしていたブランチに変更をプッシュします。

プロジェクトが次の場所にあるとしましょう

https://github.com/yardpenalty/mainproject.git

ブランチの使用:

ブランチが呼び出されたとしましょう It_doesnt_matter

プロダクションに必要な方法でブランチを作成したら、このブランチへの最後のプッシュを行い、マージリクエスト作成して、テストのためにUATに送信します。テストがQCを通過すると、変更がプロダクションにマージされます。

ブランチからのマージがマスタープロジェクトにプッシュされるようになりましたIt_doesnt_matter

https://github.com/yardpenalty/mainproject.git

パッケージプロジェクトが次の場所にあるとしましょう

https://github.com/yardpenalty/mypackage.git

メインプロジェクトはこのパッケージを本番環境で使用するため、(他の理由の中で)単にこのパッケージにプッシュするだけでは変更を加えることができないことに注意してください。Web開発者がこのパッケージを編集して本番環境に変更を加える必要があるとします。

パッケージを公開しないと変更を確認できないため、単純なブランチも機能しません。

フォークの使用法: ここで、パッケージを少し細工して、フォークを介して製品パッケージのクローンを作成する必要があります。composer.jsonファイルは、ユーザーまたはグループのパスにあるフォークを指すように更新できます。

でフォークを作成します https://github.com/yardpenalty/mypackage.git

それを呼ぶ https://github.com/yardpenalty/yards/mypackage.git

これで、composer.jsonファイルを更新して、「リポジトリ」内のこのパッケージを指すようにすることができます。

 {
            "type": "github",
            "url": "https://github.com/yardpenalty/yard/mypackage.git"
 }

]

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