2008-10-01 6 views
13

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

Я знаю, что могу сделать «hg incoming -p», чтобы увидеть изменения наборов исправлений, но было бы неплохо просто увидеть фактические изменения для определенного файла, который я получу, если я сделайте притягивание последних вещей (или то, что я могу сказать о выталкивании).

Самая простая вещь, о которой я могу сейчас подумать, - создать небольшой скрипт, который рассматривает местоположение по умолчанию в .hg/hgrc и загружает файл с помощью curl (если он превышает http, иначе scp его поверх ssh, или просто сделать прямой diff, если он находится в локальной файловой системе), а затем разложить рабочую копию или наконечник на эту временную копию.

Я пытаюсь продать mercurial своей команде, и один из моих членов команды сегодня это сделал, как что-то, что они могут легко сделать в SVN с помощью своих инструментов графического интерфейса.

ответ

5

После некоторого рытья я наткнулся на Rdiff extension, который делает большую часть того, что я хочу.

Он не приходит с ртутным, но он может быть установлен путем клонирования репозитория:

hg clone http://hg.kublai.com/mercurial/extensions/rdiff 

И тогда ваш ~ необходимости модифицировать/.hgrc файл загрузить расширение:

[extensions] 
rdiff=~/path/to/rdiff/repo/rdiff.py 

Это немного причудливо в том, что он фактически изменяет существующую команду «hg diff», обнаруживая, является ли первый параметр удаленным URL. Если это так, то это будет diff этот файл против вашего файла подсказки в вашем локальном репо (а не в рабочей копии). Это, поскольку удаленное репо является первым в аргументах, оно противоположно тому, что я ожидал бы, но вы можете передать «-reverse» команде hg diff, чтобы переключать ее.

Я видел, что это потенциальные улучшения для расширения, но пока я могу обойти их с помощью функции оболочки bash/zsh в моем файле-стартере. Он делает темп Checkin моей рабочей копии (проведенную ртутными сделками, поэтому он может быть отката), выполняет обратный дифференциал, а затем отменяет транзакцию обратно вернуть вещи обратно к тому, как они были:

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> 
2

Вы можете попробовать иметь два репозитория локально - один для входящего материала и один для исходящего. Тогда вы должны быть в состоянии сделать diff с любыми инструментами. Смотрите здесь:

http://weblogs.java.net/blog/kohsuke/archive/2007/11/using_mercurial.html

2

расширить по методу Lars (по некоторым причинам комментарий не работает), вы можете использовать опцию -R по команде diff ссылаться на локальный репозиторий. Таким образом, вы можете использовать то же приложение diff, которое вы указали в hg

0

Использование шаблонов вы можете получить список всех измененных файлов:

hg incoming --template {files}