8

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

有人可以告诉我,或者指导我做一些事情,让我让这个定期提交的东西工作吗?

提前致谢。

编辑:抱歉,我似乎让人们对我为什么要这样做感到困惑。我想这样做的唯一原因是因为我的一位讲师想让我们知道我们的代码是如何随着时间的推移而发展的,我认为为此目的使用 svn 是一个好主意。最新的提交是否有效并不重要。它只需要显示我随着时间的推移对代码所做的更改。

4

7 回答 7

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
于 2009-04-17T08:27:34.157 回答
6

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

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

于 2009-04-17T03:42:18.600 回答
5

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

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

完全有可能使用各种风格的制作,我知道 Visual Studio 具有可以设置为执行此类操作的构建前和构建后事件。所以我很确定大多数现代 IDE 都可以处理这个问题。

作为对这个问题的一个特别考虑:
将提交钩子移动到进程的开头,这样你就可以跟踪你什么时候搞砸了,以及你是如何修复错误的。

于 2009-04-17T03:45:12.463 回答
5

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

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

使用 git,我会这样做:

  1. Repo 'foo':主存储库
    1. refs/heads/...:你的开发分支的位置
    2. refs/sessions/...:你的工作的位置与脏提交。
  2. 您的工作副本:
    1. “混帐初始化”
    2. “git remote add foo git://foo/...; git fetch foo”
  3. 创建分支:“git checkout -b bar foo/master”
  4. 标记分支的开头:“git tag barbegin”
  5. 激活脚本:“虽然为真;做 git add -A .; git commit -m 'autocommit'; 完成”
  6. 我不会使用 cron 作业,因此您可以轻松激活/停用自动提交。
  7. 做你的工作
  8. 完成工作后,停用脚本
  9. 提交挂起的更改
  10. 现在,您在分支栏中有很多自动提交,并且您已经用 barbegin 标记了分支的初始提交
  11. 发布您的自动提交:
    1. “git标签barend”
    2. “git push foo barbegin:refs/sessions/你的用户ID/会话ID/开始”
    3. “git push foo barend:refs/sessions/你的用户 id/会话 id/end”
  12. 现在,你已经发表了你的作品,你的讲师可以访问它
  13. 更新您的 foo 存储库:
    1. “git rebase -i --onto barbegin barbegin”并按照此处所述进行
    2. 我会压缩所有提交:“最后,只能有一个”。
    3. "git push foo bar:master" # 只会推送一个提交
  14. 打扫:
    1. “git标签-d barbegin”
    2. “git标签-d barend”
    3. “git 分支 -d 栏”

毕竟,我认为这样的数据可能无法收集到有用的信息。所以,我会尽量避免这种工作流程。但如果真的需要,我会这样做。

于 2009-04-17T11:44:36.023 回答
2

我会使用 Subversion,但我会养成处理单个更改并将这些更改提交到存储库的习惯。

这样,如果讲师愿意,他不仅可以查看发生了什么变化,还可以查看为什么会发生变化。我想这会更有用。

于 2009-04-17T08:45:00.213 回答
2

你可以试试这个食谱: http ://code.activestate.com/recipes/577570-watch-directory-and-do-periodic-commits-to-subvers/

于 2011-02-10T14:00:45.760 回答
1

如果您在 UNIX 风格上运行,请考虑创建一个cron作业以定期运行命令。

于 2009-04-17T03:41:29.257 回答