Я могу только догадываться, но мне кажется, что ES5-strict говорит, что eval
и arguments
следует рассматривать как сырой синтаксис, а не идентификаторы. Разумно, что эти две функции должны быть реализованы на синтаксическом уровне, потому что у них есть поведение Amazing Funky Magic, которое невозможно воспроизвести с помощью нормальной функции.
(В частности eval
может писать локальные переменные в функция, которая его вызывает, и запись в arguments
странно изменяет значения локальных переменных, соответствующих аргументам. Хотя это поведение, кажется, уходит в строгом режиме, к счастью.)
По соображениям совместимости, ES5 не может реально сделать eval
и arguments
синтаксическим. Таким образом, они делают все возможное, что означает, что идентификатор arguments
всегда относится к магии arguments
, а идентификатор eval
всегда относится исключительно к магии eval
.
Он также может улучшить возможности для оптимизации, если JS-двигатели могут быть уверены, что функция содержит магию.
В основном вам нужно «объединить в обратном направлении» - применить разницу между текущей и предыдущей версией к текущей версии (так что вы получите рабочую копию, похожую на старая версия), а затем снова зафиксировать. Так, например, для перехода от ревизии 150 (текущей) к ревизии 140:
svn update
svn merge -r 150:140 .
svn commit -m "Rolled back to r140"
Красная книга Subversion имеет хороший раздел об этом .
Щелкните правой кнопкой мыши проект> Заменить на> Ревизия или URL-адрес> Выберите конкретную ревизию, которую вы хотите отменить.
Теперь передайте локальную версию кода обновления в хранилище. Это вернет кодовую базу к определенной ревизии.
Новые изменения можно вносить только в заголовок истории подрывной деятельности.
Причина, по которой вы ничего не можете сделать напрямую с хорошей копией, имеющейся на вашем ПК, это то, что его папки .svn
знают, что это код из прошлого, поэтому требует обновления перед любой фиксацией.
Найдите номер ревизии старая копия, которую вы хотите.
Получите текущую ревизию с помощью:
svn info --show-item revision
# или
svn log
Или для проверки более старых версий вашего проекта используйте:
svn update -r <предыдущий_revision_number>
, пока не найдете правильный номер редакции.
Запишите правильный номер редакции (при условии 123
для примеров ниже).
Обновление до последней редакции:
svn update
Отменить все изменения между нужной ревизией и последней версией:
svn merge -r HEAD: 123.
SVN коммит "Вернулся к ревизии 123"
(аналогично ответу Джона Скита выше.)
Если вы не можете найти старую копию, и вы просто хотите зафиксировать файлы, которые в данный момент находятся на вашем ПК :
Сделайте копию своей хорошей версии (но без каких-либо папок .svn
):
cd ..
rsync -ai --exclude = .svn project / project-good /
Теперь убедитесь, что у вас последняя версия:
cd project
SVN обновление
# или сделать новый заказ
svn checkout
Скопируйте вашу хорошую версию поверх рабочей копии.
Эта команда скопирует, а также удалит из рабочего дерева все файлы, которых нет в вашей хорошей копии, но это не повлияет на существующую .svn
папки.
cd ..
rsync -ai --exclude = .svn - удалить проект-товар / проект /
Если у вас нет rsync, вы можете использовать cp -a
, но вам также нужно будет удалить любые ненужные файлы вручную.
Вы должны быть в состоянии зафиксировать то, что у вас есть сейчас.
CD проект
SVN коммит "Вернулся к хорошей копии"
Щелкните правой кнопкой мыши высшую иерархию, которую вы хотите восстановить >> Вернуть
или Вернуть к версии
Синхронизация со старой версией и совершить это. Это должно помочь.
Вот также объяснение отмены изменений.
Стандартный способ использования слияния для отмены всей регистрации отлично работает, если вы этого хотите. Однако иногда все, что вам нужно сделать, это вернуть один файл. Нет законного способа сделать это, но есть хитрость:
Используйте подкоманду svn export:
svn export http: // url-to -ваш-файл @ 123 / tmp / filename
(где 123 - номер редакции хорошей версии файла.) Затем либо переместите, либо скопируйте этот единственный файл, чтобы перезаписать старый. Зарегистрируйте измененный файл, и все готово.