Svn 用于选择版本控制下的文件的全局限定符

Svn 用于选择版本控制下的文件的全局限定符,svn,zsh,Svn,Zsh,设想一个目录/path/to/trunk,它受svn的版本控制。虽然目录及其某些文件处于版本控制之下,但其他文件则不处于版本控制之下 问题:如何创建一个glob来选择受版本控制且速度快的文件 解决方法:不要使用glob,而是使用svn ls和数组 array=( "${(@f)$(svn ls -R /path/to/trunk)}" ) 我不是这个解决方案的超级粉丝,因为你可以用讨厌的字符运行文件名,你应该这样做 可能的解决方案:使用函数和执行全局限定符: $ undersvn() { sv

设想一个目录
/path/to/trunk
,它受svn的版本控制。虽然目录及其某些文件处于版本控制之下,但其他文件则不处于版本控制之下

问题:如何创建一个glob来选择受版本控制且速度快的文件

解决方法:不要使用glob,而是使用
svn ls
和数组

array=( "${(@f)$(svn ls -R /path/to/trunk)}" )
我不是这个解决方案的超级粉丝,因为你可以用讨厌的字符运行文件名,你应该这样做

可能的解决方案:使用函数和执行全局限定符:

$ undersvn() { svn ls --depth empty "$REPLY" >/dev/null 2>&1 }
array=( /path/to/trunk/**/*(+undersvn) )
这种方法很好,效果也很好。但是,在包含大量文件的大型树上,当它为找到的每个文件执行
svnls
时,速度会变慢

有没有办法更快/更好地做到这一点


您可能已经意识到这一点,但值得明确指出的是:拥有一个能够识别源代码控制下的文件的glob将需要一个
zsh
所没有的Subversion集成级别。显然,svn的
ls
命令并不是为安全的机器消费而设计的。将其与具有打开NUL定界的
-z
标志的
git ls文件进行比较。也许您需要编写自己的svn“扩展”来实现这一点;没有太多的svn经验,我不知道它的可扩展性有多强,但一个粗略的搜索似乎说它不像git或hg那样可扩展,不幸的是。你可能已经意识到了这一点,但值得明确指出的是:拥有一个能够识别源代码控制下的文件的glob需要一个
zsh
所没有的Subversion集成级别。显然,svn的
ls
命令不是为安全的机器消费而设计的。将其与具有打开NUL定界的
-z
标志的
git ls文件进行比较。也许您需要编写自己的svn“扩展”来实现这一点;我对svn没有太多的经验,我不知道它的可扩展性有多强,但很遗憾,粗略的搜索似乎表明它的可扩展性不如git或hg。