«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.