web-dev-qa-db-ja.com

SVN:ディレクトリ構造のみをチェックアウト/エクスポートします

フェッチするSVNチェックアウト(またはエクスポート)を実行する方法はありますかディレクトリ構造のみ;つまり、ファイルはありませんか?

35
petr k.
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'

これは、大きすぎるものではかなり遅くなります。

13
Dave Stenglein

Checkoutコマンドに-non-recursiveを指定できます。これは、必要なものを取得するのに役立つ場合があります。

9
dave

Subversionのcontribツールのpythonスクリプト があり、空のファイルでディレクトリ構造を作成します。 pythonの知識が少しあれば、ファイルの作成をスキップするのは難しいことではありません。

5
jor

ディレクトリ構造のみをチェックアウトするための使用は、1つ以上のディレクトリをチェックアウトから除外できないようにするための部分的な回避策です。完全なソースをチェックアウトする場合と比較して、ディレクトリツリーをチェックアウトするだけのコストはごくわずかであると想定されています。バージョン管理されたディレクトリ構造をチェックアウトすると、Subversionの更新と スパースディレクトリ を使用して、ファイルが必要なディレクトリツリーを選択的に選択できます。

4

SVN自体はそれ自体を行うことはできませんが、ディレクトリ構造をエクスポートするだけの場合は、svn ls -R --xmlを試してディレクトリ構造のXMLリストを取得し、手動で再作成してください。

4
Anton Gogolev

追加したかったのですが、このサーバー側で行う必要がある場合(つまり、最初にリポジトリをチェックアウトしない場合)、svn lsに相当するのはsvnlook tree --full-pathsです。 50GBのリポジトリのフォルダー構造のコピーを作成する必要があり、ここで見つけたヒントを使用して、全体の作業コピーを作成する必要はありませんでした。

私のコードは:

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

grep -v "^/$"は、出力に単一の/(つまり、ファイルシステムのルートフォルダー)が含まれていて、それをいじりたくなかったためです。

2
user4886484

これは完全に機能します

svn ls | xargs svn up -N

そして、それらのディレクトリのいくつかを完全にチェックアウトしたい場合は、それらの内部に移動して使用します

svn ls | xargs svn up
2
Darshan

このスクリプトを使用して、リポジトリをsvnリストし、ディレクトリに構造を作成できます。

使用法:Perl checkout-structure.pl repos destdir

リポジトリはリポジトリのルートであってはなりません。ディレクトリを正確にすることもできます。

強調された文字(àéîùç...)を含むdirを作成できませんが、スペースでは正常に機能します。そのための時間があるこれらの人にとって、それはエンコーディングの問題だと思います。

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
E. Fetille

これを行うための私のDotNet(LINQ)の方法:

まず、svnlistコマンドを実行します。そして、出力を.xmlファイルにプッシュします。

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

次に、.xmlファイルに対していくつかのLINQコードを実行します。

    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
granadaCoder

windowsおよびTortoiseSVNを使用すると、チェックアウト->チェックアウト深度を実行できます:このアイテムのみ。このようにして、単一のフォルダ/ファイルを取得できます。この方法で構造を再構築できます(repobrowserを使用)。少し面倒ですが、ディレクトリ構造がそれほど複雑でなければ実行可能です。私は遅いネットワーク上で何千もの小さなファイル(数ギガバイト)をチェックアウトするよりもこれを好みました...

1
didito

svn help coをざっと見てみると、それを行う方法があることがわかりません。ダウンロードしたライブラリの新しいバージョン(ベンダーブランチなど)からリポジトリを更新するために以前に行ったことは、.svnフォルダー以外のすべてを削除することです。

#!/bin/sh
find ./ -type f | grep -v .svn | xargs rm -f

そもそもこれらのファイルをチェックアウトする必要がないようにしようとしている場合は特に効率的ではありませんが、同じ結果になるはずです。

0
Mike Houston