web-dev-qa-db-ja.com

dvcs-「クローンからブランチ」は一般的なワークフローですか?

私は最近、同僚とdvcについて話し合っていました。これは、私たちのオフィスがTFSからの切り替えを検討し始めているためです(私たちはMSショップです)。その過程で、マーキュリアルを使っているのに「ブランチ」や「チェックアウト」のコマンドを聞いたことがなく、これらの用語は彼にはなじみがないと言ったので、私は非常に混乱しました。彼がそれらについて知らなかった可能性があるのか​​疑問に思い、dvcsブランチがローカルファイルでどのように「インプレース」で機能するかを説明した後、彼はかなり混乱しました。

彼は、TFSの動作と同様に、「ブランチ」を作成する場合はクローンを作成するため、リポジトリのコピー全体を持っていると説明しました。これは私には本当に奇妙に思えましたが、私が認めなければならない利点は、ファイルが別々であるため、2つのブランチを同時に見たり作業したりできることです。

多くのオンラインリソースがこの「クローンからブランチへ」の方法論を宣伝しているというコメントを見る前に、このサイトを検索してこれが尋ねられたかどうかを確認したところ、投稿者はがっかりしました。これは実際にdvcsコミュニティで一般的ですか?そして、このようにすることの賛否両論は何ですか?一度に複数のブランチを表示する必要がなく、切り替えが高速で、すべてのクローンがディスクをいっぱいにする必要がないため、これを行うことはありません。

9
Tesserex

両方のブランチを表示できるという一般的な長所/短所は別として、それを行うことにはMercurial固有の長所があると思います。

クローンを作成してブランチを作成する場合、変更を保持したくない場合は、後でクローンを削除できます。それらをマージすることにした場合、この方法で変更を分離することにしたという事実は、他の誰にも見えません。

対照的に、hg branchを使用して新しい名前付きブランチを作成する場合、ブランチ名はコミット時に履歴に記録され、他のすべてのユーザーに表示され、後で混乱を避けるためにかなり一意である必要があります。ブランチが実験的な機能を開発するためのものである場合、または変更が小さいことが判明する場合は、これは適切でない可能性があります。

名前付きブランチを使用してソフトウェアのリリースバージョンを維持し、それらを短期的な機能やバグ修正の開発にも使用する場合、これら2種類のブランチを分離する方法が(命名規則以外に)ないため、混乱しがちです。

http://Mercurial.selenic.com/wiki/StandardBranching これについて詳しく説明しています。 Mercurial 1.8以降、ブックマーク(hg bookmark)(短命のブランチの使い捨て名)を作成できることにも言及する価値があります。ブックマークは、プッシュ、プル、移動、削除できます。

3
benj

DVCSでコミットを行うたびに、技術的に履歴にブランチを作成します。それを祝福されたリポジトリにプッシュバックするたびに、統合します。興味深い部分があります。

  • コミット中に誰も変更を加えなかった場合、DAG(有向非巡回グラフ)のブランチのようには見えません。
  • コミット中に他の誰かが変更を加えた場合、DAGのブランチのように見えますが、名前はありません。

Bitbucket/githubの「フォーク」ボタンを覚えていますか?フォークは分岐の同義語と見なすことができ、「フォーク」ボタンが行うことは、アカウントへのそのリポジトリのクローンにすぎません。

「ブランチへのクローン作成」の唯一の利点は、履歴の2つのポイントで同時に作業できることです。そして、皮肉なことに、同僚にとっては、異なるブランチで同時に作業するための一般的なワークフローです(前後に移動する必要はありません)。

同僚に方法を学ぶように伝えてください ブランチ 、それは非常に簡単です、ここにチュートリアルがあります:

D:\>mkdir lol

D:\>cd lol

D:\lol>hg init

D:\lol>hg branch
default

D:\lol>touch lol

D:\lol>hg add lol

D:\lol>hg commit -m "lol"

D:\lol>hg branch lol
marked working directory as branch lol
(branches are permanent and global, did you want a bookmark?)

D:\lol>hg branches
default                        0:35d562fafaf2

D:\lol>echo "lol" > lol

D:\lol>hg commit -m "New lol branch"

D:\lol>hg branches
lol                            1:9384f923e78d
default                        0:35d562fafaf2 (inactive)

D:\lol>hg branch
lol

D:\lol>hg update default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

D:\lol>hg branch
default

D:\lol>hg update lol
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

D:\lol>hg branch
lol

D:\lol>hg update default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

D:\lol>hg branch
default

D:\lol>hg merge lol
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)

D:\lol>hg commit -m "lol merge"

D:\lol>hg branch
default

D:\lol>hg update lol
0 files updated, 0 files merged, 0 files removed, 0 files unresolved

D:\lol>hg branch
lol

「ブランチへのクローン作成」は、同時に異なるブランチで作業している場合、または履歴に永続的なブランチを作成せずに実験を試してみるで意味があります。 =それでも既存のブランチに統合することができます。

私は個人的にこの方法が好きではなく、必要に応じてブランチを作成して閉じることを好みます。ここで、これはあなたがそれを行う方法です:

D:\lol>hg branches
default                        2:46420aca1612
lol                            1:9384f923e78d (inactive)

D:\lol>hg branch
lol

D:\lol>hg commit --close-branch -m "Obai, glorious lol branch"

D:\lol>hg branches
default                        2:46420aca1612

D:\lol>hg branch
lol

D:\lol>hg update default
0 files updated, 0 files merged, 0 files removed, 0 files unresolved

D:\lol>hg branches
default                        2:46420aca1612

D:\lol>hg branches --closed
default                        2:46420aca1612
lol                            3:4b79c577e029 (closed)

これでDVCSブランチの疑問が解消されることを願っています。ここでは、ブランチはもう怖くありません。

2
dukeofgaming

コードがディスクをいっぱいにすることを個人的に心配することはありません...まず、それは単なるコードであり、次に、すべてのクローンを永久に保持することはありません。

この方法論は、多くのオンラインリソース、特にHgで宣伝されています。本番環境で使用されるのを見たことがありません。CI環境では、追加のリポジトリクローンよりも、短命の機能ブランチを持つことがはるかに一般的です。私はこれを行うことの利点を理解していません、どちらかといえばそれがあなたの歴史をより混乱させるでしょう、少なくはありません、そしてそれはあなたに何も得ません。新しいコードを古いコードと並べて確認したい場合は、差分/マージツールを使用して、2つのコミットを並べて確認できます。さらに、変更が強調表示されるという利点もあります。

0
philosodad