Контроль версий для домашних заданий - PullRequest
6 голосов
/ 10 сентября 2009

Школа вернулась к занятиям, и я оказался в растерянности. В конце прошлого семестра у нас был групповой проект, использующий Subversion (группа из 4 человек), чтобы совершать коммиты и завершать их. Я также заметил, как легко было получить доступ к центральной точке моей домашней работы. Я хочу использовать SVN или Git (недавно введенный в git), и у меня есть проблема.

Каков наилучший способ организации SVN для нескольких домашних заданий для нескольких компьютерных классов.

У меня есть 2 класса программирования, которые я точно хочу отследить. При минимальном из 1 задания в неделю это 32 задания для управления более чем 2 классами. Должен ли я хранить их все в одном репозитории и просто пометить 1 Java и 1 C ++?

Заранее спасибо.

Редактировать: я должен упомянуть, что у меня есть ежегодный хостинг, который позволяет использовать git и subversion через WebDAV. Вот как я получил доступ к svn репо для своего проекта в прошлом году. У меня есть возможность заблокировать свою домашнюю работу вне публичного просмотра с помощью этого инструмента для тех, кто не знаком с этой настройкой.

Ответы [ 9 ]

9 голосов
/ 10 сентября 2009

Если вы перемещаетесь между большим количеством компьютеров, возможно, вы захотите перенести задания на USB-накопитель. Если вы используете git, проблем не должно быть.

У меня обычно есть папка для каждого класса и под ней папка для каждого задания,

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

Каждое назначение будет иметь свой собственный репозиторий. Я не вижу смысла использовать один и тот же репо для всех заданий, поскольку в большинстве случаев они вообще не будут связаны ни с чем.

7 голосов
/ 10 сентября 2009

Выступая за SVN -
Один репозиторий с несколькими проектами - это нормально.

Вы можете легко настроить автономный сервер SVN (без использования веб-сервера) на ПК

Вы также можете использовать svn с файловым репозиторием на USB-ключе для простоты между домом и школой. Это ограничено только одним пользователем, который обращается к файлам, но означает, что вам не нужно ничего, кроме клиента SVN (или TortoiseSVN)

пс. Научиться пользоваться SCC - одна из самых важных вещей, которой вас не учат в школе.

4 голосов
/ 12 сентября 2009

В духе изучения и обмена я публикую два действительно полезных ресурса для subversion и git. Я думаю, что чья-то собственная ситуация должна была выбирать, что лучше для их нужд.

Книга Subversion - Контроль версий с Subversion Официальная книга

Git - Pro Git (Книга) Отличное руководство по использованию Git

Git Hub - Learn Github (learn.github.com Только что нашел это сегодня.

До сих пор я пробовал subversion и git и нашел, что git с настройкой, описанной hasen j, работает лучше всего. Я постараюсь повторить эту тему снова. Еще раз спасибо всем вашим советам

2 голосов
/ 15 октября 2009

Еще одна вещь, которую нужно иметь в виду, когда вы сохраняете семестры, работающие в облаке, - это доступность. Я решил сделать резервную копию каждой строки кода, которую написал для своего старшекурсника, используя следующий скрипт.

#!/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 /' (сохраните как post-commit)
  • сделать его исполняемым - 'chmod + x post-commit'

Я отправил его на ваш личный адрес электронной почты по двум причинам: 1. Я могу просто искать свои года в почтовом ящике с помощью простого интерфейса Gmail 2. Вы можете проснуться на следующий день после долгой ночи кодирования и просмотреть все, что вы отправили в качестве проверки работоспособности - многие компании-разработчики следуют этой практике.

2 голосов
/ 10 сентября 2009

Вы можете использовать bitbucket.org , который предлагает хостинг Mercurial с одним частным репозиторием бесплатно. Это относительно простая система управления исходным кодом для изучения, и существует множество учебных пособий и примеров. Вы также можете поделиться этим репо со своими товарищами по команде во время групповых проектов. Для git существует множество подобных сервисов.

Я не думаю, что есть веская причина разделять ваш репозиторий по технологиям (например, Java / C ++), но если у вас просто есть макет каталога, такой как / assignments / course / assignment_x, у вас все будет хорошо. Вероятно, есть некоторый код, которым вы можете поделиться во время курсовой работы, но я полагаю, что это зависит от проф .....

1 голос
/ 10 сентября 2009

Я бы хотел добавить к комментарию joeslice выше, еще одним преимуществом использования Mercurial (скажем, в Bitbucket) будет легкий доступ к клиентам в Windows / Unix / Mac.

  • Используйте разные репозитории, если у них нет зависимостей.
  • Mercurial в значительной степени init и работает, но это верно для всех DVCS, я думаю. Это также означает, что вам не нужно слишком беспокоиться о том, как все организовать идеально, вместо этого вы можете просто hg init в любом каталоге, прежде чем начать там работать.

PS: Я бы оставил это как комментарий к посту , но, видимо, я пока не могу комментировать.

1 голос
/ 10 сентября 2009

Я использую 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 с, скажем, классом рисования было бы проблематично.

1 голос
/ 10 сентября 2009

Мне было проще всего иметь один репозиторий с подкаталогами для каждого класса. Затем внутри каталогов классов я делал папки с назначениями (если назначения состояли из нескольких файлов) или просто помещал файлы напрямую (для однофайловых заданий, таких как документы).

0 голосов
/ 10 сентября 2009

Для меня, если я не размещаю репозиторий непосредственно в моем HD, я предпочитаю использовать DVCS (в данном случае, Git). На данный момент я использую Bazaar, поскольку он может выполнять как централизованное, так и распределенное (и переключаться между ними с помощью операций Bind и UnBind). Я думаю, что вы можете использовать его и через WebDAV. Я использую его через плагин Eclipse, чтобы он был таким же простым, как и другие VCS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...