Есть ли интеллектуальный 3-й инструмент слияния, который понимает VB.NET - PullRequest
0 голосов
/ 10 февраля 2010

У меня проблемы с нашим инструментом слияния, поскольку иногда он не может правильно сопоставить неизмененные блоки в двух ветвях. Когда это происходит, инструмент слияния становится бесполезным, и слияние должно выполняться вручную.

Поэтому я ищу инструмент, который:

  • Понять, как выглядят определения функций / методов VB.NET, и придает им большое значение при сопоставлении блоков.
  • Знает, что VB.NET будет изменять регистр полей и т. Д. Всякий раз, когда ему это нравится, и поэтому игнорирует различия в случаях при поиске общих блоков, но все равно объединяет разницу в случае.
  • Знает, что ‘и‘ // являются началом комментариев и будут соответствовать им при поиске общих блоков

И какие еще требования я забыл?

(Проблема, с которой мы сталкиваемся, состоит в том, что наш инструмент слияния (часть Guiffy системы управления исходным кодом SCM) написан на Java, поэтому он был хорошо протестирован с Java и, кажется, хорошо работает в «реальной жизни» с нашим кодом C # , но это не очень хорошо с нашим кодом VB.NET.)

Ответы [ 7 ]

2 голосов
/ 10 февраля 2010

Отвечая на комментарий Иана Рингроуза «но почему инструмент слияния не может понять данный язык?»

Существует несоответствие между концепциями наличия исходного кода в текстовом формате и наличия кода в виде AST (абстрактного синтаксического дерева), даже если в AST было представление для исходных комментариев.

То, что вы ищете, - это IDE, которая будет хранить код в виде представления AST в формате XML. Тогда вам подойдет любой текстовый инструмент слияния, а не только специализированный Visual Basic. XML - это единственный формат, в котором объединение интерпретируемого источника имеет больше смысла, чем слияние исходного кода.

Что касается общей практики в случае регистрозависимых языков, то форматирование имеет смысл с точки зрения проверки кода, переформатирование кода классифицируется как рефакторинг, и, как правило, его необходимо учитывать в процессе контроля версий. Одна из причин этого заключается в том, что форматирование кода и даже настройки кодирования и возврата каретки исходных файлов действительно влияют на проект, а не только на AST, сгенерированный из кода. Код может содержать метаданные в комментариях, может быть обработан процедурой выполнения, которая может зависеть даже от настроек кодирования и окончания строки. Например, вывод html-кода веб-сайта ASPNET зависит от кодировки символов, поэтому вы можете получить искаженный вывод, если его неправильно использовать. Сторонний инструмент, обрабатывающий код, может потерпеть неудачу, если его синтаксический анализатор не может обработать возврат каретки, что считается правильным для компилятора Microsoft.

Именно поэтому инструменты слияния в основном рассматривают каждое изменение символа как реальное изменение, и даже пробел имеет значение, даже если у вас есть возможность его игнорировать.

1 голос
/ 10 марта 2011

Beyond Compare может делать то, что вы хотите. Он имеет файлы синтаксиса для всех основных языков, хотя, как и большинство других, это линейный инструмент. Он работает безупречно с исходным кодом Java, с которым я в основном работаю, но вы можете определить свои собственные файлы синтаксиса для специальных типов файлов. Возможно, вы сможете добавить правила для внесения специальных изменений для конкретного приложения, которые вы хотите внести. Его интеграция с SVN безупречна как интерактивный инструмент.

Мои единственные жалобы в том, что они не поддерживают 64-битную Linux или работу без интерфейса командной строки. Я хотел бы использовать это на моем сервере сборки, который не имеет графического интерфейса, но это невозможно из-за этих двух проблем. Если кто-то знает инструмент слияния, основанный исключительно на CLI, который поддерживает определение синтаксиса, я хотел бы услышать об этом.

1 голос
/ 10 февраля 2010

Araxis Merge, который я сейчас использую, поддерживает опцию Ignore Case.

0 голосов
/ 18 февраля 2016

Много лет спустя у меня возникла проблема ....

Semanticmerge попал на рынок, заявляет, что

Различия и слияния исходного кода на основе синтаксического анализа языка (C #, VB.NET, Java), предназначенные для с кодом, который был перемещен и изменен.

Мне не приходилось много лет пользоваться VB.NET, но я ожидаю, что Semanticmerge решит мои проблемы.

0 голосов
/ 10 февраля 2010

p4merge довольно крутой и доступен бесплатно на Perforce.com.

Я не знаю, хорошо ли он понимает VB.net, но это отличный инструмент.

0 голосов
/ 10 февраля 2010

Инструменты слияния понимают файлы и различия в файлах, они не понимают языки и различия между ними.

Поскольку большинство языков различают прописные и строчные переменные, именно так будут работать большинство инструментов слияния. Это также верно для ключевых слов VB.NET (If, Then в порядке, if, then - нет), поэтому, даже если игнорировать регистр, он может не сработать.

Лично я использую инструмент слияния Perforce ( p4merge ).

0 голосов
/ 10 февраля 2010

Сейчас я использую WinMerge почти исключительно, нахожу его лучше, чем Merge в Turtoise SVN, и, очевидно, он поддерживает VB.Net.

Я не знаю, сможет ли он понять полевые случаи и т. Д., Но он довольно мощный, так что, возможно, стоит попробовать.

WinMerge .

...