如何在工作副本中递归列出已切换的svn目录?

时间:2012-10-06 18:48:25

标签: svn recursion svn-switch

我已经从存储库中检出了一个工作副本,并将一些目录切换到不同的URL,但是在相同的repo(同一主机和svn服务器)上。

我如何列出这些切换目录?

我们使用许多切换用于内部目的,这将有助于在工作副本中轻松列出所有这些,直到消除了这种快速和脏的交换机使用。

2 个答案:

答案 0 :(得分:4)

(1)@ ks1322提供的答案很简洁,除了一个小调整外它工作正常:一个应该使用“^ URL”而不仅仅是“URL”,因为有些文件会报告一个Copied from URL行好。以下是我系统上的一些示例输出,显示了这个小问题:

URL: file:///C:/usr/tmp/SvnSandbox/branches/sub-branch1
URL: file:///C:/usr/tmp/SvnSandbox/branches/sub-branch1/commands
URL: file:///C:/usr/tmp/SvnSandbox/branches/sub-branch1/commands/show%20test.cmd
URL: file:///C:/usr/tmp/SvnSandbox/trunk/commands/subdir
URL: file:///C:/usr/tmp/SvnSandbox/trunk/commands/subdir/stuff.txt
URL: file:///C:/usr/tmp/SvnSandbox/branches/sub-branch1/commands/reversion_test.txt
URL: file:///C:/usr/tmp/SvnSandbox/branches/sub-branch1/file-on-branch1.txt
Copied From URL: file:///C:/usr/tmp/SvnSandbox/branches/branch1/file-on-branch1.txt
URL: file:///C:/usr/tmp/SvnSandbox/branches/sub-branch1/externals
URL: file:///C:/usr/tmp/SvnSandbox/branches/sub-branch1/file-on-branch-and-subbranch.txt
URL: file:///C:/usr/tmp/SvnSandbox/branches/sub-branch1/file-on-sub-branch1.txt

(2)对于Windows系统上的用户,一个等效的命令(使用PowerShell)是:

svn info --depth=infinity | Select-String ^URL

(3)但是对于具有更高信噪比的输出,请尝试:

Get-SvnInfo . -Recurse -ContainersOnly Path, URL | 
Format-Table Path, `
    @{ n='Branch'; `
       e={$_.URL -replace ".*(trunk|branches/[^/]*).*", '$1'} }

该序列的输出一目了然地显示您需要知道的内容。从我在第一个示例中使用的相同示例树中,可以看到以下内容:

Path                              Branch
----                              ------
commands                          branches/sub-branch1
externals                         branches/sub-branch1
commands\subdir                   trunk
externals\commonlib               trunk
externals\commonlib\textfiles     trunk

Get-SvnInfo cmdlet可从我的开源PowerShell库中获取 - 有关详细信息,请参阅API bookshelf上的PowerShell一书。)

答案 1 :(得分:2)

您可以使用以下命令递归列出工作副本中所有文件和目录的URL:

svn info --depth=infinity|grep URL

您将在输出中看到切换的URL,因此也会切换目录。