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

如何在工作副本中递归列出交换的svn目录?,svn,recursion,svn-switch,Svn,Recursion,Svn Switch,我已从存储库中签出一个工作副本,并将一些目录切换到不同的URL,但位于同一个repo(同一主机和svn服务器)上 如何列出这些交换目录 我们为内部目的使用了许多切换,这将有助于在工作副本中轻松列出所有这些,直到消除这种快速而肮脏的切换用法。您可以使用如下命令递归列出工作副本中所有文件和目录的URL: svn info --depth=infinity|grep URL 您将在输出中看到切换的URL,因此也会看到切换的目录。您可以使用如下命令递归列出工作副本中所有文件和目录的URL: svn i

我已从存储库中签出一个工作副本,并将一些目录切换到不同的URL,但位于同一个repo(同一主机和svn服务器)上

如何列出这些交换目录


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

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

svn info --depth=infinity|grep URL

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

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

svn info --depth=infinity|grep URL
您将在输出中看到切换的URL,因此也会看到切换的目录。

(1)由@ks1322提供的答案很简洁,除了一个小的调整外,它工作良好:应该使用“^URL”而不仅仅是“URL”,因为一些文件也会报告从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)是:


(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
(我的开源PowerShell库中提供了
Get-SvnInfo
cmdlet——有关详细信息,请参阅my上的PowerShell手册。)

(1)由@ks1322提供的答案很简洁,除了一个小的调整外,它运行良好:应该使用“^URL”而不仅仅是“URL”因为有些文件也会报告从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)是:


(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
(我的开源PowerShell库中提供了
Get-SvnInfo
cmdlet--有关详细信息,请参阅我的上的PowerShell手册。)