37

我访问了一个大型远程 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新找到的目录,但我想知道是否有更好的选择。

如何列出曾经提交到存储库的所有文件相反?我只对存储库的当前内容感兴趣,我无权访问svnadmin. 我也不能在存储库服务器上安装软件。

4

5 回答 5

62

这会递归地列出所有文件:

svn ls -R URL-OF-REPO
于 2013-02-01T13:00:08.107 回答
9
svn list --recursive https://myrespository.my.com/Myproject

我认为这适用于我尝试的当前和所有子目录。这一个也列出了所有分支和标签,以及它们的所有子目录和文件。

于 2013-02-01T12:59:55.763 回答
7

你可以试试我的实用程序fast-svn-crawler,它比“svn list --recursive”快得多。

$ svn-crawler https://myrespository.my.com/Myproject
于 2013-03-18T14:20:02.390 回答
2

没有网址

svn list --recursive -r HEAD

于 2014-07-28T14:03:07.143 回答
2

如果你想得到所有文件而不是文件夹的完整列表,你可以像这样通过管道svn listgrep命令:

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命令(打印换行符的数量,因为每个输出行仅包含一个路径),您可以获得mysubdir下所有文件的数量,如下所示

svn list -R svn://my.svnserver.com/myrepo/mysubdir | grep '[^\/]$' | wc -l
于 2015-12-24T14:17:42.293 回答