フェッチするSVNチェックアウト(またはエクスポート)を実行する方法はありますかディレクトリ構造のみ;つまり、ファイルはありませんか?
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'
これは、大きすぎるものではかなり遅くなります。
Checkoutコマンドに-non-recursiveを指定できます。これは、必要なものを取得するのに役立つ場合があります。
Subversionのcontribツールのpythonスクリプト があり、空のファイルでディレクトリ構造を作成します。 pythonの知識が少しあれば、ファイルの作成をスキップするのは難しいことではありません。
ディレクトリ構造のみをチェックアウトするための使用は、1つ以上のディレクトリをチェックアウトから除外できないようにするための部分的な回避策です。完全なソースをチェックアウトする場合と比較して、ディレクトリツリーをチェックアウトするだけのコストはごくわずかであると想定されています。バージョン管理されたディレクトリ構造をチェックアウトすると、Subversionの更新と スパースディレクトリ を使用して、ファイルが必要なディレクトリツリーを選択的に選択できます。
SVN自体はそれ自体を行うことはできませんが、ディレクトリ構造をエクスポートするだけの場合は、svn ls -R --xml
を試してディレクトリ構造のXMLリストを取得し、手動で再作成してください。
追加したかったのですが、このサーバー側で行う必要がある場合(つまり、最初にリポジトリをチェックアウトしない場合)、svn ls
に相当するのはsvnlook tree --full-paths
です。 50GBのリポジトリのフォルダー構造のコピーを作成する必要があり、ここで見つけたヒントを使用して、全体の作業コピーを作成する必要はありませんでした。
私のコードは:
svnlook tree /path/to/repo --full-paths | grep "/$" | grep -v "^/$" | xargs -I {} mkdir -p "{}"
grep -v "^/$"
は、出力に単一の/(つまり、ファイルシステムのルートフォルダー)が含まれていて、それをいじりたくなかったためです。
これは完全に機能します
svn ls | xargs svn up -N
そして、それらのディレクトリのいくつかを完全にチェックアウトしたい場合は、それらの内部に移動して使用します
svn ls | xargs svn up
このスクリプトを使用して、リポジトリを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/$_";
}
これを行うための私の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());
}
windowsおよびTortoiseSVNを使用すると、チェックアウト->チェックアウト深度を実行できます:このアイテムのみ。このようにして、単一のフォルダ/ファイルを取得できます。この方法で構造を再構築できます(repobrowserを使用)。少し面倒ですが、ディレクトリ構造がそれほど複雑でなければ実行可能です。私は遅いネットワーク上で何千もの小さなファイル(数ギガバイト)をチェックアウトするよりもこれを好みました...
svn help co
をざっと見てみると、それを行う方法があることがわかりません。ダウンロードしたライブラリの新しいバージョン(ベンダーブランチなど)からリポジトリを更新するために以前に行ったことは、.svnフォルダー以外のすべてを削除することです。
#!/bin/sh
find ./ -type f | grep -v .svn | xargs rm -f
そもそもこれらのファイルをチェックアウトする必要がないようにしようとしている場合は特に効率的ではありませんが、同じ結果になるはずです。