Подтвердить что ты не робот

Добавьте файлы в SVN, затем удалите перед фиксацией

Думаю, я был невнимателен.

Я добавил кучу файлов в svn с svn add, затем я увидел несколько добавленных файлов, которые мне не нужны, поэтому я удалил их с помощью rm.

Теперь я больше не могу фиксировать, потому что в коммите отсутствуют файлы. Я попробовал svn cleanup, но это не помогло.

Теперь моя рабочая опция состоит в том, чтобы вручную удалить каждый каталог .svn, но это кажется неправильным.

4b9b3361

Ответ 1

Как я понимаю, у вас есть такая ситуация:

$ touch foo
$ svn add foo
A         foo
$ rm foo
$ svn ci
svn: Commit failed (details follow):
svn: 'foo' is scheduled for addition, but is missing

Итак, чтобы исправить это, сделайте это: (спасибо Linus!)

$ svn revert foo
Reverted 'foo'

или вы можете сделать это:

$ touch foo
$ svn delete --force foo

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

Ответ 2

Если вы добавили папку с подпапками и файлами внутри то вы удалили папку перед ее фиксацией. В этом случае вы можете сделать следующее:

$ svn revert <Deleted Folder Name> --depth infinity

Ответ 3

На самом деле это немного измененная версия @Gonzalo Mateo, которая решила мою проблему.

svn st  | grep '!' | sed 's/!M      \(.*\)$/"\1"/' | xargs svn revert --depth infinity

Ответ 4

Если у вас есть несколько каталогов с несколькими удаленными файлами, следующая команда может помочь:

svn st  | grep '!M' | sed 's/!M      \(.*\)$/"\1"/' | xargs svn revert

Я рекомендую сначала перечислить файлы, которые будут возвращены. Мы можем сделать это, удалив последний трубопровод: svn st | grep '!M' | sed 's/!M \(.*\)$/"\1"/'.

Пошаговое объяснение команды:

  • svn st - В нем перечислены добавленные и не удаленные файлы с символом !M
  • grep '!M' Он находит строки с !M
  • sed 's/!M \(.*\)$/"\1"/' Это используется, чтобы избавиться от !M с пробелами. Он также укажет имена файлов, поэтому вам не придется беспокоиться, если файлы содержат пробелы.
  • xargs svn revert Это вернет все перечисленные файлы.

Ответ 5

Если вы svn add X файл, но вы его не зафиксировали, то позже вы решите, что хотите удалить этот файл (а не зафиксировать его); вы должны просто вернуть команду svn add X с помощью svn revert X.

Затем он "отменяет" еще не добавил.

Ответ 6

Это решило мою проблему

svn st | grep '!' | sed 's/!M \(.*\)$/"\1"/' | xargs svn revert --depth infinity

Следует отметить, что приведенный выше код работает только для последних дополнений. Итак, сделайте еще один svn ci, если он выдаст ошибку, затем снова запустите вышеуказанный код. Затем снова svn ci, пока вы не вернете все проблемы.

Bonus: Добавьте псевдоним (это для оболочки Oh-My-ZSH Zsh)

# SVN revert everything like reset hard alias sra="svn st | grep '!' | sed 's/!M \(.*\)$/"\1"/' | xargs svn revert --depth infinity"

Теперь sra т.е. SVN Revert All сделает вашу жизнь легкой.