Hg: Как пройти через changsets постепенно? - PullRequest
3 голосов
/ 01 июля 2010

Я новичок в ртути. У меня есть функция, которая работала, но сейчас нет. Я хочу постепенно отменить изменения, пока не доберусь до ревизии, где это работает. Я не совсем уверен, что лучший способ сделать это.

Я попытался клонировать репо в старую ревизию и увидел, что она работает там. Итак ... как мне теперь выполнить обновление до последующих изменений? В клонированном репо ревизия default и tip - это та, на которую я ее клонировал.

Нужно ли применять патчи? Полка меняется? Я не совсем уверен.

Ответы [ 3 ]

3 голосов
/ 01 июля 2010

Вы должны использовать команду bisect , чтобы быстро выяснить, когда ваша функция перестала работать. Работает следующим образом:

Вы начинаете со сброса состояния деления и помечаете текущую версию родительского рабочего каталога как плохую:

hg bisect --reset
hg bisect --bad

Теперь сделайте предположение, когда вы думаете, что функция работает. Если вы думаете, что это сработало 1 июня, тогда вы можете сделать

hg update -d '<Jun 1'

Команда update используется для обновления рабочего каталога в соответствии с заданным набором изменений. См. hg help dates для списка форматов даты. Теперь вы должны протестировать эту ревизию, и если эта функция работает здесь, вы помечаете ее как хорошую:

hg bisect --good

Если функция не работает в этом наборе изменений, пометьте ее как плохую и обновите еще дальше:

hg bisect --bad
hg update -d '<May 1'

Повторяйте это, пока не найдете хорошую ревизию. Когда вы нашли хорошую ревизию, Mercurial может помочь вам: наборы изменений между хорошими и плохими должны содержать ошибку. Mercurial поможет вам, отслеживая список возможных наборов изменений, и поможет сузить список до единого набора изменений. Он делает это, обновляя вас до набора изменений примерно посередине кандидатов и предлагая вам протестировать этот набор изменений.

После тестирования вы помечаете набор изменений как хороший или плохой. Если вы отметите его как хороший, то вы знаете, что ошибка находится в будущем, а если вы отметите его как плохой, то ошибка остается в прошлом. В любом случае вы сокращаете примерно половину кандидатов на каждом шаге! Это означает, что вам нужно всего 10 шагов для тестирования 1024 кандидатов - это сила логарифмов :-) Mercurial будет отслеживать кандидатов и сообщать вам новое место после каждого теста.

Полный сеанс может выглядеть следующим образом (я просто говорю «хорошо / плохо»):

% hg bisect --reset
% hg bisect --bad
% hg update -r -100
61 files updated, 0 files merged, 9 files removed, 0 files unresolved
% hg bisect --good
Testing changeset 11414:0fa4474bdc2f (99 changesets remaining, ~6 tests)
46 files updated, 0 files merged, 0 files removed, 0 files unresolved
% hg bisect --good
Testing changeset 11439:778377be3662 (50 changesets remaining, ~5 tests)
17 files updated, 0 files merged, 0 files removed, 0 files unresolved
% hg bisect --bad
Testing changeset 11428:4d03c3680400 (25 changesets remaining, ~4 tests)
6 files updated, 0 files merged, 0 files removed, 0 files unresolved
% hg bisect --bad
Testing changeset 11420:a99ef3711890 (13 changesets remaining, ~3 tests)
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
% hg bisect --bad
Testing changeset 11417:6f1d1ed3e19a (6 changesets remaining, ~2 tests)
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
% hg bisect --good
Testing changeset 11418:67bb9d78f05e (3 changesets remaining, ~1 tests)
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
% hg bisect --bad
The first bad revision is:
changeset:   11418:67bb9d78f05e
user:        Matt Mackall 
date:        Mon Jun 21 13:25:42 2010 -0500
summary:     merge: sort arguments to stabilize the ancestor search
0 голосов
/ 01 июля 2010

Чтобы найти ревизию, в которой именно отсутствовала функция, вы можете попробовать hg bisect.Вы можете найти его здесь .

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

hg help pull
0 голосов
/ 01 июля 2010

Я бы перебрал оставшиеся наборы изменений, используя

hg pull -r <revision> [<original repo>]

Некоторые документы здесь .

...