Як видалити керування Subversion для папки?


259

У мене є папка, c:\websites\testі вона містить папки та файли, перевірені із сховища, якого більше не існує. Як мені отримати Subversion, щоб зупинити відстеження цієї папки та будь-яких підпапок і файлів?

Я знаю, що я міг просто видалити .svnпапку, але в багатьох шарах є багато підпапок.


1
Якщо ви використовуєте TortioseSVN, я написав повідомлення в блозі, де показано найшвидший спосіб зробити це. У моєму дописі є покрокові інструкції із зображеннями. Ця публікація доступна за посиланням http://www.ecofic.com/about/blog/disconnecting-folder-from-svn
Чад Кемпбелл

Зверніться до моєї відповіді, яка допомогла багатьом. stackoverflow.com/questions/4889619 / ...
Ажіт Vaze

Відповіді:


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,

Сервер не матиме нічого спільного з піктограмами папок Tortoise. Але якщо вони не оновлюються, ви можете спробувати вбити процес TSVNCache. Він повинен перезапуститися автоматично.
аварія

1
У моєму випадку я видалив папку git також разом із папкою .svn
Афтаб Ахмед Калхоро

155

У Linux це буде працювати:

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

10
Працює і на Mac OS.
emish

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

Я отримую rm: зниклий операнд
Зима

119

Спробуйте експортувати svn .

Ви повинні вміти робити щось подібне:

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

А потім просто видаліть стару робочу копію.

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


4
Дякуємо, що надали відповідь, яка працює з командним рядком. :) Чудово підходить для тих, хто використовує термінали.
epochwolf

16
Якщо я правильно розумію, ця команда експортуватиме лише ті файли, які зараз перебувають під контролем підривної роботи. Тож якщо деякі файли чи папки ще не були додані певними до підривної роботи або були вилучені з контролю за підрив, ви втратите ці файли під час експорту ...
Кріс,

@Chris, так, ти маєш рацію. Це експортує лише файли з переглядом. Це добре для експорту коду та залишення похідних артефактів тощо, але це може бути не правильним інструментом для кожної роботи.
pkaeding

4
Варто зауважити, що це НЕ працює, якщо SVN-сервер давно не працює; якщо ви намагаєтеся експортувати за допомогою VisualSVN або Tortoise SVN, це намагається зв’язатися з сервером, але версія командного рядка вище працювала для мене без того, щоб SVN-сервер все ще працював.
Дейв

Я отримую помилку:svn: E000002: Can't stat '/.classpath': No such file or directory
ІгорГанапольський

32

Якщо ви працюєте з Windows, ви можете виконати пошук у цій папці .svnі перерахуватиме їх усі. Якщо натиснути клавішу Ctrl+ A, виберіть їх усі, а натискання клавіші видалити видалить усі "примхливі" підривні речі.


насмішливо ;-) Мені просто потрібно його почистити, і я поверну його до нового сховища.
Брайан Бутрійт

2
це також ВЕЛИКИЙ спосіб видалити навіть найсмішніші папки розширень на передній сторінці!
Брайан Бутрійт

Завантажте та використовуйте утиліту Everything Search для пошуку та видалення .svn папок зі швидкістю :) voidtools.com Тільки для Windows!
endo64


21

Я виявив, що вам навіть не потрібно копіювати у тимчасове місце. Ви можете зробити

svn export --force .

і .svn файли будуть видалені in situ , залишивши інші файли такими, які є. Дуже зручно і менш схильне до захаращення.


4
Я не знаю, що це, але мені це чомусь не вийшло.
Овен VII

1
Ця команда працює лише для робочої копії, а не для папки всередині неї. Можливо варіант того ж…?

2
Це не працюватиме, якщо встановлена ​​версія Subversion становить 1,7, а сховище - для 1,6. Однак, "оновлення svn" можна запустити до експорту, і воно запрацює.
Пітер Мортенсен

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

Жодна з цих відповідей не була задовільною для моєї ситуації. Я перебуваю на підривній версії 1.8, і у мене була робоча копія, яка мала лише одну .svnпапку в першій папці, root. Однак я хотів видалити деякі гілки з робочої копії.

Незалежно від того, що я робив, кожного разу, коли я запускав "оновлення", він відновив би ці файли та повернув їх усі. Я не хотів видаляти їх із сховища, просто зі свого комп’ютера - але мені потрібно було зберегти решту робочої копії в такт (таким чином не вдалося просто видалити папку .svn).

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

Це "оновлення" на стороні клієнта, що виключає конкретний каталог. Його можна знайти в посібниках на сайті svnbook.com . Якщо коротко, це описується як:

Починаючи з Subversion 1.6, ви можете використовувати інший підхід. Спочатку перегляньте каталог у повному обсязі. Потім запустіть svn update --set-глубину виключення в одному підкаталозі, який вас не цікавить.

Для TortoiseSVN ви можете також зробити те ж саме, клацнувши правою кнопкою миші папку, яку ви не хочете, натисніть на Update to revision..., а потім встановіть «Оновити глибину» на Exclude, як видно на цьому знімку екрана:

enter image description here


Однак ви не можете видалити кореневі папки робочої копії.
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 Explorer:

  • Видалити всі .svn
  • Видаліть усі, але корінь .svn
  • Видаліть локальні файли Repo

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 / Користувачі / Ім'я користувача / Документи / Програми_Розробка / ...

Ви могли перевірити, де ви

лс

команда, що списку ваших файлів.

  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

Користувачі NetBeans IDE можуть це робити, як показано нижче:

  1. Відкрийте проект SVN у своїй IDE
  2. Виберіть проект

    клацніть правою кнопкою миші Експорт субверсії

  3. У діалоговому вікні

    експорт у папку / var / tmp / ім'я проекту натиснути експорт чекати буде показано завершено, запитаєте, чи хочете ви відкрити це відкрити на льоту

  4. Тепер ви можете перейти на Git :)


0

Моя ідея - видалити папку .svn, а потім перемістити всі інші файли в нову папку. Це так просто.


0

Коли ви використовуєте ОС Windows, перейдіть до свого папки і перевірте, чи приховані файли відкриті, і тоді ви зможете побачити там папку SVN . Просто видаліть цю папку.


0

svn export працює чудово, але я думаю, що це:

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

Це видаляє його з вашого локального сховища.


0

Як важливий момент, коли ви використовуєте оболонку для видалення папки .svn, вам потрібно -depth аргумент для запобігання знайти команду введення в каталозі , який був просто знищений і показувати повідомлення про помилки , як , наприклад ,

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