Как вернуться к предыдущей версии файла, не удаляя его последующие версии? - PullRequest
11 голосов
/ 18 сентября 2008

У меня есть 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 » после выполнения обновления.

Ответы [ 7 ]

26 голосов
/ 18 сентября 2008

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

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

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

10 голосов
/ 18 сентября 2008

Команда 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" 

Если вы когда-либо передумали и хотите вернуть 4, вы можете сделать это, создав ревизию 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" 

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

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

3 голосов
/ 18 сентября 2008
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).

3 голосов
/ 18 сентября 2008

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

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

  1. Проверьте файл, готовый для редактирования, как r4
  2. Перезаписать локальную копию файла требуемой ревизией, в данном случае r2
  3. Проверить / зафиксировать эту «новую» ревизию файла как r5 с соответствующим комментарием

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

  • r1
  • r2
  • r3
  • r4
  • r5 (комментарий: «возвращено к содержанию r2»)
2 голосов
/ 18 сентября 2008

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

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

2 голосов
/ 18 сентября 2008

Обновление до более старой версии не приведет к удалению более новой версии.

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

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

1 голос
/ 18 сентября 2008

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...