Как убрать контроль Subversion для папки?


259

У меня есть папка, c:\websites\testи она содержит папки и файлы, которые были извлечены из хранилища, которое больше не существует. Как заставить Subversion перестать отслеживать эту папку и любые подпапки и файлы?

Я знаю, что могу просто удалить .svnпапку, но на многих слоях есть много подпапок.


1
Если вы используете TortioseSVN, я написал сообщение в блоге, в котором показан самый быстрый способ сделать это. В моем посте есть пошаговые инструкции с картинками. Этот пост доступен по адресу http://www.ecofic.com/about/blog/disconnecting-folder-from-svn
Чад Кэмпбелл,

Обратитесь к моему ответу, который помог многим. stackoverflow.com/questions/4889619/…
Аджит Вазе

Ответы:


258

Кроме того, если вы используете TortoiseSVN, просто экспортируйте в текущее местоположение рабочей копии, и он удалит папки и файлы .svn.

http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-export.html#tsvn-dug-export-unversion

Обновленный ответ для Subversion 1.7:
В Subversion 1.7 рабочая копия была значительно переработана. Существует только одна папка .svn, расположенная в основании рабочей копии. Если вы используете 1.7, то просто удалить папку .svn и ее содержимое - это простое решение (независимо от использования TortoiseSVN или инструментов командной строки).


8
Ссылка теперь 404. Новая ссылка: tortoisesvn.net/docs/release/TortoiseSVN_en/… Перегрузка при экспорте выглядит как особый случай, который удаляет только файлы .svn, если вы говорите также о сохранении неверсионных файлов.
lilbyrdie

после успешного удаления для возврата значка папки в обычном режиме перезапустите сервер SVN, и все
3ehrang

Сервер не будет иметь ничего общего с иконками папок черепахи. Но если они не обновляются, вы можете попытаться убить процесс TSVNCache. Он должен перезагрузиться автоматически.
crashmstr

1
В моем случае я удалил папку git также вместе с папкой .svn
Афтаб Ахмед Калхоро

155

В Linux это будет работать:

  find . -iname ".svn" -print0 | xargs -0 rm -r

10
Работает на Mac OS тоже.
Эмиш

2
перед запуском команды обязательно введите правильный каталог, например: cd mySVNdirectoryWhereToRemoveTheSubfolders
Camaleo

Я получаю rm: отсутствует операнд
зима

119

Попробуй свн экспорт .

Вы должны быть в состоянии сделать что-то вроде этого:

svn export /path/to/old/working/copy /path/to/plain/code

А затем просто удалите старую рабочую копию.

TortoiseSVN также имеет функцию экспорта , которая ведет себя так же.


4
Спасибо за предоставление ответа, который работает с командной строкой. :) Отлично подходит для тех из нас, кто использует терминалы.
epochwolf

16
Если я правильно понимаю, эта команда будет экспортировать только те файлы, которые в данный момент находятся под контролем Subversion. Так что, если некоторые файлы или папки еще не были добавлены определенно в Subversion или были удалены из управления Subversion, вы потеряете эти файлы при экспорте ...
Крис

@ Крис, да, ты прав. Это будет экспортировать только версионные файлы. Это хорошо для экспорта кода и оставления после него производных артефактов и т. Д., Но это не может быть подходящим инструментом для каждой работы.
pkaeding

4
Стоит отметить, что это все еще работает, если сервер SVN давно ушел; Если вы попытаетесь экспортировать с использованием VisualSVN или Tortoise SVN, то попытайтесь связаться с сервером, но версия командной строки, приведенная выше, сработала для меня без работы сервера SVN.
Дейв

Я получаю сообщение об ошибке:svn: E000002: Can't stat '/.classpath': No such file or directory
Игорь Ганапольский

32

Если вы работаете в Windows, то вы можете выполнить поиск в этой папке, .svnи это перечислит их все. Нажатие Ctrl+ Aвыберет все из них, а нажатие delete удалит все «надоедливые» вещи Subversion.


действительно надоедливо ;-) Мне просто нужно почистить его, и я верну его в новый репозиторий.
Брайан Боатрайт

2
это также отличный способ удалить даже самые надоедливые папки расширений главной страницы!
Брайан Боатрайт

Скачайте и используйте утилиту «Все для поиска», чтобы быстро находить и удалять папки .svn :) voidtools.com Только для Windows!
endo64


21

