SVN: оформить заказ / экспортировать только структуру каталогов - PullRequest
35 голосов
/ 11 февраля 2009

Есть ли способ выполнить извлечение (или экспорт) SVN, который бы извлекал только структуру каталогов ; то есть файлов нет?

Ответы [ 12 ]

13 голосов
/ 11 февраля 2009
svn ls -R {svnrepo} | grep "/$" | xargs -n 1 mkdir -p

Экспорт, а не оформление заказа.

[Обновлено]

С оформлением заказа:

env REPO={repo} sh -c 'svn ls -R $REPO | grep "/\$" | xargs -n 1 svn co --depth=empty $REPO'

Это будет довольно медленно для всего слишком большого.

9 голосов
/ 23 июля 2009

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

5 голосов
/ 11 февраля 2009

Существует скрипт Python в инструментах Contributer Subversion , который создает структуру каталогов с пустыми файлами. С небольшим знанием Python не должно быть никаких трудностей, чтобы вообще не создавать файлы.

4 голосов
/ 08 августа 2011

Использование для проверки только структуры каталогов - это частичный обходной путь для невозможности исключить один или несколько каталогов из проверки. Предполагается, что стоимость только проверки дерева каталогов ничтожна по сравнению с проверкой полного источника. После проверки версионной структуры каталогов я мог бы использовать обновление Subversion и разреженные каталоги , чтобы выборочно выбирать, какие деревья каталогов должны иметь файлы.

4 голосов
/ 11 февраля 2009

SVN не может сделать это само по себе, но если вы просто хотите экспортировать структуру каталогов, попробуйте svn ls -R --xml, чтобы получить XML-список структуры каталогов, а затем воссоздать его вручную.

2 голосов
/ 11 мая 2015

Просто хотел бы добавить, что если вам нужно сделать это на стороне сервера (т.е. сначала не проверять хранилище), эквивалент svn ls равен svnlook tree --full-paths. Мне пришлось создать копию структуры папок репо 50 ГБ и использовать подсказки, которые я нашел здесь, чтобы сделать это без необходимости создавать рабочую копию всего этого.

Мой код был:

svnlook tree /path/to/repo --full-paths | grep "/$" | grep -v "^/$" | xargs -I {} mkdir -p "{}"

grep -v "^/$", потому что выходные данные содержали одну / (т.е. корневую папку файловой системы), и я не хотел возиться с этим.

2 голосов
/ 24 июня 2014

Это прекрасно работает

svn ls | xargs svn up -N

И затем, если вы хотите полностью проверить некоторые из этих каталогов, зайдите в них и используйте

svn ls | xargs svn up
1 голос
/ 17 октября 2012

Мой DotNet (LINQ) способ сделать это:

Сначала запустите команду svn list. И отправьте вывод в файл .xml.

"svn.exe" list "https://myserver.com:8443/svn/DotNet/src/v40Base/v40/" --recursive --username %USERNAME% --xml >>myfile.xml

А затем запустите некоторый код LINQ для файла .xml.

    private static void FindSVNDirectories()
    {

        string fileName = @"C:\temp\myfile.xml";

        XDocument xDoc = XDocument.Load(fileName);

        //XNamespace ns = XNamespace.Get("http://schemas.microsoft.com/developer/msbuild/2003");
        string ns = string.Empty;

        //List of directories
        var list1 = from list in xDoc.Descendants(ns + "list")
                    from item in list.Elements(ns + "entry")
                    where item.Attribute("kind").Value=="dir"
                    select new
                       {
                           mykind = item.Attribute("kind").Value,
                           myname = (item.Element(ns + "name").Value)
                       };

        StringBuilder sb = new StringBuilder();
        foreach (var v in list1)
        {
            sb.Append(v.ToString() + System.Environment.NewLine );
        }

        Console.WriteLine(sb.ToString());


    }
1 голос
/ 30 ноября 2011

Вы можете использовать этот скрипт, который выведет список репозиториев и создаст структуру в каталоге.

использование: perl checkout-structure.pl repos destdir

репозитории не должны быть корнем ваших репозиториев, они также могут указывать каталог.

Не в состоянии создавать dirs, содержащие акцентированные символы (àéîùç ...), но отлично работает с пробелами Для тех, у кого есть на это время, я думаю, что это проблема кодирования.

checkout-structure.pl:

#!perl

my @dirs;
my $repos = shift;
my $dest = shift;

@dirs = grep { /\/$/ && /^[^\.]/ } `svn list -R $repos`;

foreach(@dirs) {
    s/\/$//;
    chomp;
    mkdir("$dest/$_") or warn $!." trying to create $dest/$_";
}
1 голос
/ 19 августа 2011

на окнах и с TortoiseSVN вы можете сделать Checkout -> глубина проверки: только этот пункт таким образом, вы можете получить отдельные папки / файлы. Вы можете перестроить свою структуру таким образом (используя repobrowser). немного громоздко, но выполнимо, если ваша структура каталогов не слишком сложна. Я предпочел это, проверяя тысячи маленьких файлов (несколько гигабайт) по медленной сети ...

...