2010-10-29 114 views
7

这里是问题:如何复制目录树但排除.svn目录?

遍历所有文件和子文件夹复制所有内容除了.svn到另一个位置。

我能想到的一些漂亮的毛茸茸的方法可以做到这一点,但如果有谁知道真正简单的函数来拯救我一点时间,我想知道?谢谢。

+2

出于兴趣,并且已经看到了答案。我很愚蠢,但是从颠覆控制中解脱出来的原因是什么?这是一个真正的愚蠢问题! – brumScouse 2010-10-29 17:57:17

+0

我做了类似的事情在工作中备份库的本地副本,因为它是相当大的,每次结账,节省了大量的时间。这只是一个'学习/打破'的副本,不会被检查 - 否则我不会推荐这个。 – 2010-10-29 18:02:22

+2

你应该修改的问题更清楚地说明您正在使用的AutoIt,或删除标记,如果你不需要AutoIt的解决方案。 – 2010-10-29 18:05:02

回答

20

可以使用svn export命令。它将使用工作副本的内容(或存储库上的修订版)填充目标文件夹。

+0

只是一个咨询。 OP想要复制_all contents_,其中可能包含不受版本控制的文件。该文件明确指出'svn export'不会复制_files不受版本控制_。 – MSX 2016-10-11 03:10:54

+0

@msx是的,它可能有,根据字面问题的文字。幸运的是,在单词和短语下面的实际问题是关于版本控制的内容 – xtofl 2016-10-11 16:25:34

+0

@xtofl显然。我完全同意你的看法。接受您的答案为最佳表示OP对解决方案完全满意。我自己正在寻找一个解决方案来复制一切,但'.svn'文件夹和'svn export'不能解决我的问题。因此,我的评论......希望它能腾出时间让其他人寻找类似于我的问题的解决方案。 – MSX 2016-10-12 12:13:44

5

使用rsync和--exclude开关。

...虽然在这个特定的情况下,更好的选择是svn export

0

如果您使用TortoiseSVN,使用导出...

3

我们有时会使用超越比较(http://beyond-compare.softonic.com/):选择根源目录和目标之一,排除.svn并进行同步。如果您需要重新执行此操作,此功能很有用:将设置保存为项目。

1

所以用我最近在做这个的快速和肮脏的方法是蟒蛇:

for root, dirs, files in os.walk(inRootDirArg): 
     for d in dirs: 
      if d.startswith('.'):#excludes directories that start with '.' 
       continue 
      ...<logic to move your desired directories>... 

该解决方案忽略开头的任何目录,但如果我需要的是更具体的就不难“”修改它以省略.svn目录。

0

使用Cmd的

Dir/a-d/s/b >>1.txt 

,并使用了AutoIt读取文件,更好地利用_FileReadToArray,并在一个循环中,检查文件路径,如果它有一个” .svn'in它

0

如果AutoIt的是不需要的,你可以使用XCOPY与排除文件:

xcopy "..\source\" "..\destination\" /E /Y /R /exclude:exclude.txt 

exclude.txt应包含以下内容:

\.svn\