これは、
Hg Initシリーズのパート5です。JoelSpolsky
Mercurialチュートリアル 。 前のパーツ:
合併によって競合が生じる場合があります。 通常、これらは簡単に解決できます。 いずれにせよ、それらは解決する必要があります。そうしないと、いくつかの目標があります。 そして誰がそれを必要としますか?
パート5.合併プロセス
同じコード上で複数の人々の協調作業を保証することは、バージョン管理システムの重要な機能です。
ローズと私がワカモレのレシピに変更を加えたいと想像してください。 ローズは高品質のアボカドに取り組んでいます。 開始する前に、彼女は作業ディレクトリを更新し、中央リポジトリから新しい変更を引き出します。
ちょっとした編集:
変更をキャプチャし、中央リポジトリにプッシュします。
同時に、ファイルの別の部分に変更を加えます。
コミットできますが、変更を中央リポジトリにプッシュできません。
これはおそらくMercurialで最も有用でないエラーメッセージです。 この方法の方が良いでしょう:
だから私はやる:
どの変更が受信されたかを知りたいですか? これには便利な方法があり
hg log -P .
コマンド
hg log -P .
確かに、これらはRoseが行った変更です。 そして今、私のリポジトリには何がありますか?
私のリポジトリにはいくつかの目標があります。 基本的に、私のリポジトリは次のようになります。
2つの頭が見えますか? ローザが彼女の変更を7番目の変更セットで機能させたために現れました。また、私も同じセットで変更を行いました。 したがって、マージが必要になりました。 [編集者は受動態を使用しないように促します]
私はマージをしなければなりません。
合併チームである
hg merge
、2つの頭を取り、それらを結合しました。 その後、彼女は私の作業ディレクトリに結果を入れました。 彼女は彼を犯さなかった。 これにより、マージ結果が正しいことを確認できます。
真実のように聞こえます:アボカドと
ハラペーニョのペッパーを
持っています 。 そのため、変更をコミットしてサーバーにプッシュします。
2つの変更セットをプッシュします。ハラペーニョの変更とマージの結果であり、これも一連の変更です。
ローザと私はレシピのさまざまな部分で作業したため、変更に矛盾はなかったことに注意してください。 合併は非常に単純だったからです。 これが最も一般的な状況です。ほとんどの組織では、さまざまなプログラマがコードのさまざまな部分で作業しているためです。
時々、誰も彼の拳でテーブルにヒットする準備ができておらず、それでも責任の領域を分割する奇妙な組織があります。 これは、プログラマーの間で予期せぬ、しばしば不可解な悲しみを引き起こす可能性があります。 この状況を認識するのは簡単ではありません。 しかし、症状があります:プログラマーがトイレに近づいている、プログラマーがサーバールームに近づいている、スタッフの離職率が高い、部屋でのむせむようなすすり泣く音、アサルトライフルの複数のショットによる鼓膜への予期しない損傷。
しかし、最高のリーダーシップを持つ最高の組織であっても、マージの競合が発生することがあり、Mercurialは競合を解決するためにマージを必要とします。 これがどのように行われるかを見てみましょう。
そもそも...ローズにハラペーニョに関する私の変化を知ってもらいたい:
次に、実際の競合が発生したときに何が起こるかを確認します。どちらも、食材を少し台無しにします。
バナナを追加しました:
そして、最初に変更を記録します。
そして神様、許してくれたローズは、レシピの同じ場所にマンゴを加えました。
「成熟した」マンゴー、私は冗談ではありません。
今回は変更を最初に記録したので、Roseは合併に対処する必要があります。 ハハ
そして突然、競合が明らかになり、いくつかのプログラムのウィンドウがポップアップし、このプログラムの母親だけが好むようなひどいインターフェースとの競合を解決します。 しかし、プログラムは通常、意図されたものを非常にうまく処理します。その仕組みを理解する必要があります。 現在の最も一般的な競合解決プログラムはKDiff3であるため、Roseは次のように表示されます。
KDiff3には、4つのパネルがあります。 左上は元のファイルです。 中央上部には、ローザのファイルのバージョンが表示されます。 右上に私のバージョンのRoseが表示されます。 下部のパネルは、競合が解決されると、Rosaが結果のファイルを収集するエディターです。
競合の解決は非常に簡単です。 すべての競合を調べて、それぞれの競合を解決する方法を選択する必要があります。 ローザは夢中になり、バナナマンゴーワカモレはそれほど悪くないことを決定しました。
ちなみに、ローズは誰かと付き合っているようだと言ったのですか? 彼女は
デニス・フランツのような男と仕事を辞めるのを見たことがあります。 そのような気分で、彼女は長い間見られなかった。
Roseは変更を保存し、KDiff3を閉じます。
そして、競合は解決されました。
覚えておくべきことは次のとおりです。マージする必要はなく、誰かのスケジュールに合わせます。 必要なときにいつでも
hg pull
を実行できます。競合をすぐに解決したくない場合は、マージする時間を見つけるまで自由に作業を続け、喜んでコミットできます。
自分でテストする
このパートを読んだ後にできることは次のとおりです。
- 他の人と一緒にコードを操作します。
- 変更を受け取ります。
- 変更をプッシュします。
- 時々発生する競合を解決します。
- ある種のプログラマーの憂鬱を診断します。
最後の部分は次のとおりです。
Hg Init:パート6.リポジトリアーキテクチャ