Если я запускаю 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, не удаляя его нигде.
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
выдаст сообщение об ошибке «предупреждение: этот каталог не является рабочей копией», потому что он больше не находится под контролем версий.
Надеюсь, это поможет.