После запуска "hg update" -> Не найден инструмент для слияния MyClass.class: Сохранить (l) ocal или взять (o) еще? - PullRequest
2 голосов
/ 30 августа 2010

Я вернулся, чтобы взглянуть на более раннюю редакцию, выполнив:

hg update -r 10

Затем я хотел вернуться к подсказке, выполнив:

hg update

Нополучил это сообщение и не знаю, как на него ответить:

tool kdiff3 can't handle binary
tool tortoisemerge can't handle binary
tool winmergeu can't handle binary
tool docdiff can't handle binary
no tool found to merge target/classes/com/mypackage/MyClass.class
keep (l)ocal or take (o)ther?

1 Ответ

6 голосов
/ 30 августа 2010

Основная проблема заключается в том, что в вашем хранилище .class файлов.

Это двоичные файлы, и, поскольку Mercurial считает, что вы изменили его, почти наверняка это результат компиляции кода, который вы также имеете в своем хранилище.

Сохранение двоичных файлов в хранилище - это хорошо, если эти файлы считаются «из внешних источников», например, библиотеки или еще что-то, что вы загружаете и хотите сохранить вместе с исходным кодом.

Однако выходные данные компиляции исходного кода в хранилище не должны храниться в хранилище, так как это приведет к таким же проблемам, как у вас сейчас.

По сути, это говорит о том, что после обновления до более старой версии этот конкретный файл изменился, и теперь он больше не идентичен файлу, который был в вашем хранилище для этой более старой версии.

И затем он спрашивает вас, хотите ли вы сохранить измененную копию или обновить ее до новой, имеющейся в хранилище. «Локальный» здесь означает «измененная версия из старой версии репозитория», а «другой» означает «новая версия в репозитории».

Я бы ответил O за другое в этом случае, но я бы также попытался полностью избавиться от этих файлов .class из хранилища.


Примером того, почему это происходит, может быть то, что у вас есть следующий сценарий (обратите внимание, что я не являюсь Java-разработчиком, поэтому я могу получить точную информацию о Java неправильно):

Редакция 1, вы делаете:

  • TestClass.java
  • TestClass.class (результат компиляции TestClass.java)

Редакция 2, вы делаете:

  • TestClass.java (с некоторыми изменениями из ревизии 1)
  • TestClass.class (опять же, результат компиляции нового TestClass.java)

Затем вы обновляетесь до версии 1:

  • Восстановить TestClass.java из ревизии 1
  • Восстановить TestClass.class из ревизии 1

Затем вы компилируете:

  • Создайте новый TestClass.class, тот же исходный код, но, вероятно, содержит такие вещи, как временные метки компиляции, которые делают двоичный файл другим, но семантически похожим

Затем вы пытаетесь обновить резервную копию до версии 2:

  • Конфликт слияния для TestClass.class из-за того, что он является двоичным

Вот командный файл (для Windows), который будет воспроизводить ваш случай:

@echo off
setlocal

rd /s /q test
md test
cd test

hg init .

rem ------------------------------------
rem Add .CS file and compile it
rem Producing main.exe
echo class Program { public static void Main() { } }>main.cs
csc /target:exe main.cs

hg addremove
hg commit -m "1"

rem ------------------------------------
rem Change and recompile and commit
echo class Program2 { public static void Main() { } }>main.cs
csc /target:exe main.cs

hg addremove
hg commit -m "2"

rem ------------------------------------
rem Update back to revision 1
hg update 0

rem ------------------------------------
rem Compile
csc /target:exe main.cs

rem ------------------------------------
rem Try to update up to revision 2
hg update 1

Выход:

[C:\Temp] :test
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Copyright (C) Microsoft Corporation. All rights reserved.

adding main.cs
adding main.exe
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Copyright (C) Microsoft Corporation. All rights reserved.

2 files updated, 0 files merged, 0 files removed, 0 files unresolved
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Copyright (C) Microsoft Corporation. All rights reserved.

tool beyondcompare3 can't handle binary
tool bcomp can't handle binary
tool beyondcompare3 can't handle binary
tool kdiff3 can't handle binary
tool diffmerge can't handle binary
tool tortoisemerge can't handle binary
tool docdiff can't handle binary
 no tool found to merge main.exe
keep (l)ocal or take (o)ther? interrupted!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...