Используя Mercurial, есть простой способ разбить мою рабочую копию с файлом подсказки в удаленном репозитории по умолчанию
При использовании mercurial я хотел бы иметь возможность развернуть рабочую копию файла с файлом подсказки в удаленном репозитории по умолчанию. Есть ли простой способ сделать это?
Я знаю, что могу сделать "hg incoming -p", чтобы увидеть изменения наборов исправлений, но было бы неплохо просто увидеть фактические изменения для конкретного файла, который я получу, если я это сделаю вытягивание последних вещей (или то, что я могу сказать о том, чтобы вытолкнуть).
Самая простая вещь, о которой я могу сейчас подумать, - создать небольшой script, который рассмотрит местоположение по умолчанию в .hg/hgrc и загрузит файл с помощью curl (если он по http, иначе scp it over ssh, или просто сделать прямой diff, если он находится в локальной файловой системе), а затем разложить рабочую копию или наконечник на эту временную копию.
Я пытаюсь продать mercurial своей команде, и один из моих членов команды сегодня это сделал, как что-то, что они могут легко сделать в SVN с помощью своих инструментов графического интерфейса.
Ответы
Ответ 1
После некоторого копания я наткнулся на расширение Rdiff, которое делает большую часть того, что я хочу.
Он не поставляется с mercurial, но его можно установить путем клонирования репозитория:
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 в моем файле. Он выполняет временную проверку моей рабочей копии (удерживаемой транзакцией mercurial, чтобы ее можно было отбросить назад), выполняет обратный diff, а затем переводит транзакцию назад, чтобы вернуть все обратно так, как они были:
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
Ответ 3
чтобы расширить метод Lars (по какой-то причине комментарий не работает), вы можете использовать опцию -R
в команде diff
для ссылки на локальный репозиторий. Таким образом, вы можете использовать то же приложение diff, которое вы указали в hg
Ответ 4
С помощью шаблонов вы можете получить список всех измененных файлов:
hg incoming --template {files}