列出所有的svn:externalsrecursion?

我怎样才能得到一个目录中的所有svn:externals(recursion)列表? 这有什么用处吗?

(我正在使用Windows(和乌龟))

我有一堆svn:外部链接到我的项目的不同的共享部分,当我分支它通常很容易find所有的外部和改变它们,以便在新的分支内的path的链接。

在工作副本的根目录下执行以下操作:

svn propget svn:externals -R 

正如在下面的评论中所讨论的那样,这不会在外部列出外部。

TortoiseSVN用户请注意:TortoiseSVN安装程序中有一个选项可以安装SVN命令行客户端。 这个选项默认是不启用的。

手动改变所有这些外部属性听起来很乏味。 你看过Subversion 1.5中添加的外部新function吗?

Subversion 1.5在缓解这些挫折方面迈出了巨大的一步。 如前所述,在新的外部定义格式中使用的URL可以是相对的,Subversion提供了用于指定多种URL相关性的语法魔法。

../

相对于设置了svn:externals属性的目录的URL

^ /

相对于svn:externals属性版本库的根目录

//

相对于设置了svn:externals属性的目录的URL的scheme

/

相对于svn:externals属性所在的服务器的根URL

也许其中之一会有所帮助? 我想这取决于你是如何分支和你的仓库结构看起来像。

我的解决方法为TortoiseSVN:

从SVN上下文菜单中打开“Branch / tag …”对话框。 下面的对话框显示所有的外部数据,包括嵌套的外部数据。

也许,作为一个解决方法,你可以用所有外部设置在同一个文件夹上的方式来构build项目,例如在Trunk下面的项目文件夹中。 (这并不意味着所有的外部文件夹必须在同一深度。)然后,你可以右键点击你的项目文件夹,然后属性…,然后选项卡Subversion,然后属性…然后双击svn:externals。

我使用了Wim Coenen的答案,并编写了以下脚本来创build所有修订的列表:

 getSvnRevs() { cd "$1" wcver="$(svnversion)" [ -n "$wcver" ] || panic "Unable to get version for $wcdir" echo "$1: $wcver" svn propget svn:externals -R | while read abcde; do [ -n "$a" ] || continue if [ "$b" = "-" ]; then wcparent="$a" wcdir="$wcparent/$c" [ -z "$e" ] || panic "Invalid format #1" else [ -n "$wcparent" ] || panic "Invalid format #2" wcdir="$wcparent/$a" [ -z "$c" ] || panic "Invalid format #3" fi [ -d "$wcdir" ] || panic "Invalid directory: $wcdir" wcver="$(svnversion "$wcdir")" [ -n "$wcver" ] || panic "Unable to get version for $wcdir" echo "$1/$wcdir: $wcver" done } 

幸运的是,我没有嵌套的外部,所以我没有testing这个,我想这是行不通的。 但是如果你需要这个,recursion地调用这个函数就足够了。 另外,我从来没有testing过需要转义的文件名。 那么它可能不会工作。

免责声明:我知道原来的问题是关于Windows,shell脚本不会在那里工作,除非你使用cygwin或类似的。

我拿丹尼尔阿尔德的答案 ,删除svnversion调用,并使其recursion(注意:如果在源或目的地有一个空间, read abcde不起作用)。 这是一个bash脚本,所以你要么需要像Cygwin或使用Linux Windows子系统 。

 getSvnExternals() { svnbase="$1" svnpath="$2" svn propget svn:externals -R "$svnbase/$svnpath" 2> /dev/null | while read abcde; do [ -n "$a" ] || continue if [ "$b" = "-" ]; then wcparent="$a" external="$c" wcdir=$(echo "$wcparent/$d" | sed s#^./##) [ -z "$e" ] || echo "WARNING: Invalid format #1. line='$a $b $c $d $e'" else [ -n "$wcparent" ] || echo "WARNING: Invalid format #2. wcparent=$wcparent" external="$a" wcdir=$(echo "$wcparent/$b" | sed s#^./##) [ -z "$c" ] || echo "WARNING: Invalid format #3. line='$a $b $c $d $e'" fi echo "$1/$wcdir: $external" ## recurse into external directory [ -d "$wcdir" ] && getSvnExternals "$1/$wcdir" done }