«Unadd» файл в SVN перед фиксацией


200

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

Какой самый простой способ «отменить» это, не удаляя все документы?

Ответы:


244

использование svn revert --recursive folder_name


Предупреждение

svn revertопасен по своей сути, поскольку его цель - отбросить данные, а именно ваши незафиксированные изменения. После того, как вы вернетесь, Subversion не сможет вернуть эти незафиксированные изменения.

http://svnbook.red-bean.com/en/1.7/svn.ref.svn.c.revert.html


12
revertБолее подробно об этом - без указанной ревизии отменяет любые изменения, которые произошли с момента последней проверки, в том числе добавление / удаление изменений в расписании, для указанных файлов.
— Янтарь

где имя_папки - это родительская папка папки, в которой вы выполняли команду «Добавить»
— MacGyver

28
Этот ответ опасно неправильный - он отменит изменения, удалив ваши локальные копии файлов. Ответ Брайана Лейси ниже намного лучше.
— Генри Хенринсон

6
Ребята, это отвечает на первоначальный вопрос: файл или папка, которые были добавлены, а затем восстановлены, возвращаются только к не версионным, без удаления. Это именно то, что задает вопрос. Если вы используете его в измененных файлах, конечно, он отменяет их, но это был не вопрос. Это даже очень специфический вариант использования, показанный на связанной странице!
— Жюльен Лебосквен

2
@JulienLebosquain Хорошо, я думаю, вы и я понимаете эту фразу по-разному: не удаляя все документы . К сожалению, svn revertтакже удаляются вновь добавленные изменения в рабочей копии, восстанавливая последнюю HEADверсию. Я удалил свое понижение, но я все еще чувствую, что предупреждение важно.
— jpaugh

146

svn rm --keep-local folder_name

Примечание: в SVN 1.5.4 svn rm удаляет неверсированные файлы, даже если указан ключ --keep-local. См. Http://svn.haxx.se/users/archive-2009-11/0058.shtml для получения дополнительной информации.


9
Это полезно знать, так как позволяет вам просто отменить «svn add», не теряя изменений!
— Райан Х.

1
Вы уверены, что SVN 1.5.4 удаляет неверсионные файлы? Отчет не был воспроизводимым, и другого письма по этому поводу нет.
— Квентин Прадет

4
Это лучший ответ, если вы хотите «удалить» файлы, но при этом сохранить их. После этой команды файлы все еще будут там с? положение дел.
— Робин Циммерманн

32

Попробуйте svn revert filenameдля каждого файла, который вам не нужен и еще не зафиксирован. Или, альтернативно, сделайте svn revert -R folderдля проблемной папки, а затем повторите операцию с правильным игнорированием конфигурации.

Из документации:

 you can undo any scheduling operations:

$ svn add mistake.txt whoops
A         mistake.txt
A         whoops
A         whoops/oopsie.c

$ svn revert mistake.txt whoops
Reverted mistake.txt
Reverted whoops

4
Нет! Возврат является небезопасным, так как он теряет все локальные изменения
— jpaugh

@jpaugh - Это именно то, что я написал в ответе, нет?
— Боба

1
Оператор запросил (и то, что я ожидал) команду для отмены добавления без потери локальных изменений. svn revert, Ни один из ответов здесь не упоминает тот факт, что локальные изменения будут потеряны при возврате.
— jpaugh

3

Полный процесс (Unix svn package):

Проверьте файлы не в SVN:

> svn st -u folder 
? folder

Добавить все (включая игнорируемые файлы):

> svn add folder
A   folder
A   folder/file1.txt
A   folder/folder2
A   folder/folder2/file2.txt
A   folder/folderToIgnore
A   folder/folderToIgnore/fileToIgnore1.txt
A   fileToIgnore2.txt

Снимите флажок «Добавить» для всех * Игнорировать * файлов:

> cd folder

> svn revert --recursive folderToIgnore
Reverted 'folderToIgnore'
Reverted 'folderToIgnore/fileToIgnore1.txt'


> svn revert fileToIgnore2.txt
Reverted 'fileToIgnore2.txt'

Изменить SVN игнорировать на папку

svn propedit svn:ignore .

Добавьте две строки синглов только со следующим:

folderToIgnore
fileToIgnore2.txt

Проверьте, какие файлы будут загружены и зафиксировать:

> cd ..

> svn st -u
A   folder
A   folder/file1.txt
A   folder/folder2
A   folder/folder2/file2.txt


> svn ci -m "Commit message here"

1
Спасибо, именно то, что мне было нужно. Кажется, он отменил только операцию добавления, не затрагивая содержимое файла. Я боялся потерять локальные изменения, как прокомментировал предыдущие ответы, но, похоже, файлы не пострадали.
— Питер М. - выступает за Монику

1

Для файлов - svn revert filename

Для папок - svn revert -R folder


4
Нет! Возврат является небезопасным, так как он теряет все локальные изменения
— jpaugh
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.