2009-06-25 14 views
5

Me he pintado en un problema al trabajar con un proyecto de Subversion de CodePlex, para esto pedí ayuda here. Tengo un repositorio local y CodePlex tiene su repositorio de Internet para el proyecto, y los dos no se mezclan :-(.¿Cómo usar un repositorio Subversion de Internet cuando desarrolla código?

Pero mi querido papá fallecido solía decirme que la diferencia entre un hombre inteligente y un hombre sabio es que el hombre sabio no entra en la trampa de la que un hombre inteligente encuentra su camino. En otras palabras: debo haber estado haciendo algo mal. Entonces:

Supongamos que es un grupo de pocos desarrolladores. El proyecto controlado por Subversion en Internet que desea comenzar a modificar. Desea trabajar en él localmente, cambiándolo según sus necesidades. Desea control de versión local. Desea controlar qué cambios de Internet aceptar en su repositorio, los que son relevantes. e importante y no causa ruido. Desea comprometerse con Internet algunos de sus loca Cambios: aquellos que está seguro que son estables y que son relevantes para toda la comunidad.

Este método de operación me parece de sentido común, pero nunca he trabajado en un proyecto de código abierto. Entonces: 1. ¿Es este un método de operación común y ? 2. ¿Cómo se puede hacer con Subversion sin meterse en problemas?

+0

Parece que la respuesta común es que use un sistema de control de revisión distribuido como Git. Sin embargo, esto significa que estás sugiriendo que trabaje con CodePlex, no de la manera en que los CodePlex Gods lo han planeado. Entiendo y les agradezco a todos. Sin embargo, ¿mi MO es tan diferente de la norma? ¿Las respuestas a mis dos preguntas anteriores son: 1. NO y 2. No puede? ¿De qué manera trabajan los demás con CodePlex/Subversion para que no tengan que usar Git? – Avi

Respuesta

1

Absorber los cambios desde una fuente externa ("proveedor cae") en su propio repositorio local se cubre en el libro SVN en la sección Vendor Branches.

Alternativamente, podría usar el comando merge para seleccionar las revisiones de una carpeta en el repositorio A y aplicar esos cambios a una copia de trabajo de una carpeta en el repositorio B. El comando de fusión parece tener algún soporte para esto (en al menos en la última versión) por lo que probablemente funcione de manera similar a la fusión entre sucursales locales (menos el seguimiento de fusión automático).

0

Supongamos que usted es un grupo de unos pocos desarrolladores de . Existe un proyecto controlado por Subversion en Internet que desea comenzar a modificar. Desea que trabaje en ello localmente, cambiándolo a que se ajuste a sus necesidades. Desea control de versión local . Desea controlar qué Internet cambia para aceptar su repositorio, aquellos que son relevantes e importantes y no causan ruido .

Quiere ser capaz de trabajar localmente, y bifurcar o fusionar sin pensarlo dos veces. Básicamente estás hablando de control de versiones distribuidas. Subversion no es compatible con esto. En su lugar, debe usar algo como Mercurial o Git.

0

Parece que debería buscar crear una rama para su código en el repositorio original. Puede fusionarse desde el tronco hasta su rama, o al revés, como desee.

Su otra opción es exportar los archivos desde el repositorio y agregarlos a su propio repositorio. Pero eso solo será un dolor en el futuro.

+0

¿Cómo puedo ramificar el repositorio original (CodePlex)? No lo "poseo". – Avi

0

Esto es mucho más fácil con los sistemas de control de fuente distribuida, como git.

luego puede tener un repositorio git local, usar git-svn para obtener actualizaciones del repositorio público, y tener su propia sucursal local con sus ajustes especiales.

Usted verá muchos proyectos de este tipo (que se extienden a la subversión de opinión proyectos OSS utilizando GIT) en github - para NHibernate, para el proyecto de Castillo, etc.

si debe seguir con SVN, puede administrar su propio cambiar usando un conjunto de archivos de parche sobre el tronco público. si quieres cosas más nuevas desde el maletero, crea un parche con tus cambios, revierte, actualiza al tronco más nuevo y luego aplica tu parche de forma selectiva.

+0

Su último párrafo me confundió por completo por un minuto. Al releerlo por tercera vez, está empezando a tener sentido. ¡Gracias! Avi – Avi

0

Por lo general, conservo una copia que saqué de SVN que contiene solo el código actualizado del repositorio y el código en el que estoy trabajando y tengo la intención de volver a cometerlo.

Al trabajar en una nueva característica, exportaría la copia completa a una nueva copia en mi máquina, luego realizaría + una prueba de los cambios necesarios. Si decidí devolver los cambios, utilizo algún tipo de herramienta de fusión (WinMerge es bueno si estás en Windows), para fusionar mis cambios en la carpeta original actualizada por SVN que eliminé.

Esto mantiene todo bastante limpio, ya que soy capaz de evitar de forma relativamente fácil el código involuntario. También puedo eliminar cambios fácilmente con solo hacer una copia nueva de mi carpeta 'base' actualizada con SVN. La desventaja es que hace que trabajar en múltiples funciones que no planeo comprometer a la vez sea relativamente difícil de manejar.

1

Subversion es inherentemente un sistema de control de revisiones centralizado. Según su descripción, parece que quiere un sistema de control de revisión distribuido. En dicho sistema, las personas pueden desarrollarse localmente y luego intercambiar sus unidades de trabajo (llamadas conjuntos de cambios) entre sí. Los sistemas de control de revisión distribuidos tienen un excelente soporte para fusionar sucursales para respaldar esto.

Estoy usando Mercurial y lo recomendaría para un usuario de Subversion ya que muchos de sus comandos son similares a los comandos en Subversion. Otras herramientas populares en esta categoría incluyen Git y Bazaar.

Cuestiones relacionadas