Есть ли команда svn для удаления файлов только с клиента? - PullRequest
4 голосов
/ 31 марта 2009

В процессе выполнения вы можете выполнить команду sync to none для удаления файлов из клиента, но оставить их нетронутыми в хранилище (или хранилище в svn lingo).

p4 sync ... # нет

Есть ли в svn аналогичная команда?


Edit:

Спасибо тем, кто уже ответил.

уточнить:

Я не хочу использовать rm -rf в каталоге, поскольку он удалит все файлы, даже те, которые являются только локальными. Я также не хочу вручную удалять отдельные файлы, которые есть на клиенте и в хранилище.

Команда 'p4 sync ... # none' позволяет мне удалять с клиента файлы, которые находятся в хранилище / хранилище, и оставляет только локальные файлы.

С небольшим набором файлов это не имеет большого значения, но с многочисленными файлами это больно делать вручную.

Ответы [ 7 ]

3 голосов
/ 31 марта 2009

Вы можете просто удалить файл локально (используя команду удаления операционной системы). Хотя файл будет создан заново при следующем обновлении рабочей копии.

Также, начиная с версии 1.5, вы можете делать редкие проверки, где вы можете исключить запись некоторых частей хранилища в рабочую копию. Но если я правильно помню, это работает с каталогами, а не с отдельными файлами.

Вот часть примечаний к выпуску, описывающая функцию разреженного извлечения: http://subversion.tigris.org/svn_1.5_releasenotes.html#sparse-checkouts

А вот соответствующая глава книги SVN: http://svnbook.red -bean.com / ru / 1.5 / svn.advanced.sparsedirs.html

1 голос
/ 01 апреля 2009

с Subversion 1.6.0

svn update --set-depth exclude <file>

Это удалит файл из вашей рабочей копии и пометит, что он не должен возвращаться при обновлении.

1 голос
/ 31 марта 2009

Если вы хотите удалить только файлы в хранилище, но не те, которые доступны только локально, вы можете сделать это (в Linux / cygwin) с помощью простого сценария оболочки, что-то вроде

 svn  st -v | cut -c '41-' | xargs echo rm

( Примечание: удалить echo, чтобы действительно удалить что-либо).

Это, однако, удалит любой файл в хранилище, независимо от состояния локальной модификации.

1 голос
/ 31 марта 2009

То есть вы в основном хотите удалить все файлы с версиями и без изменений?

Вы можете создать скрипт, который перебирает все файлы и вызывает для них «svn status», удаляя файлы, в которых «svn status» выдает пустой вывод ...


РЕДАКТИРОВАТЬ: наивный скрипт Python для удаления файлов, которые не были изменены. Сохраняет неверсионные и локально модифицированные файлы ... это медленно , было бы лучше выдать "svn stat -v" и проанализировать это. Скрипт удаляет только файлы, он не касается папок.

import os
from subprocess import *

def isUnchangedInRepo(name):
    output = Popen(["svn","stat",name], stdout=PIPE).communicate()[0]
    return len(output) == 0

for dirname, dirnames, filenames in os.walk('.'):
    for filename in filenames:
        testfile = os.path.join(dirname, filename)
        if(testfile.find("\\.svn") == -1) and isUnchangedInRepo(testfile):
            print testfile
#           os.remove(testfile)
0 голосов
/ 01 апреля 2009

Или создайте патч. Это запишет все локальные изменения в файл патча.

В черепахе: щелкните правой кнопкой мыши -> tortoiseSVN-> создать патч. Позже вы можете применить этот файл исправления к другой рабочей копии.

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

0 голосов
/ 31 марта 2009

Используйте

svn rm folderToDelete --keep-local

с помощью TortoiseSVN, удерживая нажатой клавишу Shift, щелкнув правой кнопкой мыши папку, чтобы открыть расширенное меню , затем выберите «Удалить (сохранить локально)».

0 голосов
/ 31 марта 2009

С помощью TortoiseSVN вы можете создать шаблон игнорирования, локализованный для этой машины. Не уверен, подходит ли это вашей ситуации.

Хороший обзор на http://arcware.net/tortoisesvn-global-ignore-pattern-vs-svn-ignore/.

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