Número de revisión de Subversion en múltiples proyectos

Cuando utilizo Subversion (svn) para el control de fuente con múltiples proyectos, he notado que el número de revisión aumenta en todos los directorys de mis proyectos. Para ilustrar mi layout de svn (usando nombres de proyectos ficticios):

     / NinjaProg / twigs
               / tags
               /el maletero
     / StealthApp / branches
                / tags
                /el maletero
     / SnailApp / branches
              / tags
              /el maletero

Cuando realizo un commit en el tronco del Progtwig Ninja, digamos que obtengo que se haya actualizado a la revisión 7. Al día siguiente digamos que realizo un pequeño cambio a la Aplicación Stealth y vuelve como la revisión 8.

La pregunta es esta: ¿es una práctica comúnmente aceptada que, al mantener múltiples proyectos con un server de Subversion, aumente el número de revisiones de los proyectos no relacionados en todos los proyectos? ¿O lo estoy haciendo mal y debería estar creando repositorys individuales para cada proyecto? ¿O es algo completamente diferente?

EDITAR: Me retrasé en marcar una respuesta porque había quedado claro que hay razones para ambos enfoques, y aunque esta pregunta fue lo primero, me gustaría señalar algunas otras preguntas que finalmente hacen la misma pregunta:

¿Debo almacenar todos los proyectos en un solo repository o múltiplex?

Un repository SVN o muchos?

Me sorprende que no haya mencionado que esto se discute en el Control de versiones con Subversion, que está disponible en línea gratis, aquí .

Hace un time leí sobre el tema y realmente parece una cuestión de elección personal, aquí hay una buena publicación en el blog sobre el tema. EDIT: dado que el blog parece estar inactivo, ( versión archivada aquí ), aquí hay algo de lo que Mark Phippard dijo sobre el tema.

Estas son algunas de las ventajas del enfoque de repository único.

  1. Administración simplificada Un set de ganchos para implementar. Un repository para hacer una copy de security. etc.
  2. Flexibilidad de twig / label. Con el repository de código todo en uno, facilita la creación de una twig o label que implique varios proyectos.
  3. Mueve el código fácilmente. Quizás desee tomar una sección de código de un proyecto y usarla en otro, o convertirla en una biblioteca para varios proyectos. Es fácil mover el código dentro del mismo repository y conservar el historial del código en el process.

Estos son algunos de los inconvenientes del enfoque de repository único, ventajas del enfoque de repository múltiple.

  1. Tamaño. Podría ser más fácil tratar con muchos repositorys más pequeños que uno grande. Por ejemplo, si retira un proyecto, puede archivar el repository en los medios y eliminarlo del disco y liberar el almacenamiento. Tal vez necesite volcar / cargar un repository por alguna razón, como para aprovechar una nueva característica de Subversion. Esto es más fácil de hacer y con less impacto si es un repository más pequeño. Incluso si finalmente desea hacerlo a todos sus repositorys, tendrá less impacto hacerlos uno a la vez, suponiendo que no haya una necesidad apremiante de hacerlos todos a la vez.
  2. Número de revisión global. Aunque esto no debería ser un problema, algunas personas lo perciben como uno y no les gusta ver que el número de revisiones avance en el repository y que los proyectos inactivos tengan grandes lagunas en su historial de revisiones.
  3. Control de acceso. Si bien el mecanismo de authentication de Subversion le permite restringir el acceso según sea necesario a partes del repository, aún es más fácil hacerlo a nivel de repository. Si tiene un proyecto al que solo deben acceder unas pocas personas selectas, es más fácil hacerlo con un solo repository para ese proyecto.
  4. Flexibilidad administrativa Si tiene varios repositorys, entonces es más fácil implementar diferentes scripts de gancho basados ​​en las necesidades del repository / proyectos. Si desea scripts de gancho uniforme, entonces un único repository podría ser mejor, pero si cada proyecto quiere su propio estilo de correo electrónico de confirmación, entonces es más fácil tener esos proyectos en repositorys separados.

