4

実行しhg mergeてからチェックアウトするhg statusと、何も印刷されないことがあります。また、他のブランチからの実際の変更が表示されることもあります。なぜそれが起こっているのですか?マージの違いを説明できますか?

この質問の要点は次のとおりです。Mercurial を Jira に接続し、各コミットにタスク ID が含まれている必要があり、そのような各コミットがプッシュされる前にコード レビューされることを強制します。ただし、「些細な」マージのレビューは必要ないため、コミット フックで次のチェックを行います。

if not ctx.files():
    return ALLOW_COMMIT

ctx.files()しかし、コミットは些細なこと (つまり、Mercurial がすべての作業を行い、競合を解決する必要はありませんでした) でもリストが空ではないという状況に遭遇しました。ただし、ほとんどの場合、問題なく動作します。ケースごとに例を投稿したかったのですが、2つの状況の違いがわかりません。

基本的に私は尋ねています: Mercurial のマージが些細なことであったことをどのように知ることができますか?

4

3 に答える 3

1

これは実際には、予想よりも難しい問題であることがわかります。1、2 年前、マージで導入された変更のみを表示する「マージ差分」を生成するプラグインを作成しようとしました: https://www.mercurial-scm.org/wiki/MergediffExtension

いくつかのバグがあります... しかし、空のマージ diff が表示される場合は、間違いなくマージが「些細な」ものであったことを意味します (ただし、差分が表示される些細なマージもあります)。

または、この質問/回答が役立つ場合があります: Mercurial で潜在的なマージ/リベースの競合を確認するにはどうすればよいですか?

于 2013-02-18T20:39:29.370 に答える
0

Why is that happening? Can you explain the differences between the merges?

  • If it was manual merge, merger can prefer only own changes and discard changes from merged branch, i.e have dummy merge (it can be also non-interactive merge with tool=internal:local)
  • Rare case - in both files changes (from common parent) may be identical, merge-target will not be changed in this case

PS: I don't know, what is ctx.files() in hook, but if it's "files, changed in changeset", disabling commit in case of existing such files is Bad Idea (tm) - files may be modified due to clean (no conflicts) merge and in this situation Martin's idea of replying merge and checking resolve-list seems as rather good approach

于 2013-04-21T01:47:58.650 に答える