1

设想:

  • 带有应用程序代码库的 SVN Repo #1
  • SVN 回购 #2 与以前编译的里程碑

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

  1. 从 SVN repo #1 导出代码库(完成)
  2. 编译导出的代码库(完成)
  3. 查看来自 SVN repo #2 的代码库(完成)
  4. 将 SVN 存储库 #1 中编译/导出的代码库与 SVN 存储库 #2 中的工作副本进行比较。如果在 SVN repo #1 中添加了任何文件,则需要将它们添加到工作副本 b。如果在 SVN 存储库 #1 中更新了任何文件,它们将覆盖工作副本 c 中的内容。如果任何文件已从 SVN repo #2 中删除,则需要从工作副本中删除它们
  5. 将更新的代码库签入到 SVN repo #2

第 4 步是我遇到问题的地方。我相信我可以通过从 SVN repo #1 复制已编译/导出的代码库到已从 SVN repo #2 签出的工作副本来完成 4a 和 4b。我不确定两个代码库之间的差异如何确定需要从 SVN repo #2 工作副本中删除哪些文件。我知道我可以使用 SVNANT delete 删除文件,但是如何构建文件集?

4

1 回答 1

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>
于 2010-12-20T14:26:24.380 回答