2012-01-17 9 views
2

新しいフローにはそれぞれ独自のブランチがあり、完了したらデフォルトブランチにマージされる開発フローを実装しています。問題は、新しいリポジトリでの最初のコミットが最初の機能ブランチで行われることです。プッシュされると、フィーチャーブランチがデフォルトになります。そのブランチに関連付けられているチェンジセットがないので、「default」というブランチはありません。明らかに、これは機能ブランチを(存在しない)デフォルトブランチにマージするときに問題になります。最初のコミットが別のブランチにあるときのデフォルトブランチの維持

私に発生した唯一の解決策は、まず、我々は他のすべての枝の親である「デフォルト」と呼ばれる枝を持っているように、新しいプロジェクトが開始されるたびに慣例としてデフォルトにコミットすることです。ダミーコミットを必要としない、これを行うよりきれいな方法がありますか(例えば、「デフォルトで空のチェンジセットをコミットする」など)?

答えて

2

私は2つの可能性(アカウントに設定がメインの開発ブランチとしてdefaultを維持することをお勧めしますマーティンの答えを取る)を見ることができます。

マーティンは既にカバーしているので、新しいリポジトリで最初に行う作業は「初期設定」です。通常これには標準テンプレート.hgignoreファイルが含まれている場合があります。ちなみに私は、これはより良いオプション...あなたはすでに別の名前のブランチにコミットしている場合

他のオプションがそれに続いて、(作業ディレクトリを空に)nullチェンジにmergeを更新することであるであることがわかりました。これにより、 "default"というブランチが作成されます。

まず、開発ブランチ上のいくつかの作業やる:

C:\tmp\test>hg init . 
C:\tmp\test>hg branch devbranch 
marked working directory as branch devbranch 

C:\tmp\test>echo something > out.txt 
C:\tmp\test>hg add . 
adding out.txt 

C:\tmp\test>hg commit -m "some work" 
C:\tmp\test>hg log 
changeset: 0:4631a4a10552 
branch:  devbranch 
tag:   tip 
summary:  some work 

をここでは、私たちのdevbranchブランチにコミットシングルを持っています。作業が完了したら(この場合は偶然ですが)、作業を合併して(存在しない)defaultブランチに戻します。だから我々はnull前にマージを行うに更新します。あなたが見ることができるように

C:\tmp\test>hg update null 
0 files updated, 0 files merged, 1 files removed, 0 files unresolved 

C:\tmp\test>hg merge devbranch 
1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
(branch merge, don't forget to commit) 

C:\tmp\test>hg commit -m "merged" 
C:\tmp\test>hg log 
changeset: 1:55e879b67c69 
tag:   tip 
parent:  -1:000000000000 
parent:  0:4631a4a10552 
summary:  merged 

changeset: 0:4631a4a10552 
branch:  devbranch 
summary:  some work 

C:\tmp\test>hg branches 
default      1:55e879b67c69 
devbranch      0:4631a4a10552 (inactive) 

、ブランチdefaultは、二つの両親、-10を持つその枝の最初のチェンジセットを使用して作成されます。この後、defaultブランチのヒントをマージしたいときに更新するだけです。hg update nullは初めて実行されます。

+0

これは私の質問に対するより文字通りの答えなので、私はこれを受け入れています。実際には、フィーチャを操作する前にデフォルトのブランチにコミットするボイラープレート、設定ファイル、READMEなどがある可能性が高いと私はMartinに同意します。しかし、後でデフォルトにマージできるようにする必要はないことを知ってうれしいです。 –

+0

この回答をお寄せいただきありがとうございます!私が私のことを書いたときにあなたが本当に望んでいたことについて私は少し疑問だった。 'hg branch default'を使ってデフォルトのブランチを作成することもできます。私が見る限り、' null'に更新してファンキーなマージを行う必要はありません:-)通常のチェンジセットは、親。マージチェンジセットは2つの非ヌルチェンジセットを親として持っています。最初の親として 'null'を持つ通常のチェンジセットを作成しました。結果は、 'hg branch default 'の後に' hg commit'を続けても本当に違いはありません。 –

+0

ああ。私はデフォルトブランチが 'hgブランチのデフォルト'の後に非ヌルの親で終わるという事実は気に入らなかった。もちろん、nullとマージした後もそうです。とにかく、私はこのディスカッションからhgについてもう少し学びました。これはすばらしいことです。実際には、分岐する前に何かをデフォルトにすることを確実にしています。 –

3

Mercurialはdefaultブランチを使用せずに働くことができますが、お勧めしません。私たちのwiki pageは言う:

MercurialのメインブランチはHEAD」、「デフォルト」と呼ばれ、SVNの「トランク」に類似していている

あなたのメイン開発ブランチにデフォルト以外の名前を使用しないでくださいCVSでは "master"、Gitでは "master"です。新しいクローンによってチェックアウトされたブランチです。あなたの "メイン"ブランチに他の名前を使用しようとすると、間違った場所にあるものをクローンしてコミットすると、ユーザは多かれ少なかれランダムなブランチになります。これは一般的に望ましくありません。

したがって、defaultブランチをメイン開発ブランチにするようにしてください。

「すべての時間」の機能ブランチで作業したい場合は、プロジェクトを開始するときにdefaultブランチで2回コミットすることをお勧めします。ほとんどのプロジェクトでは一般的なセットアップが必要なので、私はそれが奇妙で奇妙なものになるとは思わない。

関連する問題