Используя Mercurial, есть ли простой способ сравнить мою рабочую копию с файлом tip в удаленном репозитории по умолчанию
Вопрос
При использовании mercurial я хотел бы иметь возможность отличать рабочую копию файла от файла tip в моем удаленном репозитории по умолчанию.Есть ли простой способ сделать это?
Я знаю, что могу выполнить "hg incoming -p", чтобы увидеть поступающие наборы исправлений, но было бы неплохо просто напрямую увидеть фактические изменения для конкретного файла, которые я получу, если я извлеку последнюю версию (или то, что я, возможно, собираюсь вытолкнуть).
Самое простое, что я могу придумать прямо сейчас, - это создать небольшой скрипт, который просматривает расположение по умолчанию в .hg / hgrc и загружает файл с помощью curl (если это через http, в противном случае scp через ssh или просто выполняет прямое различие, если оно находится в локальной файловой системе), а затем сравнивает рабочую копию или подсказку с этой временной копией.
Я пытаюсь продать mercurial своей команде, и один из членов моей команды рассказал сегодня об этом как о чем-то, что они могут легко сделать в SVN с помощью своих инструментов GUI.
Решение
Немного покопавшись, я наткнулся на Расширение Rdiff это делает большую часть того, чего я хочу.
Он не поставляется с mercurial, но его можно установить, клонировав репозиторий:
hg clone http://hg.kublai.com/mercurial/extensions/rdiff
А затем измените ваш файл ~/.hgrc, чтобы загрузить расширение:
[extensions]
rdiff=~/path/to/rdiff/repo/rdiff.py
Это немного необычно в том смысле, что оно фактически изменяет существующую команду "hg diff", определяя, является ли первый параметр удаленным URL.Если это так, то он будет сравнивать этот файл с вашим файлом tip в вашем локальном репозитории (не с рабочей копией).Поскольку удаленное репозиторий является первым в аргументах, это обратное тому, что я ожидал, но вы можете передать "--reverse" команде hg diff, чтобы изменить это.
Я мог бы увидеть, что это потенциальные улучшения расширения, но пока я могу обойти их с помощью функции оболочки bash / zsh в моем файле автозагрузки.Он выполняет временную проверку моей рабочей копии (удерживаемой транзакцией mercurial, чтобы ее можно было откатить), выполняет обратную разницу, а затем откатывает транзакцию назад, чтобы вернуть все в прежнее состояние:
hgrdiff() {
hg commit -m "temp commit for remote diff" &&
hg diff --reverse http://my_hardcoded_repo $* &&
hg rollback # revert the temporary commit
}
А затем вызовите его с помощью:
hgrdiff <filename to diff against remote repo tip>
Другие советы
Вы могли бы попробовать создать два репозитория локально - один для входящих материалов и один для исходящих.Тогда вы должны быть в состоянии выполнять diff с помощью любых инструментов.Смотрите здесь:
http://weblogs.java.net/blog/kohsuke/archive/2007/11/using_mercurial.html
чтобы подробнее рассказать о методе Lars (по какой-то причине комментарий не работает), вы можете использовать -R
опция на diff
команда для ссылки на локальный репозиторий.Таким образом, вы можете использовать то же приложение diff, которое вы указали в hg
Используя шаблоны, вы можете получить список всех измененных файлов:
hg incoming --template {files}