Svn 用于检查转换结果的Makefile规则

Svn 用于检查转换结果的Makefile规则,svn,makefile,sed,Svn,Makefile,Sed,试图建立一个makefile规则来检查svversion是否给出了正确的结果 通常,它应该返回类似以下内容之一的内容: 1023:1055M 1056 但是,它可能会出现如下错误: svn: This client is too old to work with working copy '.'; please get a newer Subversion client 以下是我根据其他帖子对规则的看法: test2: @if [ $$(svnversion | sed s/[0-9

试图建立一个makefile规则来检查svversion是否给出了正确的结果

通常,它应该返回类似以下内容之一的内容:

1023:1055M
1056
但是,它可能会出现如下错误:

svn: This client is too old to work with working copy '.'; please get a newer Subversion client
以下是我根据其他帖子对规则的看法:

test2:
    @if [ $$(svnversion | sed s/[0-9:M]*//g | grep '.') -neq ""];   \
    then                                                            \
          echo >&2 "Unexpected result from 'svnversion'"            \
               "of $$(svnversion)";                                 \
          false;                                                    \
    fi

但是,这两种情况下似乎都会触发此条件。

您看到的错误表明“svversion”命令来自另一个次要的Subversion版本,而不是用于更新工作副本的客户端


例如,在Subversion 1.5.6命令行客户端上使用基于Subversion 1.6.6的TortoiseSVN时会发生这种情况。

以下是我最终解决此问题的方法:

@if ! $(subversion) | grep -qE "[0-9]+:[0-9]+M"; then
test_svnversion_output:
    @if [ $$(svnversion 2>&- | wc | awk '{print $$1}') -eq 0 ];     \
    then                                                            \
        echo >&2 "Error: 'svnversion' produced bad result"          \
             "'$$(svnversion 2>&1)'.";                              \
        false;                                                      \
    fi

sh代码段可以简化为:if$(svversion)| sed s/[0-9:M]*//g | grep;然后。。。(未设置为受保护)无需调用测试(或[)当然。基于其他帖子?如果它不起作用,那么为什么不在其他帖子中解决这个问题,而不是开始一个新的帖子?另一个帖子已经解决并起作用了,这是一个新的变体。这不是这个问题所要问的。请注意,svnversion也可以在其结果中使用S和P,或者这些字母的任意组合。