家庭作业的版本控制

时间:2009-09-10 03:03:26

标签: git svn

学校回来了,我发现自己不知所措。在上学期结束时,我们有一个小组项目利用subversion(4人组)进行提交并完成提交。我还注意到访问作业的中心点是多么容易。我想利用SVN或Git(最近引入git),我遇到了问题。

为多个计算机类的多个家庭作业组织组织SVN的最佳方法是什么。

我有2个编程类,我绝对想跟踪。每周执行1次任务的最小,即管理超过2个班级的32个任务。我应该将它们全部保存在一个存储库中,只标记1个Java和1个C ++吗?

提前致谢。

编辑:我应该提到我有年度托管,允许通过WebDAV进行git和subversion。这就是我去年为我的项目访问svn repo的方式。对于那些不熟悉该设置的人,我有能力通过这个工具锁定我的作业,远离公众视野。

9 个答案:

答案 0 :(得分:9)

如果您在许多计算机之间移动,您可能希望在USB记忆棒中进行分配。假设您正在使用git,那么应该没有任何问题。

我通常为每个班级都有一个文件夹,每个班级下面都有一个文件夹,

cpsc511/
   a1/
   a2/
   a3/
cpsc423/
   a1/
   a2/
   a3/

每个作业都有自己的存储库。我没有理由为所有作业使用相同的回购,因为大部分时间他们根本不会有任何关联。

答案 1 :(得分:7)

说到SVN -
一个包含多个项目的存储库是正常的

您可以在PC上轻松设置独立的SVN服务器(无需Web服务器)

您还可以在USB密钥上使用带有基于文件的存储库的svn,以简化家庭和学校之间的操作。这仅限于一个用户访问文件,但意味着您只需要SVN客户端(或TortoiseSVN)

PS。学习使用SCC是他们在学校没有教你的最重要的事情之一。

答案 2 :(得分:4)

本着学习和分享的精神,我为subversion和git发布了两个非常好的资源。我认为根据自己的需要选择哪种产品最适合自己的情况。

Subversion Book - Version Control With Subversion正式书

Git - Pro Git (Book)使用git的好指南

Git Hub - Learn Github (learn.github.com今天刚发现。

到目前为止,我已经尝试过subversion和git,并且发现使用hasen j设置的git效果最好。我会尝试再次跟进这个帖子。再次感谢您的所有建议

答案 3 :(得分:2)

您可以考虑使用bitbucket.org,它可以免费为Mercurial托管提供一个私有存储库。这是一个相对容易学习的源代码控制系统,有很多教程和示例。您还可以在团队项目期间与团队成员共享此回购。 git也有很多这样的服务。

我认为没有充分的理由按技术(例如,Java / C ++)拆分您的存储库,但如果您只有/ assignments / course / assignment_x这样的目录布局,那么您应该没问题。可能有一些代码可以在课程中分享,但我想这取决于教授......

答案 4 :(得分:2)

当您在云中保存学期工作时要记住的另一件事是可访问性。我决定使用以下脚本备份我为本科生编写的每一行代码。

#!/usr/bin/env python

import os
import smtplib
import sys

mail_server = '###'
from_email = '###'
sender = '###'
to_email = '###'
mailbox_name = '###'
mailbox_password = '###'

server = smtplib.SMTP(mail_server)
server.login(mailbox_name, mailbox_password)

repository, revision = sys.argv[1:]

# get info about the commit
cmd = "svnlook info %(repository)s" % locals()
info = os.popen(cmd).read()
info = info.split("\n")
author = info[0]
time = info[1]

# combines all lines of multi line comment into a single line
comment = info[3:len(info)]
temp = ""
for c in comment:
    temp += c + " "
comment = temp

# find out what changes are made
cmd = "svnlook changed %(repository)s" % locals()
changes = os.popen(cmd).read()

# include the diff between new and prior revision
cmd = "svnlook diff %(repository)s -r %(revision)s" % locals() 
diff = os.popen(cmd).read() 

msg = (
"To: %(to_email)s\r\n"
"From: %(sender)s %(from_email)s\r\n"
"Subject: Revision %(revision)s committed\r\n"
"Content-type: text/plain\r\n"
"\r\n"
"Revision: %(revision)s\r\n"
"Comment: %(comment)s\r\n"
"\r\n"
"Author: %(author)s\n"
"Time: %(time)s\r\n"
"\r\n"
"Files affected:\r\n"
"%(changes)s\r\n"
"Changes Made:\r\n"
"%(diff)s\r\n"
)

msg = msg % locals()

server.sendmail(from_email, to_email, msg)
server.quit()
  • 将其放在'svn-repo / hooks /'中(保存为提交后)
  • 使其可执行 - 'chmod + x post-commit'

我的个人Gmail地址有两个原因: 我可以使用简单的gmail界面从现在开始搜索我的收件箱 2.经过一整夜的编码后,您可以在第二天醒来,并审查您提交的所有内容作为完整性检查 - 许多软件公司都遵循这种做法。

答案 5 :(得分:1)

我发现最简单的就是拥有一个存储库,每个类都有子目录。然后在类目录中,我将创建分配文件夹(如果分配由多个文件组成)或直接放置文件(对于单文件分配,如纸张)。

答案 6 :(得分:1)

我在家用电脑上使用svn来完成我的所有课程(和个人)项目。这是我用于存储库的布局:

<SchoolName>
<SchoolName>\<className>
//assuming homework are generally single files
<SchoolName>\<className>\Homework\
//assuming multiple files needed
<SchoolName>\<className>\Assignment x- The Project of DOOM\ 
Personal\<broad non specific name>

我觉得它适合我。不仅仅是计算机课程:英语,数学,实际上任何大部分工作最终都要输入的课程。我可以看到,使用svn,比如绘图类会有问题。

答案 7 :(得分:1)

我想在上面添加joeslice's comment,与Mercurial(比如说Bitbucket)合作的另一个好处是可以轻松访问Windows / Unix / Mac上的客户端。

  • 如果他们没有依赖关系,请使用不同的存储库。
  • Mercurial非常init并且可以运行,但我认为所有DVCS都是如此。这也意味着您不必过于担心如何完美地组织事物,而是可以在开始工作之前在任何目录中hg init

PS:我已将此留作评论to the post,但显然我暂时不能发表评论。

答案 8 :(得分:0)

对我来说,如果我不直接在我的HD中托管存储库,我更喜欢使用DVCS(在本例中为Git)。目前,我使用Bazaar,因为它可以同时执行集中式和分布式(并使用Bind和UnBind操作在两者之间进行交换)。我想你也可以通过WebDAV使用它。我通过Eclipse插件使用它,所以它就像其他VCS一样简单。