Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ant删除mac os x下svn工作副本文件夹中的所有文件_Svn_Ant_Macos - Fatal编程技术网

使用ant删除mac os x下svn工作副本文件夹中的所有文件

使用ant删除mac os x下svn工作副本文件夹中的所有文件,svn,ant,macos,Svn,Ant,Macos,我正在尝试编写一个ant脚本来构建我们的项目,并将新的构建保存在提交给svn的dist文件夹中。随着每个版本文件名的更改,我需要删除dist文件夹中的所有旧文件(不知道名称) 为此,我使用了以下代码: <exec executable="svn" outputproperty="__ignoreSvnDeleteDist"> <arg value="delete"/> <arg value="../dist/*"/> </exec> 我比

我正在尝试编写一个ant脚本来构建我们的项目,并将新的构建保存在提交给svn的dist文件夹中。随着每个版本文件名的更改,我需要删除dist文件夹中的所有旧文件(不知道名称)

为此,我使用了以下代码:

<exec executable="svn" outputproperty="__ignoreSvnDeleteDist">
    <arg value="delete"/>
<arg value="../dist/*"/>
</exec>

我比较了我在两台机器上使用相同的ant版本(1.7.1)和相同的Java版本(Windows box为1.6.0_12,Mac为1.6.0_15)。

经过一些搜索,我找到了答案。我认为您需要记住,exec命令并不是在创建一个shell来执行您的命令,而是直接执行命令

在类unix系统下,shell对*进行评估。与windows平台相反,在不使用命令行解释器()的情况下计算通配符

这个脚本应该可以工作:

<exec executable="sh" outputproperty="__ignoreSvnDeleteDist">
    <arg value="-c"/>
    <arg value="svn delete ../dist/*"/>
</exec>


在这里,我们创建一个shell,并给它应该执行的命令。不幸的是,这现在只能在类unix系统下工作。

有一个简单的解决方案:不要将构建提交给SVN

如果您的构建过程太脆弱,无法从源代码重新创建任何分发,那么您应该修复构建过程。考虑设置一个类似于.c/p>的CI服务器,而不是自己执行“Svn”命令,你可以从子clipject项目中考虑优秀的SaveNT任务。它使处理svn相关任务变得更加容易。您的问题代码可能如下所示

<svn>
  <delete> 
    <fileset dir="../dist">
      <include name="**/*"/>
    </fileset>
  </delete>
  <commit message="commit deleted files" dir="../dist"/>
</svn>


我们可以从源代码中重新创建分发,但在名称中包含内部版本号时,内部版本上的名称会发生更改。这就是生成之间名称更改的原因。我们已经在使用哈德逊望远镜了,三周前刚刚安装好。但是这个问题与hudson没有真正的关系,它更像是windows和MacOSX平台之间的蚂蚁问题。将构建号放入工件中的“buildnumber”文件中。如果像ant或maven这样的工具能够创建一个“构建校验和”(buildchecksum):一个从所有涉及的构建工具、源、库等的文件中派生出来的数字,但不包括任何时间戳,那就太好了。这将允许快速查看构建是否已更改。是的,这将是解决此问题的最佳方法(也是最干净的方法)。不幸的是,在这种情况下,我不能使用ant的核心任务以外的其他任务。
<svn>
  <delete> 
    <fileset dir="../dist">
      <include name="**/*"/>
    </fileset>
  </delete>
  <commit message="commit deleted files" dir="../dist"/>
</svn>