Я обнаружил, что вам даже не нужно копировать во временное местоположение. Вы можете сделать

svn export --force .

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


4
Я не знаю, что это такое, но у меня почему-то не получилось.
Овен VII

1
Эта команда работает только для рабочей копии, а не для папки внутри нее. Может быть вариант такой же ...?

2
Это не будет работать, если установленная версия Subversion - 1.7, а репозиторий - для 1.6. Тем не менее, «svn upgrade» может быть запущено до экспорта, и это будет работать.
Питер Мортенсен

11

Без вложенных оболочек в Linux для удаления .svnпапок:

find . -name .svn -exec rm -r -f {} +

rm = remove
-r = recursive (folders)
-f = force, avoids a lot of "a your sure you want to delete file XY".

8

Ни один из этих ответов не был удовлетворительным для моей ситуации. Я на Subversion 1.8, и у меня была рабочая копия, в которой была только одна .svnпапка в самой первой папке, root. Однако я хотел удалить несколько веток из рабочей копии.

Что бы я ни делал, всякий раз, когда я запускал «обновление», он восстанавливал эти файлы и возвращал их все обратно. Я не хотел удалять их из репозитория, только с моего компьютера - но мне нужно было держать остальную часть рабочей копии в такте (поэтому я не мог просто удалить папку .svn).

Решение? svn update --set-depth exclude <dir>

Это «обновление» на стороне клиента, исключающее конкретный каталог. Это можно найти в руководствах на svnbook.com . Короче говоря, это описывает это как:

Начиная с Subversion 1.6, вы можете выбрать другой подход. Во-первых, проверьте каталог в полном объеме. Затем запустите команду svn update --set-глубина exclude в одном подкаталоге, который вас не интересует.

Для TortoiseSVN вы также можете сделать то же самое, щелкнув правой кнопкой мыши по папке, которую вы не хотите, щелкните Update to revision..., а затем установите для параметра «Глубина обновления» значение Exclude, как показано на этом снимке экрана:

введите описание изображения здесь


Вы не можете удалить рабочие копии корневых папок.
JaBe

8

Это хорошо сработало для меня:

find directory_to_delete/ -type d -name '*.svn' | xargs rm -rf

Это такое простое решение, но работает как шарм.
Игорь Ганапольский

@IgorGanapolsky Я рад. Мое решение вам помогло.
Manikandan S

пока никто не бежал mkdir -p ';echo Hi Johnny;/.svn'- в этом случае вызов {} должен все еще работать
Никогда не спать снова

7

Используйте svn exportкоманду:

cd c:\websites\test
svn export c:\websites\test_copy

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


4

Просто удалите папку .svn внутри требуемой папки, тогда элемент управления будет автоматически удален.


3

В Windows вы можете добавить быструю ссылку для этого в контекстное меню вашего проводника. Просто запустите этот скрипт реестра:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Folder\shell\DeleteSVN]
@="Delete SVN Folders"

[HKEY_CLASSES_ROOT\Folder\shell\DeleteSVN\command]
@="cmd.exe /c \"TITLE Removing SVN Folders in %1 && COLOR 9A && FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\" \""

Это добавит пункт под названием «Удалить папки SVN» в меню правой кнопки мыши. Это удалит все папки .svn в этой папке и все подпапки.

Источник (немецкий): http://www.sjmp.de/software/alle-svn-ordner-und-dateien-loeschen/


2

Вы можете использовать «экспорт SVN» для создания копии этой папки без данных SVN, или вы можете добавить эту папку, чтобы игнорировать список


2

Для тех, кто использует NetBeans с SVN, есть опция 'Subversion> Export'.


2

Есть также хороший маленький инструмент с открытым исходным кодом под названием SVN Cleaner, который добавляет три параметра в контекстное меню проводника Windows:

  • Удалить все .svn
  • Удалить все, кроме рута .svn
  • Удалить локальные файлы репо

2

В Windows 7 можно просто открыть папку проекта и выполнить поиск «.svn», если скрытые файлы включены, и удалить все найденные папки .svn.


1
Win Win XP, которая прекрасно работает. Обратите внимание, что с SVN 1.7 .svnкаталоги больше не существуют, разбросанные вокруг. Для более подробной информации ознакомьтесь с subversion.apache.org/docs/release-notes/1.7.html#wc-ng
Жоао Коэльо


1

