签出完整的Subversion树,不包括标签/和分支/

时间:2015-06-01 18:21:57

标签: bash svn version-control cmd branch

我正在使用包含100个Maven子项目的公司源代码树。由于每个子项目都有自己的branches/tags/子文件夹布局,因此整个树的布局如下:

root/
    some/intermediate/dirs/
        project1/
            branches/
                ...
            tags/
                ...
            trunk/
                ...
        project2/
            branches/
                ...
            tags/
                ...
            trunk/
                ...
        ...
        projectN/
            branches/
                ...
            tags/
                ...
            trunk/
                ...
    other/intermediate/dirs/
        projectN+1/
            ...

我需要查看所有项目的trunk/版本,但不幸的是,命令$ svn co protocol://path/to/repo/root/会检查完整版本的标记和分支,从而留下数以千计的冗余源树并使用 永远

此外,N是一个非常大的数字,我单独进入并查看每个项目的行李箱是不切实际的。

是否有svn命令可以让我跳过tags/branches/树?

我发现a blog that explains how to write a Java program to accomplish this using the SVNKit但我希望我可以使用命令行中的单行程来完成它。

更新:首选只使用svn可执行文件的解决方案,但是如果需要一些shell脚本,我更喜欢Windows批处理脚本,或者如果没有,那么任何{{1 }}或bash脚本会...

3 个答案:

答案 0 :(得分:7)

您需要的是SVN sparse directories

你想要一个骨架结构,当你到达它们时只填写trunk个。像(Bourne shell语法):

svn co --depth empty protocol://path/to/repo/root/
for in in some intermediate dirs; do svn up --set-depth empty $i; cd $i; done
svn up --depth immediates .
for i in *; do svn up --depth infinity $i/trunk; done

我假设有问题的目录都没有包含空格或shell元字符 - 必要时添加适当的引用。

当使用稀疏目录时要小心 - 很容易忘记被排除的内容和实际存在的内容...

答案 1 :(得分:0)

我不知道您需要哪种输出格式,但此批次行可能有所帮助:

dir /s /b /ad |findstr /v /R "\<tags\>  \<branches\>"

findstr可以使用"\<word\>"搜索“字词”,因此不会排除moretagstagsmore。见findstr /?

或者如果您只对* trunk“子目录感兴趣:

dir /s /b /ad |findstr  "\<trunc\>" 

答案 2 :(得分:0)

我使用--set-depth empty代替-set-depth=excludefound的建议。 F.e。:

svn update --set-depth=exclude <foldername>

更方便。如果在您的示例中,您在目录some/intermediate/dirs/project1/中:

svn up --set-depth empty tags

然后:

svn up

目录tags将再次出现,并将下载所有内容。因此,您只需要从后代目录进行更新。

但是:

svn update --set-depth=exclude tags

目录将被删除,甚至可以从svn up目录执行root/ !更新将只对有叶目录进行!

要恢复初始状态并返回所有以这种方式删除的目录,您可以执行以下操作:

svn up --set-depth infinity .