Как удалить файл из контроля версий без его удаления?

Если я запустил svn rm file, файл будет удален из локальной рабочей копии.

Теперь я делаю следующее:

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

Как избежать svn также удалять локальный файл при использовании svn rm?

Ответ 1

Вам нужна опция командной строки --keep-local. Это удаляет файл из контроля версий, не удаляя его из вашей файловой системы.

$ svn rm --keep-local my_important_file

Ответ 2

Удаление файла из SVN без его удаления локально нигде не является общей проблемой. Одним из ярких примеров является файл .classpath в проекте Eclipse. Помещение этого файла конфигурации в SVN изумительно, если все машины, используемые в проекте, имеют одну и ту же установку Eclipse и Java. Как только это условие нарушено, он начинает разорвать другие проекты Eclipse. Это то, что нужно удалить файл из SVN, не удаляя нигде.

svn rm --keep-local .classpath

отлично работает на одной машине и в этот момент времени.

Проблема в том, что другие машины могут потерять этот файл (при обновлении) или воскресить его (при фиксации). Недостаток SVN не должен обрабатывать --keep-local в репозитории и не распространять его на другие рабочие копии. Следовательно, на всех других машинах выше команда должна быть выполнена — лучше всего до фиксации или обновления.

Это, конечно, будет работать в лучшем случае на 90%. Исключения и повторные версии будут происходить внезапно. Мое решение состоит в том, чтобы иметь доступ к каждой машине, к которой я имею прямой или косвенный доступ,

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

Это настолько безобразно, что вряд ли можно назвать "решением". Тем не менее, он всегда позволял быстро ремонтировать любые последующие аварии.

Ответ 3

У меня нет ответа на этот точный вопрос, но у меня есть ответ на связанный с ним вопрос, который заключается в том, как удалить все файлы (т.е. не конкретные) в каталоге из контроля версий, не удаляя их локально. Это решение исходит из реализации Scientific Linux.

ls -a .svn

должен показать каталог svn, в котором хранятся управляющие данные. Просто:

rm -r .svn

избавится от этой директории. Затем набрав:

svn status

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

Надеюсь, это поможет.