Mercurial diff, включая первый набор изменений

Недавно я столкнулся с необходимостью создать Mercurial diff всех изменений до определенного набора изменений, который включает первый набор изменений репо. Я понимаю, что это расширяет определение различий, но это для загрузки нового проекта в инструмент проверки кода.

Предположим, что следующие наборы изменений:

p83jdps99shjhwop8 - вторая функция 12:00

hs7783909dnns9097 — первая функция — 11:00

a299sdnnas78s9923 — исходная установка приложения — 10:00

Если мне нужен diff всех изменений, которые были зафиксированы, единственный способ, которым я могу добиться этого, - это следующая команда diff...

diff -r 00:p83jdps99shjhwop8

В этом случае первый набор изменений в параметре аргумента (здесь - 00) принимает форму регулярного выражения 0[0]+

Судя по нескольким тестам, это именно то, что нам нужно, но у меня возникли проблемы с отслеживанием документации по этому сценарию (возможно, я просто не могу придумать правильный запрос Google). В результате я не уверен, будет ли это работать универсально, или это будет специфично для моей установки или репозиториев, которые я тестировал случайно.

Есть ли рекомендуемый способ достижения того, чего я пытаюсь достичь? Если нет, то задокументировано ли где-нибудь то, что я описал выше?


person smp7d    schedule 11.06.2013    source источник
comment
Я полагаю, что hg diff -r null:tip это то, что вам нужно? (Если все, что вы хотите, является предком tip, конечно).   -  person alexis    schedule 12.06.2013


Ответы (2)


Похоже, это действительно задокументировано, но вам нужно немного покопаться...

https://www.mercurial-scm.org/wiki/ChangeSetID
https://www.mercurial-scm.org/wiki/Nodeid

Таким образом, специальный nodeid, на который вы ссылаетесь, является «нулевым».

2 цифры могут быть недостаточны для идентификации нуля как такового (поскольку это может быть неоднозначно, если другие хэши начинаются с 2 нулей), поэтому вам может быть лучше указать 4 0 или более.

Например: hg diff -r 00:<hash of initial add changeset> привело к ошибке abort: 00changelog.i@00: ambiguous identifier!.

person mrokitka    schedule 12.06.2013
comment
Было бы лучше просто использовать длинную форму nullid. - person smp7d; 13.06.2013

Я немного запутался в том, что вам нужно. Разница между пустым репозиторием и ревизией tip — это просто содержимое каждого файла в tip, другими словами, это состояние вашего проекта в tip. В формате diff это будет состоять исключительно из + строк.

В любом случае, если вам нужен способ сослаться на начальное состояние репозитория, документированная нотация для него — null (см. hg help revisions). Итак, чтобы получить разницу между начальным (пустым) состоянием и состоянием вашего репозитория в tip, вы просто скажете

hg diff -r null -r tip

Но hg diff дает вам разницу между двумя точками на вашем графике изменений. Таким образом, это даст вам только предков tip: если есть ветки (именованные или неименованные), которые не были объединены с предком tip, вы их не увидите.

  3--6
 / 
0--1--2--5--7 (tip)
    \   / 
      4

В приведенном выше примере диапазон от null до 7 не включает ревизии 3 и 6.

person alexis    schedule 12.06.2013
comment
Спасибо. Я не знал, что это работает. Когда вы запускаете такого рода diff, diff выводит краткую форму упомянутого nullid @mrokitka. Хотя оба работают. - person smp7d; 13.06.2013
comment
Что ж, вы запросили документированный способ ссылки на нулевую ревизию. hg help настолько канонична, насколько это возможно. - person alexis; 13.06.2013