Обновить элемент до ревизии против возврата к ревизии - PullRequest
160 голосов
/ 01 августа 2009

Я начал использовать Subversion с TortoiseSVN. Если я открою журнал и щелкну правой кнопкой мыши старую ревизию, я увижу две опции, которые звучат так, будто они возвращаются к более старой версии: «Обновить элемент до ревизии» и «Вернуться к этой ревизии».

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

Итак, скажите, что ревизия HEAD равна 100, и я вернусь обратно к 95. Она вернет слияние моей рабочей копии обратно к 95. Затем я могу зафиксировать это изменение в репозитории, которое создаст правильную ревизию 101? Как это отличается, если я должен был вернуться к ревизии 95? Разве это все еще не отменяет изменения по сравнению с последними ревизиями? Я не понимаю, как меняется состояние моей рабочей копии после возврата или обновления до более старой версии.

Ответы [ 6 ]

201 голосов
/ 01 августа 2009

Обновление до ревизии будет обновлять только файлы вашей рабочей копии до выбранной вами ревизии. Но вы не можете продолжать работать над этой ревизией, поскольку SVN будет жаловаться, что ваша рабочая копия устарела 1006 *.

вернуться к этой ревизии отменит все изменения в вашей рабочей копии, которые были сделаны после выбранной ревизии (в вашем примере рев. 96,97,98,99,100) Ваша рабочая копия сейчас находится в измененном состоянии .

Содержимое файла в обоих сценариях одинаково, однако в первом случае у вас есть неизмененная рабочая копия , и вы не можете зафиксировать свои изменения (так как ваша рабочая копия не указывает на HEAD rev 100) во втором случае вы иметь измененную рабочую копию, указывающую на голову, и вы можете продолжать работать и фиксировать

31 голосов
/ 01 августа 2009

Чтобы понять, как состояние вашей рабочей копии отличается в обоих сценариях, вы должны понять концепцию BASE ревизии :

БАЗА

Номер редакции элемента в рабочей копии. Если предмет был локально модифицированный, это относится к как выглядит предмет без локальные модификации.

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

Обновление элемента до ревизии изменяет эту базовую ревизию, делая BASE устаревшим. Когда вы попытаетесь зафиксировать локальные изменения, SVN заметит, что ваш BASE не соответствует HEAD хранилища. В фиксации будет отказано, пока вы не сделаете обновление (и, возможно, объединение), чтобы исправить это.

Возврат к ревизии не меняет BASE. Концептуально это почти то же самое, что редактирование файла вручную для соответствия с более ранней версией.

5 голосов
/ 01 августа 2009

После этого файлы в вашей рабочей копии могут выглядеть точно так же, но они по-прежнему очень разные действия - хранилище находится в совершенно другом состоянии, и после вас будут доступны другие параметры Возврат, чем «обновление» до старой ревизии.

Вкратце, «обновление до» влияет только на вашу рабочую копию, но «обратное объединение и принятие» повлияет на хранилище.

Если вы «обновите» старую ревизию, то хранилище не изменилось: в вашем примере ревизия HEAD по-прежнему равна 100. Вам не нужно ничего фиксировать, поскольку вы просто возитесь с вашей рабочей копией , Если вы внесете изменения в свою рабочую копию и попытаетесь зафиксировать ее, вам скажут, что ваша рабочая копия устарела, и вам потребуется обновить ее, прежде чем вы сможете выполнить фиксацию. Если кто-то еще работает в том же хранилище, выполняет «обновление» или если вы извлекаете вторую рабочую копию, это будет r100.

Однако, если вы «отмените слияние» со старой ревизией, тогда ваша рабочая копия по-прежнему будет основана на HEAD (при условии, что вы обновлены), но вы создаете новую ревизию для замены нежелательных изменений , Вы должны зафиксировать эти изменения, так как вы меняете хранилище. После того, как все обновления или новые рабочие копии, основанные на HEAD, будут отображаться с r101, с содержанием, которое вы только что зафиксировали.

4 голосов
/ 01 августа 2009

Обновите вашу рабочую копию до выбранной ревизии. Полезно, если вы хотите, чтобы ваша рабочая копия отражала время в прошлом, или если в хранилище были зафиксированы дальнейшие коммиты, и вы хотите обновлять свою рабочую копию по одному шагу за раз. Лучше всего обновить весь каталог в вашей рабочей копии, а не только один файл, иначе ваша рабочая копия может быть несовместимой. Используется для проверки конкретной цели оборота. Если тест завершен, вы можете использовать эту команду для проверки другой версии или использовать Обновление SVN для получения HEAD

Если вы хотите навсегда отменить предыдущее изменение, используйте Вернитесь к этой ревизии .

- из справки ЦВН

Если вы обновите свою рабочую копию до более ранней версии, это повлияет только на вашу собственную рабочую копию, после того, как вы внесете некоторые изменения и захотите зафиксировать, вы потерпите неудачу, TSVN предупредит вас, чтобы сначала обновить ваш WC до последней версии Если вы вернетесь к версии, вы можете зафиксировать репозиторий. Каждый вернется к версии после обновления.

2 голосов
/ 14 мая 2012

Текст из ссылки на Черепаху:

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

Если вы хотите навсегда отменить более раннее изменение, используйте вместо этого Возврат к этой ревизии.

Вернуться к этой редакции Вернитесь к более ранней версии. Если вы внесли несколько изменений, а затем решили, что действительно хотите вернуться к тому, как все было в редакции N, эта команда вам нужна. Изменения отменены в вашей рабочей копии, поэтому эта операция не влияет на хранилище, пока вы не подтвердите изменения. Обратите внимание, что это отменит все изменения, сделанные после выбранной ревизии, заменив файл / папку более ранней версией.

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

Внутри происходит то, что Subversion выполняет обратное объединение всех изменений, внесенных после выбранной ревизии, отменяя эффект этих предыдущих коммитов.

Если после выполнения этого действия вы решили отменить отмену и вернуть свою рабочую копию в прежнее неизмененное состояние, вам следует использовать TortoiseSVN → Восстановить из Windows Explorer, который отменит локальные изменения, сделанные этой обратной операцией. объединить действия.

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

1 голос
/ 21 января 2017

@ BaltoStar обновляет синтаксис редакции:

http://svnbook.red -bean.com / о / 1,6 / svn.ref.svn.c.update.html

svn update -r30

Где 30 - номер редакции. Надеюсь, что это поможет!

...