Как вернуться к предыдущей версии файла без удаления его последующих изменений?

У меня есть 4 версии файла A.txt в моем репозитории subversion, скажем: A.txt.r1, A.txt.r2, A.txt.r3 и A.txt.r4. Моя рабочая копия файла - r4, и я хочу вернуться к r2. Я не хочу использовать "svn update -r 2 A.txt", потому что это удалит все ревизии после r2, а именно r3 и r4.

Итак, есть ли способ обновить рабочую копию до r2 и по-прежнему иметь возможность переключаться на r3 и r4 позже? По-другому, я хочу, чтобы все еще могли видеть все 4 ревизии, используя "svn log A.txt" после выполнения обновления.

Ответ 1

У меня нет большого опыта работы с Subversion, поэтому, пожалуйста, извините меня, если этот метод не работает в этой среде.

В этой ситуации я выполняю следующие действия:

  • Проверьте файл, о котором идет речь, готовый для редактирования как r4
  • Перезапишите локальную копию файла с требуемой ревизией, в этом случае r2
  • Завершение/фиксация этого "нового" пересмотр файла как r5 с соответствующим комментарием

Таким образом, когда вы просматриваете историю файлов, вы увидите что-то вроде:

  • r1
  • r2
  • r3
  • r4
  • r5 (комментарий: "возврат к содержимому r2" )

Ответ 2

Чтобы сделать новую ревизию A.txt равной версии 2:

svn up -r HEAD
svn merge -r HEAD:2 A.txt
svn commit

Также см. описание в Отмена изменений.

Ответ 3

Команда svn up -r 4 обновляет вашу локальную копию до версии 4.

Сервер все еще имеет все версии 1 до любого.

Что вы хотите сделать, это создать новую ревизию, номер версии 5, которая идентична номеру версии 2.

cd /repo 
svn up -r 2 
cp /repo/file /tmp/file_2 
svn up -r 4 
cp /tmp/file_2 /repo/file 
svn commit -m "Making 5 from 2" 

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

cd /repo 
svn up -r 4
cp /repo/file /tmp/file_4
svn up -r 5 
cp /tmp/file_4 /repo/file 
svn commit -m "Making 6 from 4" 

Счастливый взлом.

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

Ответ 4

svn update -r 2 A.txt

Эта команда будет не удалять любые версии в репозитории. Он установит вашу рабочую копию A.txt как ревизию 2. Вы можете увидеть это, выполнив

> svn status -u A.txt
  *     2   A.txt

Вывод этой команды показывает, что вы просматриваете версию 2, и что есть обновления (это *).

После выполнения этого обновления вы выполняете "svn log" и видите все версии.

Выполнение "svn update A.txt" вернет вас к последней версии (в вашем случае, r4).

Ответ 5

обновление до более старого rev не приведет к удалению новых версий.

чтобы вы могли сделать svn up -r2 file, затем svn up -r4 file.

также вы не сможете зафиксировать файл r2 таким образом, потому что вам нужно будет обновить его до совершения, и вы снова получите r4.

Ответ 6

"Я не хочу использовать" svn update -r 2 A.txt ", потому что это удалит все ревизии после r2, а именно r3 и r4."

Эээ... на самом деле это не так. Попробуйте: выполните регулярное обновление svn после -r 2, и вы увидите, что рабочая копия обновлена ​​до r4.

Ответ 7

Обновление не будет удалять изменения на сервере. Единственные изменения, которые он внесет, - это ваша локальная рабочая копия:

Команда обновления SVN

"приносит изменения из репозитория в вашу рабочую копию"

"синхронизирует рабочую копию с ревизией, заданной переключателем --revision