2

私は成功したgitモデル( git flow )についての投稿を読んだり、読み直したりしてきましたが、開発ブランチで作業するときにいくつかのことについて混乱しています。彼は言う:

新しい機能の作業を開始するときは、開発ブランチから分岐します。

$ git checkout -b myfeaturedevelop

  1. 彼はどのブランチから始めていますか?私がチェックアウトした「開発」ブランチ?
  2. 「myfeature」の後の「develop」は、ローカルの「develop」ブランチまたはリモートの「origin / development」ブランチを追跡しますか?
  3. 'myfeature'を作成するときに'develop'ブランチで開始する場合、最後に'develop'が必要ですか?
  4. 'myfeature'は開発ブランチの現在のHEADをコピーしますか?
  5. 開発サーバーで変更を確認したいだけの場合、ローカル開発またはリモート開発にマージする必要がありますか?

私は頭を包み込もうとしています-もう一度読んで、このモデルに基づいたスクリーンキャストを見つけてください。

4

3 に答える 3

3
  1. 彼は明示的にベースコミット()を設定しているので、問題ではありませんdevelop。コマンドが実行された後、myfeature以前にチェックアウトされたものに関係なく、彼はブランチにいます。

  2. developおそらく追跡するローカルブランチorigin/develop、リモート追跡ブランチです。

  3. いいえ。git checkout -b myfeature、明示的な開始点がない場合、に新しいブランチが作成されますHEADdevelopブランチの先端にいる場合は、myfeatureに基づいていdevelopます。

  4. ではない正確に。myfeature参照の先端と同じコミットをdevelop参照します。「コピー」されるものはありません。myfeatureチェックアウト中に変更をコミットすると、myfeatureヒントが新しいコミットに更新されます。develop変更されません。

  5. リモートロケーションで変更を確認する場合は、リモートロケーションにプッシュする必要があります。ローカルブランチにマージするだけでは、リモート側には何も起こりません。

    git-flowスタイルで機能を「完成」させたい場合は、開発セクションに完成した機能を組み込むことをお勧めします。に切り替えdevelop、マージしmyfeature、削除し、更新された機能myfeatureをにプッシュします。developorigin

[e]その他の回答:

  • 開発内から分岐する場合、それは実行するのと同じです。git checkout -b myfeatureは、開発中でないときに開発しますか?

developどちらの場合も、新しいブランチはから始まります。(git branch同じように機能しますが、新しいブランチに切り替わらない点が異なりますgit checkout -b。)

  • そして、myfeatureを終了するには、develop> git pull> git merge myfeature> git push origin(別名origin / development)をチェックアウトしますか?

大まかに言って、git push origin必ずしも「別名起源/開発」ではありません。デフォルトgit push originでは、同じ名前の(または追跡するように設定されている)すべてのローカルブランチを元のブランチにプッシュします。(デフォルトはpush.defaultconfig設定で変更できます。)git push origin developローカルの開発ブランチだけをオリジンの開発ブランチにプッシュします。これは必要なものです。

  • マージの前にプルしないと、他の人が行った新しいコミットを上書きするリスクがありますよね?

プッシュを強制する場合のみ(真剣に、それを行わないでください)。マージ後にプルを実行できますが、基本的に2回マージすることになります。最初にプルを実行する方がうまくいきますが、そうしないとデータが失われるリスクはありません。

  • 開発をmyfeatureにマージする時期はありますか?

もちろん、他の誰かが更新をプッシュしていてorigin/develop、その変更を組み込みたい場合。基本的に、機能ブランチを最新の状態に保ちたいが、にマージdevelopするmyfeature準備ができていない場合は、にマージしdevelopます。

  • そして、myfeatureはすべてリリースブランチにマージされますか、それとも常に開発に戻る必要がありますか?

git-flowシステムでは、myfeatureは常にに戻る必要がdevelopあり、リリースブランチは常にから始まりdevelopます。develop統合テスト、リリース候補など、外部に公開する準備ができている変更のブランチであると同時に、プロジェクトの開発の現在の状態を表すブランチであると想定されています。それはすべての新しいものの出発点です。myfeatureあなたはブランチといくつかのランダムリリースブランチであなたの仕事を終わらせたくはありませんが、メインdevelopラインではありません。

于 2012-06-08T00:35:21.623 に答える
0

明示的な開始点を使用する場合、現在どのブランチにいるかは関係ありません。構文は次のとおりです。

git branch <branchname> [<start-point>]

開始点を指定しない場合、gitは現在使用しているブランチから分岐します。ただし、明示的な開始点を使用すると、.git / refs/headsにリストされている任意のヘッドから新しいブランチを作成できます。

残りは:

  • 開発は、オリジン/開発の追跡ブランチである必要があります。
  • いくつかのコミットを行うまでコミット参照ポインターは同一であるため、履歴を視覚化すると、新しい機能ブランチは最初は開発の同義語のように見えます。
  • リスト項目5は、現在の質問の範囲外です。別の人に聞いてください。:)
于 2012-06-08T00:10:58.670 に答える
0

ここでは非常に遅くなりますが、参照したモデルが多くの人に悪い習慣であると見なされている可能性を考慮する必要があります。このブログ投稿を参照してください。

この要点は、非分散バージョン管理システムに似た分岐モデルにGITを使用できる一方で、そうする必要があるという意味ではないということです。そうする予定がある場合は、そもそもGITを選択したかどうかを自問してください。早送りなしでのマージは、GITが提供する多くの利点/ツールを奪うものとして特に批判されています。

まだ意見はありません。私はこれらすべてのものを自分で消化しているだけです。

于 2014-03-11T02:23:31.473 に答える