Якщо я запускаю svn rm file
, файл видаляється з локальної робочої копії.
Що я зараз роблю:
$ cp file file2
$ svn rm file
$ svn ci
$ mv file2 file
Як я можу уникнути, коли svn також видаляє локальний файл під час використання svn rm
?
Якщо я запускаю svn rm file
, файл видаляється з локальної робочої копії.
Що я зараз роблю:
$ cp file file2
$ svn rm file
$ svn ci
$ mv file2 file
Як я можу уникнути, коли svn також видаляє локальний файл під час використання svn rm
?
Відповіді:
Ви хочете параметр --keep-local
командного рядка. Це видаляє файл з контролю версій, не видаляючи його з вашої файлової системи.
$ svn rm --keep-local my_important_file
Примітка. Це --keep-local
стосується лише svn rm
вашої копії. Інші користувачі можуть видалити власну локальну копію файлу, якщо не існує конфлікту між їх локальною копією та сховищем через внесені зміни. Це може бути не бажаним результатом. Дивіться коментарі нижче.
Видалення файлу з 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
Це так відверто потворно, що його навряд чи можна назвати "рішенням". Тим не менш, це завжди дозволяло швидко ремонтувати будь-які пізніші аварії.
У мене немає відповіді на це точне запитання, але я маю відповідь на відповідне запитання, яке полягає в тому, як видалити всі файли (тобто не конкретні) в каталозі з управління версіями, не видаляючи їх локально. Це рішення походить від реалізації Linux Linux.
ls -a .svn
повинен показати каталог svn, який зберігає керуючі дані. Просто:
rm -r .svn
позбудеться цього каталогу. Потім введіть:
svn status
видасть помилку "Попередження: цей каталог не є робочою копією", тому що він більше не знаходиться під контролем версій.
Я сподіваюся, що це допомагає.