如果其他文件夹中不存在文件,请使用 ANT/SVNANT 从 SVN 工作副本中删除文件

发布于 2024-10-07 17:19:37 字数 608 浏览 3 评论 0原文

场景:

  • SVN Repo #1 具有应用程序代码库
  • SVN Repo #2 具有先前编译的里程碑

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

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

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

Scenario:

  • SVN Repo #1 with application code base
  • SVN Repo #2 with previously compiled milestones

I need an ANT build script which can do the following:

  1. Export the code base from SVN repo #1 (done)
  2. Compile the exported code base (done)
  3. Check out the code base from SVN repo #2 (done)
  4. Compare the compiled/exported code base from SVN repo #1 to the working copy from SVN repo #2
    a. If any files have been added in SVN repo #1, they need to be added to the working copy
    b. If any files have been updated in SVN repo #1, they overwrite what is in the working copy
    c. If any files have been removed from SVN repo #2, they need to be deleted from the working copy
  5. Check in the updated code base into SVN repo #2

Step #4 is where I am running into issues. I believe I can accomplish 4a and 4b by just copying the compiled/exported code base from SVN repo #1 over the working copy that has been checked out from SVN repo #2. I am not sure how do do the diff between the two code bases to determine which files need to be deleted from the SVN repo #2 working copy though. I know I can use SVNANT delete to remove the files, but how do I build the fileset?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

复古式 2024-10-14 17:19:37

我也做过类似的任务。在我的例子中,ant 代码看起来像这样

...
<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>

I did similar tasks. In my cases ant code looks like that:

...
<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>

where

<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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文