2011-12-20 16 views
4

はそれHgの標準コミットプロセスとは何ですか?

  1. プル
  2. 更新
  3. マージ
  4. コミット
  5. プッシュ

ですか?または、最初にコミットできますか?

マージが爆発した場合に私のローカルコードのバージョンをどこかにバックアップせずにプルしてマージするというのは好きではありませんが、プッシュを行う前にマージする必要があります。中央リポジトリに矛盾があります。この全過程をまだ理解していない。私の素敵なシンプルなSVNに慣れました。

答えて

8

によって承認されたときに、あなたの変更と変更が作業ディレクトリにマージすることを100%確信していない限り、私は、常にあなたの作業ディレクトリへの変更に引っ張って前にコミットすることをお勧めします矛盾しない。

更新プル(hg pull; hg update、またはそれより短くはhg -u pull)を実行して、コミットされていないコミット済みの変更を行った場合、外部からの変更はすべて変更と組み合わされます。競合が発生した場合、マージ結果がどのように見えるかを決めるのは難しいかもしれません。

最初にコミットしたときは、マージの結果をどのように表示するかは、マージの両方の親を常に見ることができるためです。 だから、実際にはそれがある:

  1. hg commit
  2. hg pull -u(なしマージ必要に応じて、5に進みます)
  3. hg merge
  4. hg commit
  5. hg push

更新日: Martiとして

hg resolve --unmark the-file 
hg resolve --tool internal:local the-file 

または同時にすべてのファイルの

:まだ

hg resolve --unmark --all 
hg resolve --tool internal:local -all 

、私は見つけるのnガイスラーが指摘している、使用してファイルの「元」変更されたバージョンで入手することが可能です「最初にコミットする」システムはより良い。終わりに、それは

+1

アップデートを中止できないというのは間違いです。後で 'hg resolve'を使って古いファイルを元に戻すことができます。この驚くべき唯一の人ではありません。最近のスレッドhttp://markmail.org/message/izeibc7ixlwehwuf –

+0

@MartinGeislerこれは、競合するすべてのファイルに対して同時に実行できますか? –

+1

はい、 'hg resolve --all --tool internal:local'を使うと元のファイルをすべて元に戻すことができます。最初の 'hg update'を完全に元に戻す前に' hg update'する必要があります。あなたが更新する前にコミットするのがより簡単で安全だと言いますが、そうでなければ、あなたはまだあなたの背中を持っています:-) –

3

標準自体はありませんが、Mercurialの背後にあるアイデアの1つは、ローカルリポジトリに移動してから好きなだけ頻繁にコミットできることです。だからあなたはあなたが更新を取り出す前に、好きなだけあなたの心のコンテンツにコミットすることができます。

私は頻繁にコミットしない傾向があります。私がプッシュする準備をしているときは節約しますが、それは私です。私は早く頻繁にコミットすることの有用性を見ることができます。私は、マージの楽しみを減らすために、頻繁に更新を引きます。

私がやっているもう1つのことは、ファイルの元の状態を簡単にチェックできるように、自分の作業レポ(作業リポジトリと同じリポジトリからクローンされ、自分の作業レポからクローンされていないクローン)必要に応じて、現在の変更セットを複雑にすることなく、帯域外の緊急時の修正や予定をチェックすることができます。

+0

だからおそらく私が望むならばコミットをすることができますが、マージがあれば2回目をコミットしなければならないと思っています。 1つの "チェンジセット"の下に風が吹きますか? – mpen

+0

マージを別途コミットする必要があります。すべてのファイルがコミットされている場合は、マージしてから、マージをコミットする必要があります。変更がコミットされていない場合は、* can *マージする前にそれらをコミットしてから、マージをコミットする必要があります。私はそれらがすべてマージチェンジセットと呼ばれる1つのチェンジセットの一部になると信じています(誰かが間違っていると私を修正します)。 – RichW

+0

前半は良い練習だとは思わないので、本当に答えをアップアップすることはできません(申し訳ありませんが)が、アウトバンド修正のための並列クローンに関する部分は良いアドバイスです! –

2

いますが、中央レポ

間違った文と、分散ワークフローと並行開発の理解不足で競合を持つことができないので、おそらくあなたは、あなたがプッシュを行うことができます前に、マージを行う必要があります。

  1. あなたプッシュの前に頭をマージすることができますが、は持っているかはなりません。プッシュでは、必要な場合とそうでなければならない場合にデータを入れ替えることができます。

    デフォルトでは、複数のヘッドによって使用するヘッドが不明確になるため、プッシュでは宛先に新しいヘッドを作成できません。この 状況では、押す前に引っ張ってマージすることをお勧めします。

(NB:文「を引くと前にマージするを推奨」)

あなたがコミットプルマージ、隠しプルunstashマージを使用することができ、修正とフェッチを実行WCとオンザフライでマージ、すべてまたは散発的に頭をマージしないでくださいpush --force +1頭 - 誰も共通のルールはありません。そして、そのようなワークフローのすべては、 "中央リポジトリの競合"を生成しませんが、異なるDAGだけです。

あなたとあなた(あるいは中央)レポでcommmon親からチェンジを既存の場合に表示される発散の各点は、絶対にしている(技術的に)水銀、匿名の枝を開始する点です法律上、適用可能で通常の方法。彼らはどのように処理することはPM、QAチームと他の人が、私は、個人的に、それは引くとは多分をマージした後、(コミットの一つ以上の量で)自分のタスクを完了好む

、開発者間の政策との合意によって定義され、それは、開発ポリシー

Part of repo

+0

あなたが正しく私はそれを完全に理解していない、それが私が求めている理由です。あなたは最初にマージを行わずにプッシュをすることができると言っていますが、新しいヘッドを作りますか?私はそのグラフを読む方法を本当に理解しているとは思わない。私はそれらの行のそれぞれが別の枝であることを知っています、そして、私は彼らが再び接続するときにマージがあると思いますが、行が崩壊しないところにマージがあります。 – mpen

+0

そして私は誰もが同じプロセスを踏襲しているわけではないことを認識しています。そうでないと柔軟性があまり得られませんが、特定のプロセスが一般的であると思われます。同様に、たとえば、押して、マージしないたびに新しい頭を作成するのは習慣的ではありません。私はあなたがそれをしたいと思う唯一の時間は、迅速な修正が必要な場合や、矛盾する機能を開発している場合にそれらを個別にマージすることですが、それは標準ではありません。 – mpen

+0

はい、マージなしでプッシュすると、追加のヘッドが作成されます。あなたは**このスタイルを使うことができます**。私のグラフはわかりやすいです - 40回前の33回の改訂後、私のレポは2頭あり、43回後*はクローンで*できますが、すぐにマージされます。そして、すべての時間リポジトリ*ちょうど作品* –

3
  1. Doが
  2. は、あなたがしたい場合は&は
  3. プッシュをコミットマージ満足
  4. プルまで
  5. 後藤1をコミット編集...個人的な好みです。

マージのような複雑な操作を行う前に、確実にコミットしてください。私は水銀であなたがコミットする前にマージすることを許可しないと思うが、たとえそれがあったとしても、マージがうまくいかないとどうなるだろう。あなたは元に戻す前にマージリビジョンはありません。

早期コミット、頻繁にコミットします。

あなたがそうしなければ、あなたはDVCSの巨大な利益のために欠けています。

関連する問題