Я работаю над проектом с другом и хочу вернуться к более старой версии нашего кода и установить его в качестве текущей. Как это сделать?
Я использую "anksvn" на vs08.
У меня есть версия, которую я хочу на моем ПК, но фиксация не удалась; Сообщение, которое я получаю: «Сбой при фиксации, файл или каталог устарел».
У меня также есть клиент Subversion на моем ПК.
svn merge -r HEAD:140
.Вы можете совершить только новые изменения на голове истории подрывной деятельности.
Причина, по которой вы ничего не можете сделать напрямую с хорошей копией, которую вы имеете на своем ПК, заключается в том, что ее
.svn
папки знают, что это код из прошлого, поэтому перед обновлением требуется обновление.Найти хороший номер ревизии и вернуться
Найдите номер ревизии старой копии, которую вы хотите.
Получите текущую версию с:
Или, чтобы проверить более старые версии вашего проекта, используйте:
пока вы не найдете правильный номер ревизии.
Запишите правильный номер ревизии (предположим,
123
для примеров ниже).Обновление до последней версии:
Отмените все изменения между нужной ревизией и последней версией:
(так же, как ответ Джона Скита выше.)
Если вы не можете найти номер ревизии
Если вы не можете найти старую копию и просто хотите зафиксировать файлы, которые в данный момент находятся на вашем ПК:
Сделайте копию своей хорошей версии (но без каких-либо
.svn
папок):Теперь убедитесь, что у вас последняя версия:
Скопируйте свою хорошую версию поверх рабочей копии.
Эта команда скопирует, а также удалит любые файлы из рабочего дерева, которые не находятся в вашей хорошей копии, но это не повлияет на существующие
.svn
папки.Если у вас нет rsync, вы можете использовать,
cp -a
но вам также нужно будет удалить все ненужные файлы вручную.Вы должны быть в состоянии совершить то, что у вас есть сейчас.
источник
Просто используйте эту строку
Вы можете узнать свою текущую версию, используя:
источник
Стандартный способ использования слияния для отмены всей регистрации отлично работает, если это то, что вы хотите сделать. Иногда, однако, все, что вы хотите сделать, это вернуть один файл. Там нет законного способа сделать это, но есть взлом:
Используйте подкоманду svn export:
svn export http: // url-to-your-file @ 123 / tmp / filename
(Где 123 - номер редакции для хорошей версии файла.) Затем переместите или скопируйте этот единственный файл, чтобы перезаписать старый. Проверьте в измененном файле, и все готово.
источник
svn
?svn cat -r 123 path-in-your-working-copy > path-in-your-working-copy
Немного больше старой школы
тогда обычный
источник
Я думаю, что это наиболее подходит:
Выполните слияние в обратном направлении, например, если зафиксированный код содержит ревизию с версии 5612 до 5616, просто объедините ее в обратном направлении. Это работает в моем конце.
Например:
Он будет содержать объединенный код обратно в прежнюю ревизию, а затем вы сможете его зафиксировать.
источник
Это то, что я сделал и работал для меня.
Я хочу отменить изменения в нескольких коммитах, которые я делал в определенные моменты времени, и хочу перейти к предыдущей точке фиксации.
Это запустит обратное слияние, отменяя изменения в вашей рабочей копии.
Просто просмотрите код и подтвердите.
источник
Щелкните правой кнопкой мыши на самой высокой иерархии, которую вы хотите вернуть >>
Revert
илиRevert to Revision
источник
В большинстве предыдущих ответов использовалось обратное слияние, и обычно это правильный ответ. Однако есть одна ситуация (которая только что произошла со мной), где это не так.
Я случайно изменил файл с окончанием строки Unix на конец строки DOS при внесении небольшого изменения и зафиксировал его. Это легко отменить, либо изменив окончание строки и зафиксировав снова, либо с помощью обратного слияния, но это имеет эффект создания
svn blame
список редактируется как источник каждой строки файла. (Интересно, что на TortoiseSVN в Windows это не влияет; только командная строкаsvn blame
.)Если вы хотите сохранить историю в соответствии с сообщениями
svn blame
, я думаю, вам нужно сделать следующее:Удаление немного страшно, но помните, что вы всегда сохраняете файл в хранилище, поэтому его восстановление не имеет большого значения. Вот некоторый код для иллюстрации шагов. Предположим, что
xxx
это номер редакции последней хорошей копии.Обратите внимание, что для копии в хранилище местом назначения должен быть каталог, а не имя файла.
источник
Щелкните правой кнопкой мыши проект> Заменить на> Ревизия или URL-адрес> Выберите конкретную ревизию, которую вы хотите отменить.
Теперь передайте локальную версию кода обновления в хранилище. Это вернет базу кода к определенной ревизии.
источник
На этой странице много опасных ответов. Обратите внимание, что начиная с версии 1.6 SVN, обновление -r может вызвать конфликты деревьев, которые быстро перерастают в потенциально кошмарные потери данных, когда вы ищете информацию о конфликтах деревьев.
Правильный способ вернуться к версии:
Где 12345 - номер версии. Не забывайте точку.
источник
Синхронизируйте со старой версией и зафиксируйте ее. Это должно сделать свое дело.
Вот также объяснение отмены изменений.
источник
Ответ Джона Скита - в значительной степени решение в двух словах, однако, если вы похожи на меня, вам может потребоваться объяснение. Руководство Subversion называет это
Cherry-Pick Merge
Из справочных страниц.
Пример:
Это заменит локальную копию [2983] (которая, согласно приведенной выше цитате, должна синхронизироваться с сервером - ваша ответственность) ревизией 289 с сервера. Изменение происходит локально, что означает, что если у вас есть чистая проверка, то изменения могут быть проверены перед их фиксацией.
источник
Следующее сработало для меня.
У меня было много локальных изменений, и мне нужно было отменить их в локальной копии и получить последнюю стабильную версию в SVN.
Проверьте состояние всех файлов, включая игнорируемые файлы.
Grep все строки, чтобы получить недавно добавленные и проигнорированные файлы.
Замените их на
//
.и rm -rf все строки.
svn status --no-ignore | grep '^ [? I]' | sed "s / ^ [? I] //" | xargs -I {} rm -rf "{}"
источник