Cuando realmente piensas, los numbers de revisión en un repository de proyectos múltiples van a boost, pero no te vas a agotar. Tenga en count que puede ver un historial en un subdirectory y ver rápidamente todos los numbers de revisión que pertenecen a un proyecto.

Creo que es muy recomendable que cree repositorys separados para cada proyecto. Si no fuera por nada más que para evitar el escenario del que estás hablando.

Con el control de versiones, especialmente Subversion, puede ver fácilmente las piezas de un repository en otra copy de trabajo y luego volver a enviarlas a sus respectivos repositorys. Eso le permite mantenerlos claramente separados y diferenciados a la vez que le brinda una gran flexibilidad. Una vez que ingresas a SVN un poco más (supongo que eres nuevo) puedes comenzar a usar ganchos y es posible que veas dónde puede ser difícil hacerlo con tu configuration. Si el permiso es importante para usted, un único repository puede resultar más difícil de lo necesario.

Además, si le preocupa que llevará mucho time configurar cada vista de repository en la variable SVNParentPath para el file de configuration de Apache. (De nuevo, supongo que estás usando Apache).

Esto se debe a cómo funciona la subversión. Cada revisión es realmente una instantánea del repository identificado por ese número de revisión. Si todos sus proyectos comparten un repository, entonces es inevitable. Por lo general, en mi experiencia, sin embargo, configuraría repositorys separados para proyectos completamente independientes. Así que la respuesta corta es que no está haciendo nada incorrecto, es una pregunta común en torno a la subversión, pero tiene sentido cuando se piensa en cómo almacena la información del repository.

El número de revisión realmente debería ser solo un identificador para una versión particular. Si es secuencial para un proyecto o no, no debería importar. Dicho esto, puedo entender que es less que ideal.

La mayoría de los proyectos que he encontrado han sido configurados en un único repository y los identificadores de revisión se comportan de esta manera. No conozco ninguna opción de configuration SVN para cambiar este comportamiento, y en mi humilde opinión, mantener múltiples repositorys parece una sobrecarga innecesaria.

Solo tenemos un repository con todo lo que contiene, más o less exactamente como su ejemplo.

No veo nada malo con esto: el único requisito para el número de revisión es que es

  • Único
  • Atómico
  • Más grande de lo que era en la última comprobación

No importa si aumenta en 1 o 50 con cada compromiso en lo que a mí respecta.

@grom:

Entonces cada vez que empiezo un nuevo proyecto, simplemente ejecuto:

svnadmin create /var/www/svn/myproject

Puedo ver que funciona bien si solo tienes 1 o 2 desarrolladores, pero ¿qué sucede si las personas que están creando nuevos proyectos no tienen acceso de shell en el server SVN para poder crear directorys en / var / www?

Recomendado para usar repository por proyecto. En mi directory Apache conf.d tengo subversion.conf que contiene:

 <Location /svn> DAV svn SVNParentPath /var/www/svn AuthType Basic AuthName "Subversion Repository" AuthUserFile /var/www/svn/password Require valid-user </Location> 

Entonces cada vez que empiezo un nuevo proyecto, simplemente ejecuto:

 svnadmin create /var/www/svn/myproject 

Hm, donde trabajo tenemos todos nuestros proyectos en el mismo repository. Realmente no veo el beneficio de separarlos, ¿no es que eso crea mucho trabajo extra -crear nuevos repositorys, otorgar acceso a personas, etc.? Creo que los repositorys separados tienen sentido si los proyectos no están relacionados y usted tiene, por ejemplo, clientes externos que necesitan tener acceso al repository.

En mi lugar de trabajo, tenemos dos repositorys. Uno con acceso de lectura público y otro para todo lo demás. Usaría solo uno para todo, pero necesitamos diferentes derechos de acceso para proyectos públicos / privados.

