Как удалить файл из системы контроля версий, не удаляя его? - PullRequest
124 голосов
/ 27 августа 2010

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

Что я делаю сейчас:

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

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

Ответы [ 3 ]

267 голосов
/ 27 августа 2010

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

$ svn rm --keep-local my_important_file

Примечание: --keep-local влияет только на svn rm вашей копии.У других пользователей может быть удалена их собственная локальная копия файла, если только между их локальной копией и хранилищем не возникнет конфликт из-за внесенных изменений.Это не может быть желаемым результатом.Смотрите комментарии ниже.

12 голосов
/ 24 мая 2016

Удаление файла из 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

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

0 голосов
/ 01 апреля 2016

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

ls -a .svn

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

rm -r .svn

избавится от этого каталога.Затем, набрав:

svn status

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...