Debo almacenar todos los proyectos en un repositorio o varios?


Actualmente estoy usando TortoiseSVN para administrar un par de proyectos que tengo en movimiento en este momento. Cuando moví todo por primera vez al control de código fuente, no estaba realmente seguro de cómo se debía diseñar todo, así que terminé poniendo cada proyecto en su propio repositorio.

Me preguntaba si sería una buena idea moverlos a todos en un gran repositorio y dividirlos en carpetas de proyecto. ¿Qué hacen los demás?

En este momento ninguno de ellos compartir código común, pero pueden en el futuro. ¿Sería más fácil de manejar si donde todos juntos.

Gracias.

Author: roalz, 2008-09-25

11 answers

Depende hasta cierto punto de lo que se entiende por "proyecto".

Tengo un repositorio local general que contiene bits aleatorios de cosas que escribo (incluyendo mi sitio web, ya que es pequeño). Un repositorio SVN local de un solo usuario no va a sufrir problemas de rendimiento notables hasta que haya pasado muchos años escribiendo. En ese momento SVN será más rápido de todos modos. Así que todavía tengo que arrepentirme de haber arrojado todo en un repositorio, a pesar de que algunas de las cosas que hay no están completamente relacionadas con otras que eso lo escribí todo.

Si un "proyecto" significa "una tarea de la clase", o "los scripts que uso para conducir mi TiVo", o "mi progreso en el aprendizaje de un nuevo idioma", entonces crear un repos por proyecto me parece un poco innecesario. Por otra parte, tampoco cuesta nada. Así que supongo que diría que no cambies lo que estás haciendo. A menos que realmente quieras la experiencia de reorganizar repositorios, en cuyo caso cambia lo que estás haciendo : -)

Sin embargo, si por "proyecto" usted significa un proyecto de software' real', con acceso público al repositorio, entonces creo que los repositorios separados por proyecto es lo que tiene sentido: en parte porque divide las cosas limpiamente y cada proyecto escala independientemente, pero también porque es lo que la gente esperará ver.

Compartir código entre repositorios separados es menos problemático de lo que podría pensar, ya que svn tiene la característica "svn:externals" bastante encantadora. Esto le permite apuntar un directorio de su repositorio a un directorio en otro repositorio, y comprobar que las cosas automáticamente junto con sus cosas. Vea, como siempre, el libro de SVN para más detalles.

 31
Author: Steve Jessop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-24 23:24:46

Los almacenaría en el mismo repositorio. Es un poco más ordenado. Además, ¿por qué sería importante para la integración continua y tal-siempre se puede extraer una carpeta específica del repositorio.

También es más fácil administrar-cuentas a un repositorio, registros de acceso a un repositorio, etc.

 8
Author: Svet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-24 23:03:32

Mi regla general es consolidar las cosas que se entregan juntas. En otras palabras, si puede entregar el proyecto X y el proyecto Y por separado, póngalos en repositorios separados.

Sí, a veces esto significa que tiene un repositorio enorme para un proyecto que contiene un gran número de componentes, pero la gente puede operar en sub-árboles de un repositorio y esto los obliga a pensar en el "proyecto completo" cuando realizan cambios en el repositorio.

 6
Author: andy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-24 22:59:39

Mantendría absolutamente cada proyecto en su propio repositorio, separado de todos los demás. Esto le dará a cada proyecto su propio historial de confirmaciones. Las reversiones en un proyecto no afectarán a otros proyectos.

 5
Author: Steve Paulo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-24 22:58:47

Personalmente prefiero cada proyecto en su propio repositorio

 4
Author: paan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-24 22:56:10

Si trabajas con muchas otras personas, podrías considerar si todos necesitan el mismo nivel de acceso a cada proyecto. Creo que es más fácil dar derechos de acceso por persona si pones cada proyecto en un repositorio separado. ~~~

 3
Author: Steve Pitchers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-25 16:17:35

Si va con un repositorio separado para cada proyecto, puede usar la etiqueta externa para referirse a otros repositorios, por lo tanto, compartir código.

 2
Author: Silver Dragon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-24 23:02:53

Mientras cada proyecto tenga /trunk /tags y /branches eres bueno. La integración continua adecuada es el criterio aquí.

 0
Author: Matt Hinze,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-24 22:57:21

Sí, pon todo en control de código fuente.

Si está usando SVN, mantenga los proyectos en su propio repositorio - svn es lento, y se vuelve más lento.

 0
Author: Marcin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-24 22:58:11

Si sus proyectos son independientes, está bien mantenerlos en repositorios separados. Si comparten componentes, póngalos juntos.

 0
Author: Dima,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-24 23:00:23

Para Subversion, sugeriría poner todo en el mismo repositorio; la sobrecarga administrativa de configurar un nuevo repositorio es demasiado alta para que sea una obviedad, por lo que es más probable que no vea algo y se arrepienta más tarde. Subversion proporciona muchos controles de acceso detallados si necesita restringir el acceso a una parte de su repositorio.

A medida que empiezo a migrar mis proyectos a Mercurial, sin embargo, he cambiado a la creación de un repositorio por proyecto, porque solo toma un "hg init" para crear uno nuevo en su lugar, y puedo usar la extensión hg forest para realizar operaciones fácilmente en repositorios anidados. Subversion tiene svn: externals, que son algo similares, pero requieren más sobrecarga administrativa.

 0
Author: Nicholas Riley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-24 23:14:00