Как вернуться к предыдущей версии файла без удаления его последующих изменений?
У меня есть 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