如何在结账过程中过滤掉'.svn'文件?

时间:2010-12-18 07:33:46

标签: svn filter svn-checkout

Subversion结帐会在'.svn'树下生成大量文件。 有没有办法在结账过程中过滤掉'.svn'文件?

谢谢,

2 个答案:

答案 0 :(得分:7)

请参阅svn export。它应该有所帮助。

第一个表单从URL指定的存储库导出一个干净的目录树,如果给出了修订版REV,则在HEAD处导入PATH。如果省略PATH,则URL的最后一个组件用于本地目录名。

正如yodaj007所说,这将从修订中提取所有文件,而目录将不是修订控制的文件。要获取修订版受控目录,请使用通常的svn co

答案 1 :(得分:2)

我知道这是一篇很晚的帖子,但如果您不想将.svn文件存储在您的目录中,因为您想将其压缩或将其移交给其他没有这些文件的人,请使用此perl脚本删除.svn文件。请注意,使用此方法,您将无法使用svn commit提交回存储库,因为您删除了.svn文件。

#!/usr/bin/perl

use File::Path;
use strict;

# Only run program on valid input MAX/MIN_INPUT = 1
if ( @ARGV == 1 ) {
    my $file = $ARGV[0];
    #Do some regular expression verrification
    &dot_svn_del_func ( $ARGV[0] );
} else {
    die "ERROR: to many arguments passed";
}

sub dot_svn_del_func {
    my $path = shift;
    opendir (DIR, $path) or die "Unable to open $path: $!";
        my @files = grep { !/^\.{1,2}$/ } readdir (DIR);
        closedir (DIR);
        @files = map { $path . '/' . $_ } @files;
        for (@files) {
            if (-d $_) {
            my $svn_found = 0;
            my $path = $_;
            my @path_components = split(/\//,$path);
            my $path_count = 0;
            foreach my $new_path (@path_components) {
                if ( $new_path eq ".svn" ) {
                    rmtree($_,1,1);
                    $svn_found = 1;
                }   
                $path_count++;
            }
            if ( $svn_found == 0 ) {
                #print "Making recursive calls from ".$_."\n";
                        &dot_svn_del_func ( $_ );
            }
        }
   }

}