Як видалити файл з контролю версій, не видаляючи його?


132

Якщо я запускаю svn rm file, файл видаляється з локальної робочої копії.

Що я зараз роблю:

$ cp file file2
$ svn rm file
$ svn ci
$ mv file2 file

Як я можу уникнути, коли svn також видаляє локальний файл під час використання svn rm?


Відповіді:


277

Ви хочете параметр --keep-localкомандного рядка. Це видаляє файл з контролю версій, не видаляючи його з вашої файлової системи.

$ svn rm --keep-local my_important_file

Примітка. Це --keep-localстосується лише svn rmвашої копії. Інші користувачі можуть видалити власну локальну копію файлу, якщо не існує конфлікту між їх локальною копією та сховищем через внесені зміни. Це може бути не бажаним результатом. Дивіться коментарі нижче.


4
Невже це ще не видалить його з чужих систем, коли вони оновлюються?
Nyerguds

1
@Nyerguds Це правильно, оскільки svn rm видаляє файли з сховища. У випадку, якщо ви хочете видалити файли з репо, але їх зберігайте локально на вашій машині, тоді ви б використовували прапор вище.
Грег Хілстон

6
@GregHilston Як я вже говорив, це не дуже допомагає в реальних програмах з кількома програмами. Повинен бути спосіб просто перевернути файл скрізь. Найпоширеніший випадок тут - випадково скоєні файли локальних налаштувань (дуже поширені в Java-проектах), але перетворення їх не повинно видаляти файли налаштувань інших користувачів.
Nyerguds

5
@GregHilston "фактичні проекти з декількома програмами" мали на увазі "системи інших людей". Проблема полягає в тому, що інші люди оновлюються та перезавантажують їх налаштування. Зазвичай це не надто проблематично, але досить дратує, щоб захотіти його вирішити. Але в той момент, коли вони вже перезаписали налаштування і тепер отримують svn "rm" при оновленні, він фактично видаляє потенційно життєво важливі локальні параметри з їхньої системи, тоді як він повинен бути просто неперерваний, щоб його можна було налаштувати на локальний знову налаштування.
Nyerguds

4
Якщо перезавантажити старіший файл із сховища, він позначає його як старішу версію, тобто оновлення просто видалить його знову. Не існує чистого способу зробити це, який не потребує вручну втручання на всіх машинах проекту.
Nyerguds

13

Видалення файлу з SVN без видалення локально ніде не є поширеною проблемою. Одним з відомих прикладів є файл .classpath у проекті Eclipse. Розміщення цього файлу конфігурації під SVN є дивовижним, якщо всі машини, що використовуються в проекті, мають однакову установку Eclipse та Java. Після того, як ця умова буде порушена, зобов’язані почати порушувати інші проекти Eclipse. Це пункт, з якого потрібно видалити файл з SVN, не видаляючи ist ніде.

svn rm --keep-local .classpath

виконує роботу на одній машині і в цей момент часу.

Проблема полягає в тому, що інші машини можуть втратити цей файл (при оновленні) або воскресити його (при фіксації). Недолік SVN полягає ні в тому, щоб обробляти його --keep-localв сховищі, ні поширювати його в інших робочих примірниках. Отже, на всіх інших машинах, описаних вище, команда повинна бути виконана - найкраще перед будь-яким введенням або оновленням.

Це, звичайно, спрацює на 90%, в кращому випадку. Видалення та повторна версія відбудеться несподівано. Моє рішення - мати кожну машину, до якої я маю прямий або непрямий доступ

svn rm --keep-local .classpath
copy .classpath .classpath-nameOfTheMachine
svn add .classpath-nameOfTheMachine

Це так відверто потворно, що його навряд чи можна назвати "рішенням". Тим не менш, це завжди дозволяло швидко ремонтувати будь-які пізніші аварії.


-3

У мене немає відповіді на це точне запитання, але я маю відповідь на відповідне запитання, яке полягає в тому, як видалити всі файли (тобто не конкретні) в каталозі з управління версіями, не видаляючи їх локально. Це рішення походить від реалізації Linux Linux.

ls -a .svn

повинен показати каталог svn, який зберігає керуючі дані. Просто:

rm -r .svn

позбудеться цього каталогу. Потім введіть:

svn status

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

Я сподіваюся, що це допомагає.


Пов'язане питання? Видалення файлу та видалення всієї робочої копії - це абсолютно різні речі IMHO.
Мелебій
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.