Используя Mercurial, есть ли простой способ сравнить мою рабочую копию с файлом tip в удаленном репозитории по умолчанию

StackOverflow https://stackoverflow.com/questions/156280

Вопрос

При использовании 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}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top