web-dev-qa-db-ja.com

GitHubでの分岐と分岐

Githubプロジェクトをフォークすることとgithubプロジェクトのブランチを作成することの長所と短所についてもっと知りたいです。

私がオリジナルプロジェクトの共同編集者リストにいる必要はないので、フォークすることで私のバージョンのプロジェクトはオリジナルのものからより隔離されたものになります。私たちは社内でプロジェクトを開発しているので、人々を共同編集者として追加することに問題はありません。しかし、プロジェクトを分岐することでマージの変更をメインプロジェクトに戻すのが難しくなるかどうかを理解したいと思います。つまり、分岐によって2つのプロジェクトの同期が簡単になるのではないかと思います。つまり、分岐したときにメインプロジェクトのバージョンとメインプロジェクトの間で変更をマージしてプッシュする方が簡単ですか。

252
reprogrammer

特定のプロジェクトの共同編集者として登録されていないため、常にブランチを作成したり、既存のブランチをプルしてプッシュバックすることはできません。

分岐はGitHubサーバー側のクローンに過ぎません

  • 直接プッシュバックする可能性なしで
  • フォークキュー マージリクエストを管理する機能を追加

次のようにして、フォークを元のプロジェクトと同期させます。

  • 元のプロジェクトをリモートとして追加する
  • 元のプロジェクトから定期的に取得する
  • あなたが現在の開発をあなたがそのフェッチから更新された興味のあるブランチの上にリベースします。

リベースを使用すると、変更を簡単に(マージの競合を処理しないように)確実に行うことができます。元のプロジェクトの管理者が自分のプロジェクトにパッチを含める場合は、引っ張り要求がより簡単になります。

目標は、コラボレーションを許可することです。直接参加は必ずしも可能ではありません。


あなたがGitHub側でクローンを作成するという事実はあなたが今いることを意味しますtwo "central"レポジトリ( "central"は "共同"から見られる).
oneプロジェクトの共同編集者として直接追加できるのであれば、他のプロジェクトをフォークで管理する必要はありません。

fork on GitHub

マージエクスペリエンスはほぼ同じですが、追加の間接参照レベルがあります(最初のフォークをプッシュし、次にプルを要求します。元のリポジトリの進化のリスクにより、早送りマージは早送りできなくなります)。 。
つまり、正しいワークフローはgit pull --rebase upstream(上流からの新しいコミットの上に作業をリベースする)、そしてgit Push --force Originの順になり、自分のコミットが常にコミットの上になるように履歴を書き換えることです。元の(上流の)リポジトリから。

また見なさい:

260
VonC

高レベルの違いは次のとおりです。

フォーク

長所

  • ユーザーごとに分けられたブランチを保持
  • プライマリリポジトリの乱雑さを軽減
  • あなたのチームプロセスは外部の貢献者プロセスを反映しています

短所

  • アクティブな(または、それに関しては非アクティブな)すべてのブランチを見ることをより困難にします。
  • ブランチで共同作業するのは面倒です(フォークの所有者はその人を共同編集者として追加する必要があります)。
  • Git の複数のリモートの概念を理解する必要があります。
    • 追加のメンタルブックキーピングが必要
    • これはGitにあまり慣れていない人々にとってワークフローをより困難にするでしょう。

分岐

長所

  • プロジェクトに関して行われているすべての作業を1か所に保管
  • すべての共同編集者は同じブランチにプッシュして共同作業をすることができます
  • Gitリモコンは1つしかありません

短所

  • 放棄されたブランチはもっと簡単に積み重ねることができます
  • あなたのチーム貢献プロセスは外部貢献者プロセスと一致しません
  • チームメンバーをブランチにする前に、チームメンバーを貢献者として追加する必要があります。
61
Aidan Feldman

それはGitの一般的なワークフローと関係があります。メインプロジェクトのリポジトリに直接プッシュすることはできないでしょう。たとえば、GitHubプロジェクトのリポジトリがブランチベースのアクセス制御をサポートしているかどうかはわかりません。たとえば、マスタブランチへのプッシュを許可する権限を誰にも与えたくない場合があります。

一般的なパターンは次のとおりです。

  • 元のプロジェクトのリポジトリをフォークして自分のGitHubコピーを作成し、そこに変更をプッシュすることを許可します。
  • あなたのGitHubリポジトリをあなたのローカルマシンにクローンする
  • 必要に応じて、元のリポジトリをローカルリポジトリの追加のリモートリポジトリとして追加します。そうすれば、そのリポジトリで公開された変更を直接取得することができます。
  • あなたの変更とあなた自身のコミットをローカルで行ってください。
  • 変更をGitHubリポジトリにプッシュします(通常、プロジェクトのリポジトリに対する書き込み権限は直接付与されません)。
  • プロジェクトのメンテナに連絡してあなたの変更を取得してレビュー/マージしてもらい、彼らがプロジェクトのリポジトリにプッシュバックするようにしてください(あなたと彼らがそうしたい場合)。

これがないと、公共のプロジェクトが誰かに直接自分のコミットをプッシュさせることは珍しいことです。

44
Bruno

Forkingは既存のリポジトリから全く新しいリポジトリを作成します(単にgitHub/bitbucketでgit cloneをするだけです)

フォークが最もよく使用されます。「分割」の目的が論理的に独立したプロジェクトを作成することであり、それがその親と再結合することは決してないかもしれないときです。

ブランチ戦略は既存の/作業中のリポジトリの上に新しいブランチを作成します

ブランチは、ブランチをOriginとマージする目的で、機能を介して作業するための一時的な場所として作成される場合に最も使用されます。

より具体的には: - オープンソースプロジェクトでは、誰がリポジトリにプッシュできるかを決めるのはリポジトリの所有者です。しかし、オープンソースのアイデアは、誰でもプロジェクトに貢献できるということです。

この問題はフォークによって解決されます。開発者がオープンソースプロジェクト内の何かを変更したいときはいつでも、公式リポジトリを直接複製することはしません。代わりに、彼らはそれをフォークしてコピーを作成します。作業が完了すると、リポジトリの所有者が変更を確認してそれらを自分のプロジェクトにマージするかどうかを決定できるように、プル要求を行います。

基本的には分岐は機能分岐と似ていますが、分岐を作成する代わりにリポジトリのフォークを作成し、マージ要求を実行する代わりにプル要求を作成します。

以下のリンクは、よく説明された方法で違いを提供します。

https://blog.gitprime.com/the-definitive-guide-to-forks-and-branches-in-git/

https://buddy.works/blog/5-types-of-git-workflows

http://www.continuousagile.com/unblock/branching.html

2
srinivas y