我访问大型远程SVN存储库。由于我通常只需要其内容的一小部分,我做了“稀疏结账”:
svn checkout --depth empty svn+ssh://... src
每当我需要存储库中的文件夹时,我就可以
svn up folder
当我不再需要它时,我会使用
svn up --set-depth exclude folder
但现在我需要存储库中所有文件的完整列表,我不想只是为了获取文件和文件夹名称而进行完整的检查。
我已经尝试了svn ls -R
,它确实会列出一些我没有检查过的文件,但仍然有一些遗漏。我知道,因为它确实显示当前目录中的所有内容。现在我可以为每个新发现的目录半手动执行svn ls
和svn up --depth empty
,但我想知道是否有更好的替代方案。
与How do I list all files ever committed to the repository?相比,我只对存储库的当前内容感兴趣,而且我无法访问svnadmin
。我也不能在存储库服务器上安装软件。
答案 0 :(得分:53)
以递归方式列出所有文件:
svn ls -R URL-OF-REPO
答案 1 :(得分:8)
svn list --recursive https://myrespository.my.com/Myproject
我认为这适用于我尝试过的当前和所有子目录。这个列出了所有分支和标签,以及它们的所有子目录和文件。
答案 2 :(得分:6)
您可以尝试我的实用程序fast-svn-crawler,它是much faster而不是“svn list --recursive”。
$ svn-crawler https://myrespository.my.com/Myproject
答案 3 :(得分:1)
没有网址
svn list --recursive -r HEAD
答案 4 :(得分:0)
如果您想获得所有文件而不是文件夹的完整列表,可以像这样输入 svn list 和 grep 命令:
svn list -R svn://url/to/your/main/folder/on/repo | grep '[^\/]$'
列出的文件夹路径
svn list -R svn:// url / to / your / main / folder / on / repo
始终以“/”结尾,而文件路径则不然。输出作为输入传递给
grep'[^ \ /] $'
排除所有具有尾随“/”的路径;其余路径仅与文件相关。
示例:假设我们在 my.svnserver.com 上有一个名为 myrepo 的存储库作为域,我们希望获得列在子目录中的所有文件 myrepo 即 mysubdir :命令是
svn list -R svn://my.svnserver.com/myrepo/mysubdir | grep '[^\/]$'
此外,如果将结果传递给 wc -l </ em>命令(打印换行符的数量,因为每个输出行只包含一个路径),您可以获取所有文件的数量 mysubdir ,像这样
svn list -R svn://my.svnserver.com/myrepo/mysubdir | grep '[^\/]$' | wc -l