2009-09-10 16 views
6

La escuela vuelve a la sesión y me encuentro perdido. Al final del último semestre, tuvimos un proyecto grupal utilizando subversión (grupo de 4 personas) para hacer commits y completarlo. También noté lo fácil que era tener acceso a un punto central para mi tarea. Quiero utilizar SVN o Git (recientemente introducido en git) y tengo un problema.Control de versiones para tareas asignadas

¿Cuál es la mejor manera de organizar SVN para asignaciones de tareas múltiples para múltiples clases de informática.

Tengo 2 clases de programación de las que definitivamente quiero hacer un seguimiento. Con mínimo de 1 asignación por semana, 32 asignaciones para administrar más de 2 clases. ¿Debo guardarlos todos en un repositorio y simplemente etiquetar 1 Java y 1 C++?

Gracias de antemano.

Editar: Debo mencionar que tengo alojamiento anual que permite tanto git como subversión a través de WebDAV. Así fue como accedí al svn repo para mi proyecto el año pasado. Tengo la capacidad de bloquear mi tarea lejos de la vista del público a través de esta herramienta, para aquellos que no están familiarizados con esa configuración.

+1

Git es más difícil de aprender, pero una vez que te esfuerzas en aprenderlo, probablemente nunca querrás volver atrás. – Jacob

Respuesta

7

Hablando para SVN -
Un repositorio con múltiples proyectos es normal.

Puede configurar fácilmente un servidor SVN independiente (sin necesidad de un servidor web) en un PC

También puede buscar en el uso de SVN con un repositorio de archivos basado en una llave USB para mayor simplicidad entre el hogar y la escuela. Esto se limita a un solo usuario que accede a los archivos, pero significa que no necesita nada más que el cliente SVN (o TortoiseSVN)

ps. Aprender a usar SCC es una de las cosas más importantes que no te enseñan en la escuela.

+0

+1 para la idea thumbdrive + el avatar xkcd – bobby

+0

Un repositorio con múltiples proyectos puede ser normal para Subversion, pero tal vez no para git. –

+3

De manera similar, un repositorio local en una llave USB sincronizado regularmente entre una escuela y un repositorio casero es normal para git, pero no para la subversión. – Dustin

2

Puede considerar el uso de bitbucket.org, que ofrece alojamiento Mercurial con un repositorio privado de forma gratuita. Es un sistema de control de fuente relativamente fácil de aprender, y hay muchos tutoriales y ejemplos. También puede compartir este repositorio con sus compañeros de equipo durante proyectos grupales. Existen numerosos servicios como este para git también.

No creo que haya una buena razón para dividir su repositorio por tecnología (por ejemplo, Java/C++), pero si solo tiene un diseño de directorio como/assignments/course/assignment_x, debería estar bien. Probablemente haya algún código que pueda compartir en el trabajo del curso, pero supongo que eso depende del prof .....

1

Me pareció más fácil tener un solo repositorio, con subdirectorios para cada clase. Luego, dentro de los directorios de la clase, haría las carpetas de asignación (si las asignaciones constaban de varios archivos) o simplemente coloque los archivos directamente (para las asignaciones de un solo archivo, como los documentos).

1

Utilizo svn alojado en una computadora hogareña para todos mis proyectos de curso (y personales). Aquí está el diseño que uso para el repositorio:

<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> 

Y me parece que funciona bien para mí. No solo para clases de computación: inglés, matemáticas, realmente cualquier clase donde la mayoría del trabajo terminará siendo mecanografiado. Puedo ver que usar svn con, digamos, una clase de dibujo sería problemático.

0

Para mí, si no alojo el repositorio directamente en mi HD, prefiero usar DVCS (en este caso, Git).Por el momento, utilizo Bazaar, ya que puede hacer tanto centralizado como distribuido (y cambiar entre las dos operaciones de vinculación y desvinculación). Creo que también puedes usarlo a través de WebDAV. Lo uso a través del plugin de Eclipse así que es tan fácil como otro VCS.

9

Si se mueve entre un montón de ordenadores Es posible que desee realizar las tareas en una memoria USB. Suponiendo que estés usando git, no debería haber ningún problema.

que por lo general tienen una carpeta para cada clase y debajo de ella una carpeta para cada asignación,

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

Cada asignación tendría su propio repositorio. No veo una razón para usar el mismo repositorio para todas las tareas, ya que la mayoría de las veces no se relacionarán con nada.

+0

+1 Git! Woo, guerras religiosas! –

1

Me gustaría agregar al joeslice's comment anterior, otra ventaja de ir con Mercurial (en Bitbucket, por ejemplo) será tener un fácil acceso a los clientes en Windows/Unix/Mac.

  • Vaya con repositorios diferentes si no tienen dependencias.
  • Mercurial es más o menos init y correr, pero eso es cierto para todos los DVCS creo. Esto también significa que no tiene que preocuparse demasiado por cómo organizar las cosas a la perfección, sino que puede simplemente hg init en cualquier directorio antes de comenzar a trabajar allí.

PD: Hubiera dejado esto como un comentario to the post, pero aparentemente no puedo comentar aún.

4

En el espíritu de aprendizaje y compartir les dejo dos realmente grandes recursos tanto para la subversión y Git. Creo que depende de la situación de cada uno elegir la mejor opción para sus necesidades.

Subversion libro-Version Control With Subversion Libro Oficial

Git-Pro Git (Book) gran guía para el uso de git

Git Hub-Learn Github (learn.github.com Sólo encontraron esta hoy.

Hasta ahora he probado subversion y git, y encontré git con la configuración que has descrito j funciona mejor. Trataré de seguir de nuevo con este hilo. Gracias de nuevo a todos sus consejos

2

Otra cosa a tener en cuenta cuando guarde sus semestres en la nube es la accesibilidad. Decidí hacer una copia de seguridad de cada línea de código que escribí para mi estudiante de pregrado utilizando el siguiente guión.

#!/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() 
  • colocar esto en '-repositorio SVN/ganchos /' (guardarlo como post-commit)
  • hacerlo ejecutable - 'chmod + x post-commit'

I a su dirección de gmail personal por dos razones: 1. simplemente puedo buscar mis años a partir de ahora la bandeja de entrada utilizando la sencilla interfaz de gmail 2. puede despertar al día siguiente después de una larga noche de codificación y revisar todo lo que commmitted como control de cordura - Muchas compañías de software siguen esta práctica.

Cuestiones relacionadas