Автоматически удалите Подверсию неимеющие версию файлы

108
задан Sam 16 August 2014 в 14:10
поделиться

10 ответов

Редактирование:

Подрывная деятельность 1.9.0 представила опцию сделать это:

svn cleanup --remove-unversioned

Перед этим, я использую этот сценарий Python, чтобы сделать это:

import os
import re

def removeall(path):
    if not os.path.isdir(path):
        os.remove(path)
        return
    files=os.listdir(path)
    for x in files:
        fullpath=os.path.join(path, x)
        if os.path.isfile(fullpath):
            os.remove(fullpath)
        elif os.path.isdir(fullpath):
            removeall(fullpath)
    os.rmdir(path)

unversionedRex = re.compile('^ ?[\?ID] *[1-9 ]*[a-zA-Z]* +(.*)')
for l in  os.popen('svn status --no-ignore -v').readlines():
    match = unversionedRex.match(l)
    if match: removeall(match.group(1))

Это, кажется, делает задание вполне прилично.

24
ответ дан Thomas Watnedal 24 November 2019 в 03:26
поделиться

это работает на меня в ударе:

 svn status | egrep '^\?' | cut -c8- | xargs rm

Seth Reno лучше:

svn status | grep ^\? | cut -c9- | xargs -d \\n rm -r 

Это обрабатывает неимеющие версию папки и пробелы в именах файлов

Согласно комментариям ниже, это только работает над файлами, о которых не знает подрывная деятельность (состояние =?). Что-либо, что подрывная деятельность делает , знает о (включая Проигнорированные файлы/папки), не будет удален.

при использовании подрывной деятельности 1.9 или больше, что можно просто использовать svn очистка , команда с - удаляет - неимеющий версию, и - удаляют - проигнорированные опции

138
ответ дан Community 24 November 2019 в 03:26
поделиться

Вы не можете только сделать экспорта в новое местоположение и сборку оттуда?

4
ответ дан leppie 24 November 2019 в 03:26
поделиться

Мое преобразование C# сценария Thomas Watnedals Python:

Console.WriteLine("SVN cleaning directory {0}", directory);

Directory.SetCurrentDirectory(directory);

var psi = new ProcessStartInfo("svn.exe", "status --non-interactive");
psi.UseShellExecute = false;
psi.RedirectStandardOutput = true;
psi.WorkingDirectory = directory;

using (var process = Process.Start(psi))
{
    string line = process.StandardOutput.ReadLine();
    while (line != null)
    {
        if (line.Length > 7)
        {
            if (line[0] == '?')
            {
                string relativePath = line.Substring(7);
                Console.WriteLine(relativePath);

                string path = Path.Combine(directory, relativePath);
                if (Directory.Exists(path))
                {
                    Directory.Delete(path, true);
                }
                else if (File.Exists(path))
                {
                    File.Delete(path);
                }
            }
        }
        line = process.StandardOutput.ReadLine();
    }
}
3
ответ дан Stefan Schultze 24 November 2019 в 03:26
поделиться

I couldn't get any of the above to work without additional dependencies I didn't want to have to add to my automated build system on win32. So I put together the following Ant commands - note these require the Ant-contrib JAR to be installed in (I was using version 1.0b3, the latest, with Ant 1.7.0).

Note this deletes all unversioned files without warning.

  <taskdef resource="net/sf/antcontrib/antcontrib.properties"/>
  <taskdef name="for" classname="net.sf.antcontrib.logic.ForTask" />

  <macrodef name="svnExecToProperty">
    <attribute name="params" />
    <attribute name="outputProperty" />
    <sequential>
      <echo message="Executing Subversion command:" />
      <echo message="  svn @{params}" />
      <exec executable="cmd.exe" failonerror="true"
            outputproperty="@{outputProperty}">
        <arg line="/c svn @{params}" />
      </exec>
    </sequential>
  </macrodef>

  <!-- Deletes all unversioned files without warning from the 
       basedir and all subfolders -->
  <target name="!deleteAllUnversionedFiles">
    <svnExecToProperty params="status &quot;${basedir}&quot;" 
                       outputProperty="status" />
    <echo message="Deleting any unversioned files:" />
    <for list="${status}" param="p" delimiter="&#x0a;" trim="true">
      <sequential>
        <if>
          <matches pattern="\?\s+.*" string="@{p}" />
          <then>
            <propertyregex property="f" override="true" input="@{p}" 
                           regexp="\?\s+(.*)" select="\1" />
            <delete file="${f}" failonerror="true" />
          </then>
        </if>
      </sequential>
    </for>
    <echo message="Done." />
  </target>

For a different folder, change the ${basedir} reference.

2
ответ дан 24 November 2019 в 03:26
поделиться

Я наткнулся на эту страницу, пытаясь сделать то же самое, но не для автоматизированной сборки.

Немного посмотрев, я обнаружил ' Расширенное контекстное меню ] 'в TortoiseSVN. Удерживая нажатой клавишу Shift, щелкните правой кнопкой мыши рабочую копию. Теперь в меню TortoiseSVN есть дополнительные параметры, включая « Удалить неверсированные элементы ... ».

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

71
ответ дан 24 November 2019 в 03:26
поделиться

Для людей, которым нравится делать это с помощью perl вместо python, оболочки Unix, java и т. Д. Это небольшой скрипт на perl, который также выполняет jib.

Примечание. удаляет все неверсированные каталоги

#!perl

use strict;

sub main()

{

    my @unversioned_list = `svn status`;

    foreach my $line (@unversioned_list)

    {

        chomp($line);

        #print "STAT: $line\n";

        if ($line =~/^\?\s*(.*)$/)

        {

            #print "Must remove $1\n";

            unlink($1);

            rmdir($1);

        }

    }

}

main();
0
ответ дан 24 November 2019 в 03:26
поделиться

Если вы используете командную строку Windows,

for /f "tokens=2*" %i in ('svn status ^| find "?"') do del %i

Улучшенная версия:

for /f "usebackq tokens=2*" %i in (`svn status ^| findstr /r "^\?"`) do svn delete --force "%i %j"

Если вы используете это в пакетном файле, вам необходимо удвоить % :

for /f "usebackq tokens=2*" %%i in (`svn status ^| findstr /r "^\?"`) do svn delete --force "%%i %%j"
9
ответ дан 24 November 2019 в 03:26
поделиться

См .: svn-clean

19
ответ дан 24 November 2019 в 03:26
поделиться

Если вы используете tortoise svn, для этого есть скрытая команда. Удерживая нажатой клавишу Shift, щелкните папку правой кнопкой мыши, чтобы открыть контекстное меню в проводнике Windows. Вы получите команду «Удалить неверсированные элементы».

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

SVN Extended context menu vs standard menu

3
ответ дан 24 November 2019 в 03:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: