题
我想配置我的计算机,以便每半小时自动提交我正在处理的程序。我正在使用 svn 存储库,因此即使它只是一个每 30 分钟运行一次“svn ci”的脚本也没关系。问题是我不知道该怎么做。
有人可以告诉我,或者指导我去做一些事情,让我让这个定期提交的东西发挥作用吗?
提前致谢。
编辑:抱歉,我似乎让人们困惑我为什么要这样做。我想要这样做的唯一原因是因为我的一位讲师希望我们了解我们的代码如何随着时间的推移而发展,并且我认为使用 svn 来实现此目的将是一个好主意。最新的提交是否有效并不重要。它只需要显示我随着时间的推移对代码所做的更改。
解决方案
我不会用这样一系列的自动提交来弄脏你的控制版本系统。但我同意使用控制版本系统来提供该信息的想法。
那么,我的建议是:使用一个存储库来存储您的软件,另一个存储库来存储自动提交。工作完成后,将主存储库中的所有自动提交合并为一个逻辑提交。
使用 git,我会这样做:
- 回购'foo':主存储库
- 参考文献/负责人/...:您的开发分支的位置
- 参考文献/会议/...:您的脏提交工作的位置。
- 您的工作副本:
- “git初始化”
- “git 远程添加 foo git://foo/...;git 获取 foo"
- 创建分支:“git checkout -b bar foo/master”
- 标记分支的开头:“git 标签 barbegin”
- 激活脚本:“虽然是真的;执行 git add -A .;git commit -m '自动提交';完毕”
- 我不会使用 cron 作业,因此您可以轻松激活/停用自动提交。
- 做你的工作
- 工作完成后,停用脚本
- 提交待处理的更改
- 现在,您在分支 bar 中有很多自动提交,并且您已使用 barbegin 标记了分支的初始提交
- 发布您的自动提交:
- “git 标签巴伦德”
- “git push foo barbegin:refs/sessions/你的用户 ID/会话 ID/begin”
- “git push foo barend:refs/sessions/你的用户 ID/会话 ID/end”
- 现在,您已经发布了您的作品,您的讲师可以访问它
- 更新你的 foo 存储库:
- “git rebase -i --onto barbegin barbegin”并按照描述进行 这里
- 我会压缩所有提交:“到最后,只能有一个”。
- "git push foo bar:master" # 只会推送一个提交
- 打扫:
- “git tag -d barbegin”
- “git tag -d barend”
- “git分支-d栏”
毕竟,我认为这样的数据可能无法收集到有用的信息。所以,我会尽量避免这个工作流程。但如果真的需要的话,我会这样做。
其他提示
相反,明显的流行的观点,我认为这是一个很大的使用SVN的,在分配的情况下。
之类的工具kdesvn(甚至更好,TortoiseSVN的,但是这只能在Windows上),可能会给你很大的洞察与它们的日志意见,diff文件发生和指责的视觉效果。
如果你使用Ubuntu的,从一个控制台是独立于你的工作的一个运行此bash脚本。
#!/bin/bash
while [ 1 ]
do
# Do the commit
svn ci --message "Automated commit" ~/yourworkingcopy
# Wait until next commit time
sleep 1800
done
您可以尝试在运行一个shell脚本cron作业。什么操作系统你是?
不过我很好奇,为什么你要做到这一点。您提交应包含的功能和bug修复件的,而不是基于一个时间间隔。你很可能会发生变化的中间犯(在一组文件),这会使你的修改也没用。
我不认为一个定时安排设置的提交是一个特别好的主意。特别是如果你开始进入测试和持续集成。在设定的时间间隔提交将打破构建因为没有保证,你将完成在该时间范围的变更。
有一个更好的方式,如果你想自动提交是使提交构建过程本身的一部分。只是使构建过程中的最后一步提交到库。这样一来,如果构建失败,你就不会犯垃圾。
完全可以用make的所有味道,我知道的Visual Studio已前置和后置构建可设置做一些这样的活动。所以我敢肯定,大多数现代IDE可以处理这个问题。
作为用于特别是该问题的特殊考虑:结果 移动commit钩子的过程的开始,所以你可以跟踪你陷入困境的时候了庄严,以及你如何来修复错误。
我会使用Subversion,但我反而刚刚进入工作单上的变化,并comitting那些到存储库的习惯。
这样的讲师,如果他想,能看不仅的什么的改变,但为什么的它改变。这将是我可以想象更加有用。
如果您在UNIX的味道运行考虑创建一个的cron 作业以规则的间隔执行命令。