Из жалости пропущены AnkhSvn diff, TFS-овский diffmerge.exe, Tortoise Merge и KDiff.
Наклёвывается весьма интересная вещь — CodeCompare, если в следующей бете наконец починят глючащий детект регионов — добавлю в список.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Calc
{
class Program1
{
static void Main(string[] args)
{
int count = 10 * 1000;
byte[] buffer = new byte[count];
Random rnd = new Random();
rnd.NextBytes(buffer);
long total = 0;
foreach (byte b in buffer)
{
total += b;
}
Console.WriteLine("AVG: {0}", total * 1.0 / buffer.Length);
Console.ReadKey();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Calc
{
class Program2
{
const int Count = 10 * 1000;
private static byte[] GetBytes()
{
byte[] buffer = new byte[Count];
new Random().NextBytes(buffer);
return buffer;
}
static void Main(string[] args)
{
byte[] buffer = GetBytes();
Console.WriteLine("AVG: {0}", GetAverage(buffer));
Console.ReadKey();
}
private static double GetAverage(byte[] buffer)
{
long total = 0;
foreach (byte b in buffer)
{
total += b;
}
return total * 1.0 / buffer.Length;
}
}
}
... и перетасовать (Program3.cs).
Скрытый текст
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Calc
{
class Program3
{
const int Count = 10 * 1000;
private static byte[] GetBytes()
{
byte[] buffer = new byte[Count];
new Random().NextBytes(buffer);
return buffer;
}
private static double GetAverage(byte[] buffer)
{
long total = 0;
foreach (byte b in buffer)
{
total += b;
}
return total * 1.0 / buffer.Length;
}
static void Main(string[] args)
{
byte[] buffer = GetBytes();
Console.WriteLine("AVG: {0}", GetAverage(buffer));
Console.ReadKey();
}
}
}
Результаты — на скриншотах.
Единственный (да и то условно) правильный дифф между Program1.cs и Program3.cs — старый добрый windiff. За ним толпятся Compare It!, Compare++, WinMerge, Beyond Compare и Araxis — у каждого свои глюки, так что явного победителя нет, порядок — по личным предпочтениям.
Из толпы слегка выбивается Compare It!, который а) иногда вспоминает про перемещённые строчки (а winmerge лучше бы про них и не вспоминал) и б) лучше остальных прожёвывает файлы c кучей изменений (доберусь до работы — скину примеры).
Чтоб сразу не переезжать в КСВ: что там ещё осталось из юзабельных diff/merge под win?
P.S. Off: когда уже [cut] и [s] добавят в редактор?
А зачем сравнивать последовательные модификации файла, когда в контексте vcs интересно, как отрабатытвается конкурентная модификация (ака 3-way merge)?
Здравствуйте, Mr.Cat, Вы писали:
MC>А зачем сравнивать последовательные модификации файла, когда в контексте vcs интересно, как отрабатытвается конкурентная модификация (ака 3-way merge)?
О май гад
Таки проверил 3-way merge, взяв Program1.cs за общего предка (ведь могли же 2 программиста написать код, отличающийся только порядком методов). Из умеющих справился только Beyond Compare, да и то получил 2 метода GetBytes() в результате. Нет уж, лучше по старинке
Из очередных пропущенных из жалости:
— Elliй (sic!) Computing Merge (юникод — это офигеть как сложно)
— Exam Diff
— MergePlant (автора убить табуреткой)
— и Deltopia DeltaWalker'10.
Здравствуйте, Sinix, Вы писали: S>(ведь могли же 2 программиста написать код, отличающийся только порядком методов)
Мне как-то сразу вспомнился анекдот про сибирских мужиков и японскую бензопилу.
На мой взгляд, таких ситуаций стоит (и можно) избегать.
Здравствуйте, Mr.Cat, Вы писали:
S>>(ведь могли же 2 программиста написать код, отличающийся только порядком методов) MC>Мне как-то сразу вспомнился анекдот про сибирских мужиков и японскую бензопилу.
В таком случае, WinDiff — русская пила на гусеницах и с атомным приводом. Он-то правильно всё распознал.
MC>На мой взгляд, таких ситуаций стоит (и можно) избегать.
Т.е. если бы методы ещё и различались, все остальные тулзы сразу бы исправились и начали бы правильно угадывать?
Но согласен, лучше таких проблем себе не создавать за отсутствием средств решения оных.
Здравствуйте, Jim_Hawkins, Вы писали:
J_H>http://www.compareandmerge.com/ J_H>Автор на RSDN бывает.
Увы, на Win7 x64 не завёлся. Постоянно выдавал
The operation could not be performed because your computer
has not enough free memory left.
Это с 4мя гигами памяти (из них 2,5 доступно). Зато триалы (ограничение по количеству сравнений, а не по срокам) считал за милую душу.
Отписался в саппорт.
Здравствуйте, Katowice, Вы писали:
K>Есть еще бесплатный SourceGear DiffMerge.
Пробовал. Также как
— Ultra Compare,
— Diffuse,
— ModelMaker[R] Structured Difference Viewer (интересен, но увы только вьювер).
У меня кажется собралась полная коллекция этих поделок.
Ничо-ничо, место пусто не бывает. Compare++ уже сейчас умеет обнаруживать и выравнивать методы, но только для cpp файлов. Обещают поддержку других языков. А там и остальные подтянутся.
Здравствуйте, Sinix, Вы писали:
S>Наклёвывается весьма интересная вещь — CodeCompare, если в следующей бете наконец починят глючащий детект регионов — добавлю в список.
UPD. Починили в 1.0.7. В субъективном рейтинге — в первой тройке вместе с Compare It! и Compare++. Причём разработчики обещали бесплатную версию. Ждём!
Странный тест, странный use case я бы сказал. Большой refactoring смотрю обычно пошагово. Для взрослого конфликтного 3-way merge -> ClearCase Merge, BeyondCompare
Здравствуйте, superlexx, Вы писали:
S>Странный тест, странный use case я бы сказал. Большой refactoring смотрю обычно пошагово.
Да обычнейший. Есть момент твоего последнего коммита. Есть текущий код. Даже если посмотреть что меняли по каждой ревизии отдельно, постоянно натыкаюсь на те же грабли — рефакторинг + перемещение кода.
S>Для взрослого конфликтного 3-way merge -> ClearCase Merge, BeyondCompare
Так всё проверенное даёт худшие результаты для 3-way, чем при обычном сравнении.
Beyond хоть что-то смог (хотя пока не увидел, чтобы он выделялся по точности результатов).
ClearCase Merge я так понимаю, только пакетом? Тогда пропустим.
Здравствуйте, Sinix, Вы писали:
S>Выкроил время, потестил диффалки. Из списков н wiki и
Имел теже проблемы когда переёзжал на новую версию сторонней либы, которая имела наши фиксы — приходилось мержить. Понял что современные мержеры не будут мержить хорошо пока не поимеют языковые парсеры, хотябы на уровне парсинга кода на скопы и выделения функций.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Tom, Вы писали:
Tom>А что было конкретно не так с Araxis-ом? Пока лучше него не видел. CodeCompare пока не пробовал.
Ла всё не так.
Глюкавый мерж. Берём Program1.cs как общего предка, радуемся во что у него превратилось static void Main.
Вот почему слева — весь метод, справа — только часть?
Представляем что будет при попытке смержить?%)
Неудобный гуй. Очень тяжело отследить, что изменено, даже для варианта Program1 -> Program2. По-идиотски расположенные настройки (за это можно смело можно лишать лицензии на Ribbon UI).
Сливающий на сложных диффах алгоритм. И снова кривой гуй, требующий расставить ручками sync links, указывая номера строк *(sync links нифига не помогают кстати).
Подозреваю, araxis заточен под отличные от моих юз-кейсы.
P.S. Только не подумайте, что я гноблю исключительно araxis. Остальные ничем не лучше.
P.P.S. У CodeCompare слегка страшный вид, но после настройки (см скриншоты) — терпимо. Если есть лицензия (откуда-то нашлась, кто и когда её покупал — ), то цвета даже можно сохранить После переписки с саппортом починили подсветку overview margin — используются цвета фона, если цвет текста совпадает.
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, Tom, Вы писали:
Tom>>А что было конкретно не так с Araxis-ом? Пока лучше него не видел. CodeCompare пока не пробовал. S>Ла всё не так.
А ты не заметил что он тебе показал конфликты которые смержить руками автоматически невозможно?