1

現在、2つのリポジトリがあります。1つのリポジトリは、という名前jstockで、すべての安定したソースコードが含まれています。

jstock-refactor-calendar-to-jodaから複製された、という名前の別のリポジトリjstockには、不安定な実験的機能コードがすべて含まれています。

赤い長方形のすべての変更セットは、不安定な実験的機能コードです。まだ完成していません。したがって、緑色の長方形の変更セットとマージするつもりはありません(緑色の長方形は、それらが安定した変更セットであることを示します)

jstock-refactor-calendar-to-jodaからプルした後jstock、次のようになります。 代替テキスト

ここで、実験的なコードを表示したいと思いますjstock(ただし、不安定なため、デフォルトの行には入りません)

jstock-refactor-calendar-to-jodaしたがって、からへのプッシュを実行するとjstock、次のようになります。 代替テキスト

これで、すべての不安定なコードがデフォルトの行に属します。

これは私が望むものではありません。ではjstock、安定したコード(緑色の長方形)がデフォルト(左側)のままで、不安定なコード(赤色の長方形)が右側に残っていることを望みます。まだマージしたくないのですが、両方の開発ライン(安定版と不安定版)を表示したいので注意してください。

私が間違ったことをしたステップはありますか?

4

4 に答える 4

3

これはMercurialメーリングリストにも投稿されており、以下は私の返信です:

ログビューア内の2つの(匿名の)ブランチの位置は重要ではありません。左側または右側はありません。順序は、プルとプッシュを行った順序にのみ依存します。

必要なのは、安定したブランチと不安定なブランチのチェンジセットにラベルを付けて、どちらがどちらかを追跡できるようにする方法です。これを行うには、主に3つの方法があります。

  • 個別のクローン:これは、異なるブランチ用に個別のクローンを保持する場合にすでに使用した簡単な方法です。

    クローンを削除するだけでチェンジセットを簡単に破棄できるという利点があります。

    チェンジセットが分離されたままであるため、何が起こっているのかを完全に把握できないという欠点があります。

  • 名前付きブランチ:まだ行っていない場合は、こちらのガイドを参照してください。

    http://mercurial.aragost.com/kick-start/en/tasks/

    名前付きブランチの利点は、チェンジセットにラベルを付けて、どこから来たのかを追跡できることです。'refactor-calendar-to-joda'という名前のブランチがある場合は、次のことができます。

    hg update refactor-calendar-to-joda
    

    作業コピーをそのブランチの先端に更新するため。ブランチで新しいコミットが行われると、ブランチの先端が移動するため、「refactor-calendar-to-joda」はフローティングタグと考えることができます。

    デフォルトのブランチに戻すには、次を実行します

     hg update default
    

    これは、通常の開発が行われるべき場所です。

    名前付きブランチは、長期間安定しているブランチや、名前が何年も後に意味をなすブランチに適しています。たとえば、バグトラッカーを使用する場合は、リファクタリングを追跡するバグを作成してから、ブランチ「バグXX」を呼び出すことをお勧めします。そうすれば、人々は将来、正しいバグ番号を検索できます。

  • ブックマーク:ブックマークはチェンジセットに名前を付け、名前付きブランチと同様に、ブックマークに更新できます。

    hg update refactor-calendar-to-joda
    

    ただし、名前付きブランチとは異なり、ブックマークはチェンジセットグラフの外部に存在します。それらはチェンジセット自体の一部ではないため、ブックマークの移動、削除、名前の変更などを行うことができます。リポジトリ間でブックマークをプッシュおよびプルできます。

したがって、長期的な永続的な名前には名前付きブランチを使用し、存続期間の短いブランチにはブックマークを使用し、物事を分離したい場合は個別のリポジトリを使用します。

最後に、このトピックの詳細については、このガイドを参照してください。

http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/

于 2010-12-15T16:14:50.227 に答える
2

この場合、複数のヘッドを作成したので、「力」をプッシュする必要があります。これらのヘッドは両方とも「デフォルト」ブランチにあります。これ自体は問題ありませんが、心配している問題は、新しいヘッド(不安定なコードを含む)がデフォルトのブランチの「ヒント」であるということです。

Mercurial FAQから:

先端は常に頭です。リポジトリに複数のヘッドがある場合、そのうちの1つだけがヒントになります。リポジトリ内では、チェンジセットには順番に番号が付けられるため、チップのシーケンス番号が最も高くなります。「チップ」という言葉は、チップチェンジセットを示す特別なタグとして機能し、チェンジセットIDまたはタグが有効な場所であればどこでも使用できます。

ラッセが示唆しているように、これらの変更を名前付きブランチにプッシュしたほうがよかったのですが、あなたは今いる場所にいます。この場合、あなた(またはこのリポジトリを初めてプルする人)は、デフォルトのブランチの安定した部分にあるように作業コピーを更新する必要があります。

hg update -r 12345

(ここで、12345は「通貨を制限する代わりに...」の改訂番号です。

すでにこのリポジトリを持っている開発者の場合、不安定な変更をプルすると、複数のヘッドが表示されますが、作業コピーは新しいブランチに自動的に更新されません。

于 2010-12-15T12:16:21.093 に答える
1

あなたがしたことは完全に大丈夫です。同じ名前のブランチ'default'に2つのヘッドがあります。これは完全に通常の作業方法です。これが何が起こっているかについてのかなりまともな説明です:

http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/#branching-anonymously

ニックが示唆しているように、すでにクローンを持っている人は引っ張ると新しい頭を手に入れ、新しくクローンを作った人は両方を手に入れます-そしてそれは問題ありません。

人々hg update defaultまたは単にhg update彼らがブランチの最新のチェンジセットに移動したときdefault、「通貨の小数点以下の桁数を制限する代わりに...」チェンジセットを親として次のようにもう1つコミットします。

hg update REVSION
...edit
hg commit

また、クローン/更新時に、必要な匿名ブランチに自動的に更新されます。

覚えておくべきことは、Mercurialはブランチに名前を付ける前に長い間存在していたため、名前付きブランチでできることはすべて匿名ブランチでできることです。

そのリポジトリに2つの未分化のヘッドがあると混乱しすぎると判断した場合は、ブックマークを確認することを検討してください。それらは匿名のブランチのヒントを追跡する粘着性のあるラベルです-永続的ではないという点で名前付きブランチよりも柔軟性があります。

http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/#branching-with-bookmarks

于 2010-12-15T16:19:14.453 に答える
-1

この場合、おそらくプッシュを待って、リポジトリ全体を利用できるようにする必要があります。

または、そのブランチを開始したときに、名前を付ける必要があります。名前のないブランチを複数持つことができ、すべて同じ名前のブランチに属します。

つまり、表示されているすべてのチェンジセットはdefaultブランチの一部ですが、ラベルはそのブランチの先端にのみ表示されます。新しいチェンジセットがヒントになっているので、UIにラベルが表示されます。

名前を付けた場合でも、デフォルトはデフォルトブランチの最上位のチェンジセットでダウンしています。

これを修正するには、これらのチェンジセットを1つずつ「再生」する必要があります。それを行う最善の方法はわかりませんが、新しいハッシュを取得すると言えば十分なので、これらのチェンジセットをプルした人​​は、デフォルトのブランチの一部としてそれらをプッシュバックするリスクがあります。

于 2010-12-14T18:04:55.467 に答える