bash - 检查一个完整的 Subversion 树,不包括标签/和分支/

标签 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 批处理脚本,否则,任何bashzsh 脚本可以...

最佳答案

你需要的是SVN sparse directories .

您将需要一个骨架结构,并在到达它们时仅填充主干。类似于(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 元字符 - 如有必要,添加适当的引号。

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

关于bash - 检查一个完整的 Subversion 树,不包括标签/和分支/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30580501/

相关文章:

bash - 将子目录中的特定文件复制到一个目录中

svn - 从 svn 迁移时我应该如何组织 Mercurial 存储库

svn - 管理 SVN 存储库配置文件

svn - 使用svn + ssh时,Teamcity中的参数化 check out 规则会丢弃参数

ssl - Jenkins svn collabnet 构建失败

git - 查找进行 git 提交的第一个分支

java - 工作区设置与项目特定设置

linux - 有没有办法在 ssh 中运行本地 bash 函数

android - Bash:查找并替换脚本中的文本

macos - 如何将 bash 输出捕获到 Mac OS X 剪贴板?