1

TortoiseHG 2.6 を搭載したウィンドウ 7 と TortoiseHG 1.5 を搭載した Linux の 2 台のマシンがあります。中央リポジトリを保持するための Web サイトとして bitbucket を使用しています。ウィンドウ マシンは bitbucket ユーザー アカウントの Cassie-win に関連付けられ、Linux マシンは bitbucket ユーザー アカウントの Cassie-linux に関連付けられます。これが私が実行した手順です。

  • butbucket Cassie-linux アカウントで空の集中リポジトリを作成しました
  • Linux マシンで file1.txt と file2.txt の 2 つのファイルをローカルに作成し、Cassie-linux アカウントにプッシュします。
  • ユーザー Cassie-win をリポジトリに追加します
  • リポジトリをウィンドウ マシンに複製し、そこで file2.txt を変更して、中央リポジトリにプッシュします。
  • 一方、Linux マシン上にある file2.txt にもいくつか変更を加え、ローカルにコミットします。
  • 次に、Cassie-linux アカウントの中央リポジトリからローカルの Linux マシンに変更をプルします。file2.txt の内容が異なるため、私の Linux ローカル リポジトリには 2 つのヘッドがあり、それらをマージしたいと考えています。

Linux マシンで TortoiseHG の「マージ」ツールを使用して、これら 2 つのヘッドをマージしました。しかし、それは失敗し続けました。何百回も試しましたが、どこが間違っているのかわかりませんでした。file1 と file2 はどちらも 3 行しかないテスト ファイルです。また、コマンド「hg resolve file2.txt」を使用してエラーを確認しました。ただし、マージが失敗したことを示すだけで、多くの情報は表示されませんでした。TortoiseHG マージ ツールを使用して 2 つの頭をマージする方法を知っている人はいますか? そして、TortoiseHG が 2 つの頭をマージするのを止めるには何が問題なのでしょうか?

TortoiseHg 1.5 を搭載した Linux マシンで撮ったスクリーンショットを埋め込みました。
ここに画像の説明を入力

「Cassie-winアカウントから」を右クリックすると、「マージ」オプションがあります。次に、「マージ」ツールで「マージ」オプションをクリックしましたが、以下のようなエラー メッセージが表示されて失敗しました。 ここに画像の説明を入力

どうもありがとうございました、

4

3 に答える 3

1

まず最初に: マージは新しいファイル バージョンを作成するだけです。他のレポクローンに表示またはプッシュできるようにするには、コミットする必要があります。

マージを実行していて、同じ行または隣接する行が両方のマージの親で変更されている場合、自動マージは成功せず、各競合ポイントで何を行うかを選択するよう求められます。Kdiff3Windows でファイルをマージするために TortoiseHG が使用するツールはそれほど直感的ではないため、概要を以下に示します。

  1. マージするファイルが複数ある場合は、ディレクトリ コントロールが表示されます。ファイルの 1 つに移動して開き、2 つのファイル バージョンを並べて表示します。

  2. 状況によっては、[Merge this file] ([Merge] メニューとツールバー) をアクティブにする必要がある場合があります。これにより、他の 2 つの下に 3 番目のバージョンのファイル (マージ結果) が表示されます。

  3. 変更から変更へと移動し、AおよびBボタンをクリックして、使用する変更を選択できるようになりました。ボタンはトグルであり、両方を同時にアクティブ化できることに注意してください (両方のバージョンをマージにインポートするため)。また、自動的にマージできる差分も表示されることに注意してください。一般に、それらはそのままにしておくことができます (次の未解決の差分に直接移動するナビゲーション ボタンがあります)。

これらすべての作業方法を理解し、各差分のバージョンを選択したら、保存して次のファイルに進むことができます。完了すると、マージをコミットする準備が整います。

編集: Linux側でこれを行う必要があり、Kdiff3. では、昔ながらの方法で実行します。コマンドラインと通常のエディターを使用します。

  1. マージが失敗すると、競合するファイルは両方のリビジョンを含むコンテキスト diff に変わります。お気に入りのエディターで開き、慎重に見て、必要なクリーンで使用可能なファイルが得られるまで、各 context-diff 領域をクリーンアップします (それらが表示されるとわかります)。

  2. 終了し、コマンド ラインにドロップして、 と入力しhg resolve -m file2.txtます。これにより、競合のリストからファイルが削除されます。

  3. 競合するすべてのファイル ( で一覧表示できますhg resolve -l) に対してこれを行うと、コミットが許可され、問題は解決します。

PS。持っているマージ ツールが気に入らない場合は、kdiff3 をインストールすることを検討してください ( linuxで使用できますが、うまく機能するかどうかはわかりません)、またはp4merge@LazyBadger が示唆するように。

于 2012-12-08T13:38:05.497 に答える
1

TortoiseHg の「マージ」とは、作業ディレクトリを別のヘッドに更新した後、一方のヘッドのコンテキスト メニューから「ローカルとマージ」を試みたということですか? その場合は、ウィザードがマージの手順を案内しているはずです。TortoiseHg は、2 つの頭を自動的にマージできない場合、ユーザーが介入することを期待します。それを行うように求められたら、「Mercurial Resolve」や「Tool Resolve」などのいくつかのオプションがあります。マージが「失敗」したときに表示されるエラーの詳細を投稿していただければ、さらに役立つ可能性があります。

于 2012-12-08T04:32:52.393 に答える
0

補足事項

  1. 「Bitbucket-in-the-middle」なしでホスト間でデータを交換できます:hg serve両方のホストとhg pull <PARTY>反対側だけです。
  2. 両方のホストから単一の BB アカウントを使用し (BB 側での管理が少ない)、Bitbucket インターフェースのすべての変更セットのソースを、変更セットのユーザー名のみで区別することができます。

マージの問題に

(任意のSCM で) 2 つの分岐したコーディング行をマージしようとすると、2 つのケースが考えられます。

  • 独立した変更は重複せず、ユーザーの介入なしに共通の子孫に結合できます。このケースのマージが「ちょうど起こる」場合
  • 変更が交差しており、一部の文字列が競合状態にあります。つまり、一部の古いデータに対して 2 つの異なる変更があります。この場合、ユーザーの選択が必要であり、SCM または競合する部分がマークされたマージ結果を保存する (適切なユーザー アクションの前にマージが失敗および未完了であることに注意してください) か、ユーザー定義のマージ リゾルバーを実行します(「ビジュアル マージ ツール」を参照)。

あなたの状況では、明らかに、彼には2番目のケースがあります.merge-sourcesの3からのいくつかの文字列が競合しており、TortoiseHG Diff/Mergeツールで設定していません( TortoiseHG- Global Setting- TortoiseHG)

これらのツールを持って追加することは、将来にとって最良の選択です。これで、競合するファイルを手動で編集し、競合する行で正しいデータを選択し、競合を解決済みとしてマークし (ファイルの TortoiseHG コンテキスト メニューをチェックします)、一時ファイルを削除し、最後にマージをコミットします。

ここに画像の説明を入力

于 2012-12-08T13:44:57.390 に答える