Ответ на удивление прост - экспортируйте папку в себя ! TortoiseSVN обнаруживает этот особый случай и спрашивает, хотите ли вы сделать рабочую копию неверсированной. Если вы ответите «да», управляющие каталоги будут удалены, и у вас будет простое неверсированное дерево каталогов.


1
Разве это не просто повторное цитирование принятого ответа, данного 5 лет назад?
Бен Терли

1

Другое (более простое) решение для Linux:

rm -r `find /path/to/foo -name .svn`

1

ЛУЧШИЙ И ЛЕГКИЙ ПУТЬ

Если вы думаете, что можете победить с помощью простой магической команды, вы провалились! SVN действительно хитрый и всегда так или иначе возвращается с новым сообщением об ошибке в XCode. Рано или поздно обещай ... так что умнее!

Как вы знаете, обычная и лучшая практика в XCode - это удаление файла на панели проекта слева. Если вы пропустили его и каким-то образом удалили в Finder, у вас проблемы. Большая проблема! Но вы могли бы решить это и сэкономить время, если вы делаете это хорошо.

Во-первых, вам нужно удалить ссылку SVN на файл или папку, прежде чем вы сможете удалить его на самом деле

  1. Если бы вы могли просто вернуть файл / папку из корзины или отменить последний шаг, когда вы удалили его, то ...

  2. Идите в Терминал - да, старый добрый терминал - и идите в это место. Лучше всего просто наберите cd, затем перетащите папку / файл в терминал. Вы получите нечто подобное

cd / Users / Имя пользователя / Documents / Apps_Developing / ...

Вы можете проверить, где вы с

Ls

Команда, которая перечисляет ваши файлы.

  1. Затем вам нужно удалить ссылку SVN с помощью команды SVN:

    svn delete --keep-local fileName_toDelete

Это удалит файл из репозитория SVN, НО вы должны удалить его вручную в Finder.


0

Я использую rsync:

# copy folder src to srcStripped excluding subfolders named '.svn'. retain dates, verbose output
rsync -av --exclude .svn src srcStripped

0

Пользователи среды IDE NetBeans могут сделать это, как показано ниже:

  1. Откройте проект SVN в вашей IDE
  2. Выберите проект

    щелкните правой кнопкой мыши Subversion Export

  3. В диалоговом окне

    экспорт в папку / var / tmp / имя_проекта нажмите экспорт ждать покажет завершено спросит хотите ли вы открыть это открыть на лету

  4. Теперь вы можете переключиться на Git :)


0

Моя идея состоит в том, чтобы удалить папку .svn, а затем переместить все другие файлы в новую папку. Это так просто.


0

Когда вы используете ОС Windows, перейдите в папку и проверьте, открыты ли скрытые файлы, а затем вы увидите там папку SVN . Просто удалите эту папку.


0

svn export отлично работает, но я думаю, что это:

svn rm --keep-local <folder/file>

Он удаляет его из вашего локального хранилища.


0

Жизненно важным моментом, когда вы используете оболочку для удаления папок .svn, вам нужен аргумент -depth, чтобы запретить команде find входить в только что удаленный каталог и отображать сообщения об ошибках, например, например:

"find: ./.svn: Нет такого файла или каталога"

В результате вы можете использовать findкоманду, как показано ниже:

cd [dir_to_delete_svn_folders]
find . -depth -name .svn -exec rm -fr {} \;


0

Используйте следующее:

svn rm --keep-local <folder name> удалить папку и все в ней.

svn rm --keep-local <folder name>/* сохранить папку, но удалить все в папке.

Вот пример того, что происходит:

~/code/web/sites/testapp $ svn rm --keep-local includes/data/*
D         includes/data/json
D         includes/data/json/index.html
D         includes/data/json/oembed
D         includes/data/json/oembed/1.0
D         includes/data/json/oembed/1.0/embed1.json
D         includes/data/json/oembed/1.0/embed2.json
D         includes/data/json/oembed/1.0/embed3.json

-1

В Windows 10 нам нужно перейти Windows Explorer, а затем перейти Viewи установить флажок View hidden files.

Затем перейдите к папке, с которой SVN связан в проводнике Windows, и удалите .svnпапку / файл.


Хотя я редактировал форматирование, этот ответ на самом деле не отвечает на вопрос. Пользователь уже знает, как удалить базовую .svnпапку, но он спрашивает обо всех подпапках. Пожалуйста, внимательно прочитайте вопрос.
CodeMouse92,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.