如果SVN工作副本中的文件不存在于另一个文件夹中,请使用ANT / SVNANT删除文件

时间:2010-12-17 05:10:12

标签: ant diff delete-file svnant

情景:

  • SVN Repo#1,应用程序代码库
  • SVN回购#2以及先前编制的里程碑

我需要一个可以执行以下操作的ANT构建脚本:

  1. 从SVN repo#1(已完成)
  2. 导出代码库
  3. 编译导出的代码库(已完成)
  4. 从SVN repo#2(已完成)
  5. 查看代码库
  6. 将SVN repo#1的编译/导出代码库与SVN repo#2的工作副本进行比较 一个。如果在SVN repo#1中添加了任何文件,则需要将它们添加到工作副本中 湾如果在SVN repo#1中更新了任何文件,它们将覆盖工作副本中的内容 C。如果已从SVN回购#2中删除任何文件,则需要从工作副本中删除它们
  7. 将更新的代码库签入SVN repo#2
  8. 步骤#4是我遇到问题的地方。我相信我可以通过从已经从SVN repo#2检出的工作副本复制SVN repo#1的编译/导出代码库来完成4a和4b。我不知道如何做两个代码库之间的差异来确定哪些文件需要从SVN repo#2工作副本中删除。我知道我可以使用SVNANT delete删除文件,但是如何构建文件集?

1 个答案:

答案 0 :(得分:1)

我做了类似的任务。在我看来,蚂蚁代码看起来像这样:

...
<svn.sync to="${svn_folder}" from="${deploy_directory_path}" />
...
<svn svnkit="true" javahl="false">
    <add dir="${svn_folder}" force="true" recurse="true" />
    <!--add>
        <svnFileSet dir="${svn_folder}">
            <svnUnversioned/>
        </svnFileSet>
    </add-->
    <delete>
        <svnFileSet dir="${svn_folder}">
            <svnMissing/>
        </svnFileSet>
    </delete>
</svn>
<svn verbose="true" username="${svn.username}" password="${svn.password}" svnkit="true">
    <commit dir="${svn_folder}" message="${version}"/>
</svn>

其中

<macrodef name="svn.sync">
    <attribute name="to" />
    <attribute name="from" />
    <sequential>
        <mkdir dir="@{to}" />
        <sync todir="@{to}" includeemptydirs="true">
            <fileset dir="@{from}" />
            <fileset dir="@{to}" defaultexcludes="no">
                <include name="**/.svn/**/*" />
                <include name="**/.svn/**/*.*" />
            </fileset>
        </sync>
    </sequential>
</macrodef>