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

时间:2009-04-17 03:38:51

标签: svn autocommit

我想配置我的电脑,以便每半小时说它会自动提交我正在处理的程序。我正在使用一个svn存储库,所以即使它只是一个每隔30分钟运行'svn ci'的脚本就可以了。问题是我不知道该怎么做。

有人可以告诉我,或者告诉我什么,这会让我得到这个定期提交的工作吗?

提前致谢。

编辑:对不起,我觉得我很困惑为什么要这样做。我想这样做的唯一原因是因为我的讲师希望我们知道我们的代码如何随着时间的推移而发展,我认为使用svn是一个好主意。最新提交是否有效无关紧要。它只需要显示我随着时间的推移对代码所做的更改。

7 个答案:

答案 0 :(得分:12)

与明显的流行观点相反,我认为在作业的背景下,这是对svn的一种很好的用法。

像kdesvn这样的工具(甚至更好,tortoisesvn,但这只是在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

答案 1 :(得分:6)

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

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

答案 2 :(得分:5)

我不认为按时间安排设置提交是一个特别好的主意。特别是如果你开始进入测试和持续集成。按设定的时间间隔提交会破坏构建,因为无法保证您将在时间范围内完成变更集。

更好的方法是,如果要自动提交,则自己进行构建过程的提交。只需将构建过程的最后一步提交到存储库即可。这样,如果构建失败,您将不会提交垃圾。

完全可以使用各种make,我知道Visual Studio有前后构建事件,可以设置为执行类似这样的操作。所以我很确定大多数现代IDE都可以解决这个问题。

特别考虑到这个问题:
将提交挂钩移动到流程的开头,这样您就可以跟踪何时陷入困境,以及如何解决错误。

答案 3 :(得分:5)

我不会通过这样一系列的自动提交弄脏你的控制版本系统。但我同意使用控制版本系统提供该信息的想法。

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

使用git,我会这样做:

  1. Repo'foo':主存储库
    1. refs / heads / ...:您的开发分支机构的位置
    2. refs / sessions / ...:使用脏提交工作的位置。
  2. 您的工作副本:
    1. “git init”
    2. “git remote add foo git:// foo / ...; git fetch 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. 提交待定更改
  11. 现在,你在分支栏中有很多自动提交,你用barbegin标记了分支的初始提交
  12. 发布您的自动提交:
    1. “git tag barend”
    2. “git push foo barbegin:refs / sessions / your user id / session id / begin”
    3. “git push foo barend:refs / sessions / your user id / session id / end”
  13. 现在,您已发布了您的作品,而您的讲师可以访问它
  14. 用于更新您的foo存储库:
    1. “git rebase -i --onto barbegin barbegin”并按照here
    2. 所述进行操作
    3. 我会压扁所有提交:“最后,只能有一个”。
    4. “git push foo bar:master”#只会推送一次提交
  15. 清洗:
    1. “git tag -d barbegin”
    2. “git tag -d barend”
    3. “git branch -d bar”
  16. 毕竟,我认为这些数据不会收集到有用的信息。所以,我会尽量避免这个工作流程。但如果真的需要,我会这样做。

答案 4 :(得分:2)

我会使用Subversion,但我只是习惯于进行单个更改,然后将这些更改存储到存储库中。

这样,讲师如果愿意,不仅可以查看 更改的内容,还可以查看 更改的原因。这会比我想象的更有用。

答案 5 :(得分:2)

答案 6 :(得分:1)

如果您正在运行UNIX,请考虑创建cron作业以定期运行命令。