Существует ли трехсторонний инструмент слияния, который «понимает» общий рефакторинг? - PullRequest
5 голосов
/ 10 февраля 2010

Когда простой рефакторинг, такой как «поле переименования», был выполнен в одной ветви, может быть очень трудно объединить изменения в другие ветви. (Метод извлечения намного сложнее, так как инструменты слияния, похоже, плохо соответствуют неизмененным блокам)

Теперь в моих снах я думаю об инструменте, который может записывать (или отрабатывать), какие четко определенные операции рефакторинга были выполнены в одной ветви, а затем «воспроизводить» их в другой ветви, вместо того, чтобы пытаться объединить каждую строку, на которую повлиял рефакторинг.

см. Также " Есть ли интеллектуальный третий инструмент слияния, который понимает VB.NET" для другой половины моей боли!


Также кто-нибудь может попробовать что-то вроде MolhadoRef ( статья в блоге о MolhadoRef и SCM с поддержкой рефакторинга ). Теоретически это контроль источников с учетом рефакторинга.

Ответы [ 6 ]

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

Darcs поддерживает операцию '1001 * замена токена ' в коммите, которая заменяет все экземпляры одного токена другим и объединяется так, как вы этого хотите.

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

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

Этот инструмент использовался в ядре Linux для обновления использования API и т. Д.

Цитировать с его веб-страницы:

"Coccinelle - это программа соответствия и двигатель трансформации, который обеспечивает язык SmPL (семантический патч Язык) для указания желаемого совпадения и преобразования в C коде. "

0 голосов
/ 16 июля 2014

В настоящее время существуют некоторые лучшие инструменты слияния (например, SemanticMerge ), основанные на синтаксическом анализе языка и предназначенные для работы с кодом, который был перемещен и изменен.JetBrains (создатель ReShaper) только что опубликовал блог по этому вопросу.

За эти годы было проведено множество исследований по этому вопросу, наконец-то некоторые продукты поступают на рынок.

0 голосов
/ 20 марта 2010

Plastic SCM (www.plasticscm.com) Инструмент трехстороннего слияния реализует Xmerge, единственный способ помочь вам слить код, который был перемещен.

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

В Linux вы можете использовать Meld или в Windows Winmerge .

В любом случае оба инструмента «понимают» только строки текста. Рефакторинг требует понимания кода, который выходит за рамки любого известного мне инструмента слияния / сравнения.

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

Araxis Merge не понимает обычного рефакторинга, но это единственный трехсторонний инструмент слияния, который я использовал. Он доступен как для Mac, так и для Windows, и поддерживает API автоматизации, поэтому я думаю, что вы могли бы делать с этим что угодно, если бы вы были так склонны. Кстати, я не имею никакого отношения к Araxis, кроме того, что я использовал их продукт.

...