Запись перехода кода между двумя файлами с помощью Mercurial - PullRequest
2 голосов
/ 11 февраля 2011

Я неправильно организовал код в разрабатываемой игре и намереваюсь переместить код обновления состояния из класса GameView в класс Level.Я хотел бы записать это вырезать и вставить каким-то образом.Я использую Mercurial для управления версиями.Это возможно с Mercurial?Предоставляет ли какая-либо другая VCS эту функцию?


Читая немного больше и наблюдая за тем, как Линус говорит о git в Google, а также просматривая ответы и комментарии, я понимаю, что это особенность git's blame командует и работает по эвристике.

Я мог бы получить эту функциональность, используя hg-git , экспортируя наборы изменений Mercurial, а затем просто используя команду git blame -M -C.Есть ли более простой способ, который не включает git?

Если это не так, я приму существующий ответ, в котором упоминается git и описывается, как лучше всего использовать его функции.

Ответы [ 5 ]

2 голосов
/ 11 февраля 2011
1 голос
/ 12 февраля 2011

Mercurial поддерживает обнаружение переименования файлов следующим образом:

hg addremove -s 100

-s означает «сходство», а 100 означает 100%.Он будет искать файлы, чье имя изменилось, но их содержимое остается идентичным.

Я довольно часто использую эту команду с коэффициентом сходства 85 или 90%.И в сочетании с переключателем -n, который позволяет пробный прогон (т.е. ничего не делать, кроме отчетов), он может быть очень мощным.

Обнаружение реального перемещенного кода на самом деле невозможно, я не думаю.

1 голос
/ 11 февраля 2011

Я не думаю, что Mercurial отслеживает файл явно переименовывает / перемещает, по крайней мере, он не является частью набора изменений (хотя он может догадаться, откуда пришел конкретный файл на основе его содержимого).

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

1 голос
/ 11 февраля 2011

Если класс уровня еще не существует, вы можете сделать это с помощью:

рт.ст. копия GameView.ext Level.ext

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

Если уровень уже существует, я не думаю, что есть какой-то хороший способ сделать это, если вы не готовы извлечь этот код из своего собственного класса, который может начинаться как копия GameView и включаться (через или состав, или расширение) в Level.

0 голосов
/ 11 февраля 2011

Что я делаю для такого рода ситуаций, это изолирую изменения от других моих разработок, а затем фиксирую движение за один коммит с пометкой «перемещенная функция munge () между файлами.»VCS не отслеживает перемещение данных. Переименования можно отслеживать с помощью git и Clearcase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...