代码之家  ›  专栏  ›  技术社区  ›  Robert Massaioli

如何使Subversion(或任何程序)执行定期提交?

  •  8
  • Robert Massaioli  · 技术社区  · 15 年前

    我想配置我的计算机,这样每半小时它就会自动提交我正在处理的程序。我使用的是SVN存储库,所以即使它只是一个每隔30分钟运行一次“SVN CI”的脚本,也没关系。问题是我不知道怎么做。

    有人能告诉我,或者指导我做些什么,让我定期提交一些有用的东西吗?

    事先谢谢。

    编辑:很抱歉,我似乎对我为什么要这样做感到困惑。我之所以想这样做,是因为我的一位讲师希望我们了解代码是如何随着时间发展的,我认为使用SVN来实现这一目的是一个很好的主意。最新提交是否有效并不重要。它只需要显示我随时间对代码所做的更改。

    7 回复  |  直到 12 年前
        1
  •  5
  •   Community Maksym Gontar    7 年前

    我不会用这样的一系列自动提交来破坏您的控制版本系统。但我同意使用控制版本系统来提供这些信息的想法。

    然后,我的建议是:为您的软件使用一个存储库,另一个用于存储自动提交。完成工作后,仅在一个逻辑提交中合并主存储库中的所有自动提交。

    有了Git,我可以做到:

    1. 回购“foo”:主存储库
      1. refs/heads/…:开发分支的位置
      2. refs/sessions/…:脏提交的工作位置。
    2. 您的工作副本:
      1. “Git init”
      2. “git remote添加foo git://foo/…;git获取foo”
    3. 创建分支:“git checkout-b bar foo/master”
    4. 标记树枝的开头:“Git Tag Barbegin”
    5. 激活脚本:“while true;do git add-a.;git commit-m'autocommit';done”
    6. 我不会使用cron作业,因此您可以轻松地激活/停用自动提交。
    7. 做你的工作
    8. 完成任务后,停用脚本
    9. 提交挂起的更改
    10. 现在,您在分支栏中有很多自动提交,并且您已经用Barbegin标记了分支的初始提交。
    11. 发布自动提交:
      1. “Git标签Barend”
      2. “git push foo barbegin:refs/sessions/your user id/the session id/begin(Git推送foo barbegin:refs/sessions/your user id/会话ID/开始)”
      3. “git push foo barend:refs/sessions/your user id/the session id/end(Git推送foo barend:refs/sessions/your user id/会话ID/结束)”
    12. 现在,你已经发表了你的作品,你的讲师可以访问它。
    13. 要更新您的foo存储库:
      1. “Git Rebase-I——上Barbegin Barbegin”,然后按照说明继续。 here
      2. 我会压扁所有的承诺:“最终,只能有一个”。
      3. “git push foo bar:master”只会推送一个提交
    14. 打扫:
      1. “Git Tag-D巴贝金”
      2. “Git标签-D Barend”
      3. “Git分支-d bar”

    在这之后,我认为用这种数据收集有用的信息是不可能的。所以,我会尽量避免这个工作流程。但如果真的需要,我会这样做。

        2
  •  12
  •   Jim T    15 年前

    与明显的流行观点相反,我认为这是SVN在任务上下文中的一个很好的应用。

    像kdesvn这样的工具(或者更好的工具,Tortoissesvn,但这只在Windows上)可能会让您对日志视图、差异和非视觉效果有很好的了解。

    如果您使用的是Ubuntu,那么从一个独立于您所使用的控制台运行这个bash脚本。

    #!/bin/bash
    while [ 1 ]
    do
            # Do the commit
            svn ci --message "Automated commit" ~/yourworkingcopy
    
            # Wait until next commit time
            sleep 1800
    done
    
        3
  •  6
  •   Brian Kelly    15 年前

    您可以尝试运行shell脚本的cron作业。你在开什么操作系统?

    但我很好奇你为什么要这么做。您的提交应该包含一些功能或错误修复,而不是基于时间间隔。您可能会在更改过程中提交(在一组文件上),这将使您的修订变得无用。

        4
  •  5
  •   Benjamin Autin Andrés Bonilla    15 年前

    我不认为按时间表设置提交是一个特别好的主意。尤其是当你开始进入测试和持续集成的时候。按设置的时间间隔提交将中断生成,因为无法保证您将在时间范围内完成变更集。

    如果您想自动提交,一个更好的方法是使提交成为构建过程本身的一部分。只需将构建过程的最后一步提交到存储库。这样,如果构建失败,就不会提交垃圾。

    完全有可能有各种各样的制作风格,我知道Visual Studio有预生成和后期生成事件,可以设置为执行类似的操作。所以我很确定大多数现代的IDE都能处理这个问题。

    作为对这个问题的特别考虑:
    将提交挂钩移动到流程的开始,这样您就可以跟踪什么时候出现了严重的混乱,以及如何来修复错误。

        5
  •  2
  •   Lasse V. Karlsen    15 年前

    我会使用Subversion,但我会习惯于只进行一次更改,并将这些更改提交到存储库中。

    这样,如果讲师愿意,他不仅可以看到 什么 改变了,但是 为什么? 它变了。我想这会更有用。

        7
  •  1
  •   ojblass    15 年前

    如果您运行的是一种风格的Unix,请考虑创建一个 cron 以常规间隔运行命令的作业。

    推荐文章