Добавьте файлы в SVN, затем удалите перед фиксацией
Думаю, я был невнимателен.
Я добавил кучу файлов в svn с svn add
,
затем я увидел несколько добавленных файлов, которые мне не нужны, поэтому я удалил их с помощью rm
.
Теперь я больше не могу фиксировать, потому что в коммите отсутствуют файлы. Я попробовал svn cleanup, но это не помогло.
Теперь моя рабочая опция состоит в том, чтобы вручную удалить каждый каталог .svn, но это кажется неправильным.
Ответы
Ответ 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 сделает вашу жизнь легкой.