Обновить элемент до версии и вернуться к редакции

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

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

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

Ответ 1

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

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

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

Ответ 2

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

БАЗА

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

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

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

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

Ответ 3

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

Вкратце, "обновление до" влияет только на вашу рабочую копию, но "реверсное слияние и фиксация" повлияет на репозиторий.

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

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

Ответ 4

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

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

- из справки TSVN

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

Ответ 5

Текст из справочника Tortoise:

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

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

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

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

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

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

Если вы просто хотите посмотреть, как выглядел файл или папка в более ранней версии, используйте Update to revision или Save revision as... вместо этого.