Dicho esto, personalmente no veo el problema con el aumento de los numbers de revisión en cada actualización. Los numbers de revisión podrían omitir los numbers primos y pares y aún así hacer lo que se supone que debe hacer. Facilite acceder a una revisión específica.

Si tener los numbers de revisión cambian en function de otros proyectos te molesta, luego coloca los proyectos en repositorys separados. Esa es la única forma de hacer que los numbers de revisión sean independientes.

Para mí, la gran razón para usar repositorys diferentes es proporcionar control de acceso por separado para los usuarios y / o usar diferentes scripts de gancho.

Tal vez es mejor no hacer necesariamente un repository por "proyecto", sino más bien un repository por "solución" (para usar los términos de Visual Studio). Si tiene un grupo de "proyectos" en carpetas diferentes pero están relacionados entre sí, póngalos en el mismo repository.

Almaceno un proyecto por repository, y como un comentarista anterior sobre esta pregunta de subversión , marco proyectos compartidos como externos, de modo que solo estén en control de fuente una vez.

Estoy empezando a agregar un server de compilation de CI (CruiseControl.NET), así que tendré que ver cómo funciona todo, pero si mis scripts de compilation son correctos, no debería ser un problema.

Sin embargo, aparte del aspecto, es realmente una cuestión de preference (en mi opinión).

Cuando realmente piensas, los numbers de revisión en un repository de proyectos múltiples van a boost, pero no te vas a agotar. Tenga en count que puede ver un historial en un subdirectory y ver rápidamente todos los numbers de revisión que pertenecen a un proyecto.

En realidad, si construyes el código de Microsoft y usas los numbers de revisión de svn como parte de la cadena de tu versión, entonces podrías agotarte. El comstackdor de Microsoft arrojará un error si alguna parte de la cadena de la versión es mayor que 65535 … En nuestro caso, tenemos un repository masivo en la revisión 68876 y acabamos de llegar a este muro.

Un repository por proyecto.

El comentario de Steven Murawski sobre CC.NET es interesante. Me interesaría saber cómo funciona si necesita especificar varios repositorys de control de origen.

@Daniel Fone: los documentos de SVN recomiendan un proyecto por repository, así que definitivamente es la forma en que los creadores intentaron hacerlo. Como puede tener un server (apache o svnserve) que mantenga varios repositorys, nunca me he encontrado con un problema de demasiada sobrecarga. Con el Servidor VisualSVN , instalar un server Apache y configurar varios repositorys es muy fácil.

No estoy seguro de que los documentos de SVN realmente recomienden un proyecto por repository. En su mayoría, hablan sobre las ventajas y desventajas de cada path. Utilizo tres repositorys diferentes, uno para 7 u 8 proyectos que están relacionados, lo que hace que sea muy agradable poder enviar copys compatibles de todos los proyectos simplemente comstackndo a partir de una revisión (o verificando que sean compatibles al mirar). en los numbers de revisión en cada uno). El segundo repository tiene otro grupo de proyectos y documentos relacionados, mientras que el tercero es mucho más pequeño. Eso nos permite aprovechar el hecho de que los proyectos relacionados se pueden administrar con un solo número de revisión, pero que los proyectos relacionados no afectan a su repository.

Los numbers de revisión no tienen uso semántico. Lo único es que están en order secuencial. Si vuelca su proyecto e lo importa en otro repository, sus versiones pueden get nuevos numbers de revisión. Así que NUNCA uses los numbers de revisión para marcar tus lanzamientos o cosas similares. Haga tags para lanzamientos (copys de la revisión relevante).

Tuve el mismo problema en mi empresa anterior. Solían tener como 50 proyectos en ejecución en un repository y era una pesadilla trabajar en los mismos proyectos porque al hacer las actualizaciones de svn, otros maldecían … jaja …

Una cosa que aprendí siempre es la mejor, One project One Repo … nunca te arrepentirás.