В Mercurial, каков точный шаг, который должен сделать Питер или я, чтобы он получил откат назад? - PullRequest
1 голос
/ 14 июня 2010

Короткий вопрос: если я hg rollback, как Питер может получить мою откатную версию, если он клонировал меня? Какие именно шаги он или я должен сделать или набрать?

Это относится к В Mercurial, когда Питер "hg клонирует" меня, и я фиксирую, а он тянет и обновляет, он получает мою версию, но не при откате?

Подробности:

После следующих шагов у Марии 7, а у Петра 11. Мой репозиторий 7 Каковы точные шаги, которые Питер или я должны сделать, или напечатать ТАК, ЧТО ПЕТЕР ПОЛУЧАЕТ 7 назад?

F:\>hg init hgme
F:\>cd hgme
F:\hgme>echo the code is 7 > code.txt
F:\hgme>hg add code.txt
F:\hgme>hg commit -m "this is version 1"
F:\hgme>cd ..
F:\>hg clone hgme hgpeter
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
F:\>type hgpeter\code.txt
the code is 7
F:\>cd hgme
F:\hgme>notepad code.txt   [now i change 7 to 11]
F:\hgme>hg commit -m "this is version 2"
F:\hgme>cd ..\hgpeter
F:\hgpeter>hg pull
pulling from f:\hgme
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
(run 'hg update' to get a working copy)
F:\hgpeter>hg update
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
F:\hgpeter>type code.txt
the code is 11
F:\hgpeter>cd ..\hgme
F:\hgme>hg rollback
rolling back last transaction
F:\hgme>cd ..
F:\>hg clone hgme hgmary
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
F:\>type hgmary\code.txt
the code is 7
F:\>cd hgpeter
F:\hgpeter>hg pull
pulling from f:\hgme
searching for changes
no changes found
F:\hgpeter>type code.txt
the code is 11

Каковы точные шаги, которые должен сделать Питер или я, или наберите ТАК, ЧТО ПЕТЕР ПОЛУЧАЕТ 7 назад? Должны быть некоторые шаги, которые Петр может сделать, чтобы получить «текущее состояние» моего хранилища, так как клонировали от меня. Мне не нужно стучать в его входную дверь, чтобы сказать ему: «Эй, тебе нужно откатиться» или что-то в этом роде.

Ответы [ 2 ]

4 голосов
/ 14 июня 2010

Если кто-то уже вытащил ваши изменения (как вы описываете), откат не подходит.

Из hg руководство:

ЭтоКоманда не предназначена для использования в публичных репозиториях.Как только изменения становятся доступны для извлечения другими пользователями, откат транзакции локально становится неэффективным (кто-то другой, возможно, уже извлек изменения).Кроме того, возможна гонка с читателями хранилища;например, в процессе отката может произойти сбой при выполнении отката.

Что вам нужно сделать, это hg backout набор изменений, а затем попросить Питера вытащить.Если вы настаиваете на откате, вы можете сказать Питеру отложить хранилище, но я бы не рекомендовал работать таким образом.

2 голосов
/ 14 июня 2010

Да, этот сценарий изменения кода никогда не должен использовать hg rollback.Следует использовать hg backout.hg rollback удаляет историю, но если

1) кто-то вытащил из вас
2) или вы нажали

, то ваша версия, как известно, «вышла из-под контроля», а некоторыедень может «вернуться, чтобы укусить вас», добавив обратно в ваш репозиторий.Итак, правило таково: никогда не используйте hg rollback, если только вы не выполняете откат чего-либо, чего никогда не должно было быть в хранилище, например, всех файлов скомпилированного объектного кода, которые делают историю хранилища очень большой, и Вы уверены, что никто не потянул, и вы никогда не нажали, затем используйте hg rollback.Для обычного использования контроля версий, используйте hg backout

hg backout tip

для возврата последней версии в вашем хранилище (путем создания нового набора изменений и истории).

Ссылка: http://hgbook.red -bean.com / read / find-and-fixing-errors.html
раздел Работа с зафиксированными изменениями

...