SVN-ANT复制任务不工作,从CLI SVN副本呢,相同的参数(SVN-ANT copy task

2019-09-19 18:53发布

我使用SVN ANT 1.3.1版本,1.7.1 ANT,爪哇1.6u和SVN回购的是1.6(我认为-在prod\db\format文件说, “4”。)

我有两个SVN目标(我不知道“提交”任务没有完成之前“复制”任务试图执行,这就是为什么我会引用它作为我的build.xml的一部分。)

我试图标记释放时的产品版本(似乎是一个Ant构建依靠SVN-ANT一个相当普遍的任务吧?)我可以做在命令行中执行以下操作:

svn copy http://svnserver/svn/prod/Production/App \
     http://svnserver/svn/prod/Archive/App/1.5 \
     -m "Tagging Release of App as Version 1.5"

和我得到的,当然

Committed revision 27.

然而,当我尝试:

<target name="check-in" >
    <svn refid="svn.settings">
        <commit message="${application.name} - Committed to Prod" > 
            <fileset dir="${src.dir}">
                <include name= "**/*"/>
            </fileset>
        </commit>
    </svn>
</target>

<target name="tag-version-number" depends="check-in" >
    <svn refid="svn.settings">
        <copy
            srcUrl="http://svnserver/svn/prod/Production/App/"
            destUrl="http://svnserver/svn/prod/Archive/App/1.5/"
            message="Tagging Release of App as Version 1.5">
        </copy>
    </svn>
</target>

我找回奇怪的错误:

check-in:

tag-version-number:
      [svn] svn: File not found: revision 28, path '/Production/App/Production/App'
      [svn] svn: '/svn/prod/!svn/bc/28/Production/summons' path not found: 404 Not Found (http://svnserver)
      [svn] svn: File not found: revision 28, path '/Production/App/Production/App'
      [svn] svn: '/svn/prod/!svn/bc/28/Production/summons' path not found: 404 Not Found (http:/svnserver)
      [svn] <Copy> failed.

BUILD FAILED
C:\build\promote_prod.xml:210: Can't copy

他们让我觉得,也许承诺是不会一路过关斩将它试图访问SVN回购的路径前? 如果是这样,我能做些什么,以确保它等待提交经过? 一切都犯就好之前,我加入这个新的“标签的版本号”目标(和备案,这是在构建脚本目标“签到”正在运行的唯一时间。)

是问题别的东西?

Answer 1:

您是否使用SVN-KIT? 如果是这样,我今天遇到了同样的问题,而试图得到一些尝试和真正的构建脚本迁移到詹金斯的工作一个新的实例。 当准备正式发布,我们用版本号标记,然后根据建立它的标签拉的代码。 像OP,我觉得这一定是一个非常标准的使用情况。

顺便说一句,运行ant与-v标志和svnant将报告是否它的使用svnkit,javahl或回落到命令行:

  [svn] Using svnkit
  [svn] <Export> started ...
  [svn] export -r HEAD https://foo.com/svn/project

作为最好的,我可以告诉大家,svnant 1.3.1(和svnkit,这取决于版本)根本不与SVN服务器1.7.x.工作100% 它工作正常,我们对某些命令,包括出口,但是,当它来到时使用SVN复制标记,我们得到上述同样的错误:

22:06:48        [svn] copy -rHEAD https://foo.com/svn/project/trunk https://foo.com/svn/project/tags/tag3
22:06:48        [svn] svn: File not found: revision 64, path '/project/trunk/project/trunk'
22:06:48        [svn] svn: '/svn/project/!svn/bc/64/project/trunk' path not found: 404 Not Found (https://foo.com)

值得庆幸的是,救世主就是在那里被opticylic的名称。 在浏览器中打开一个新的标签,并随手打开:

https://github.com/opticyclic/svntask

从下载部分抢svntask-1.7-1.0.9.zip,然后按照安装说明,在很大程度上只是宣布与适当的类路径中的taskdef的问题。 任务的用法是从底格里斯河svnant略有不同。 特别是

<copy src="url" dst="url2" commitMessage="tmbg"/> 

代替

<copy srcUrl="url" destUrl="url2" message="flood"/>, 

并且不再支持新望svnsettings,所以你必须直接在标签中指定的用户名和密码。

一旦做到这一点,SVN副本应正常工作,从而可以从蚂蚁应用标签。 NB确保在执行期间opticylic的svnant任务不会看到任何旧svnant库。 我以前有SVN相关的罐子在我的蚂蚁/ lib中,所以不得不将它们删除,以便使用opticyclic的svnant。

最后,我意识到,SVN出口是不幸的是没有通过opticylic的svnant支持,但我们需要它我正在构建。 因此,我被迫使双方svnant的提供给我的构建。 (重要!),只要你同时指定其类路径的独立,给他们一个新的名字,因为它们都使用SVN作为默认的标记名),你应该能够做同样的:

<path id="svnant.classpath">
        <fileset dir="lib/svnant">
          <include name="*.jar"/>
        </fileset>
</path>
<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="svnant.classpath"/>

<path id="svnant2.classpath">
            <fileset dir="lib/svn2">
              <include name="*.jar"/>
            </fileset>
</path>
<taskdef name="svn2" classname="com.googlecode.svntask.SvnTask" classpathref="svnant2.classpath"/>

在这里,我已经允许要求svnant到默认的‘底格里斯河SVN’的标记名称,同时给予opticyclic的标签svn2。 通过这种方式,我们可以调用Ant脚本的过程。 不过,别忘了付你正在使用你正在使用在任何特定时刻的svnant所需的正确语法注意。

也许opticyclic将增加出口的svnant,现在他们有一些新的球迷。 这将使我们能够简化上述和简单地使用较新的svnant顾左右而言他。



文章来源: SVN-ANT copy task doesn't work, svn copy from CLI does, same arguments