Если я запустил 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
Удаление файла из 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
Это настолько безобразно, что вряд ли можно назвать "решением". Тем не менее, он всегда позволял быстро ремонтировать любые последующие аварии.
У меня нет ответа на этот точный вопрос, но у меня есть ответ на связанный с ним вопрос, который заключается в том, как удалить все файлы (т.е. не конкретные) в каталоге из контроля версий, не удаляя их локально. Это решение исходит из реализации Scientific Linux.
ls -a .svn
должен показать каталог svn, в котором хранятся управляющие данные. Просто:
rm -r .svn
избавится от этой директории. Затем набрав:
svn status
выдаст предупреждение: этот каталог не является рабочей копией, потому что он больше не находится под управлением версиями.
Надеюсь, это поможет.