it-swarm-es.tech

Compromisos parciales con subversión

Dado el caso, hice dos cambios independientes en un archivo : por ejemplo. Agregó un nuevo método y cambió otro método.

A menudo no quiero confirmar ambos cambios como uno confirmar, sino como dos cometidos independientes.

En un repositorio de git utilizaría el modo interactivo de git-add (1) para dividir el trozo en los más pequeños:

 git add --patch

¿Cuál es la forma más fácil de hacer esto con Subversion? (Tal vez incluso utilizando un plugin de Eclipse)

Actualización:
En The Thing About Git , Ryan lo llama: "El problema de la copia de trabajo enredada".

98
Benedikt Waldvogel

Con git-svn puede hacer un repositorio GIT local del repositorio SVN remoto, trabajar con él utilizando el conjunto completo de funciones GIT (incluidas las confirmaciones parciales) y luego enviarlo todo al repositorio SVN.

git-svn (1)

32
jkramer

Tortoise SVN 1.8 ahora es compatible esto con su función "Restaurar después de confirmar". Esto le permite realizar ediciones en un archivo, y todas las ediciones se deshacen después de la confirmación

Según la documentación:

Para confirmar solo las partes del archivo que se relacionan con un problema específico:

  1. en el cuadro de diálogo de confirmación, haga clic con el botón derecho en el archivo, elija "restaurar después de confirmar"
  2. editar el archivo en, por ejemplo, TortoiseMerge: deshaga los cambios que aún no desea confirmar
  3. guarda el archivo
  4. cometer el archivo
59
Casebash

Lo he hecho usando TortoiseSVN .

La utilidad integrada de combinación le permite mostrar una diferencia entre la versión del repositorio y su copia de trabajo.

Utilice la función crear copia de seguridad de la utilidad diff

  1. Vaya a confirmar su archivo como si fuera a confirmar todos los cambios.
  2. En la ventana de confirmación, haga doble clic en el archivo para mostrar una diferencia.
  3. En la configuración de diferencias, haga clic en la opción para hacer una copia de seguridad del archivo original .
  4. Haga clic derecho en los cambios que no desea, y use select use otro bloque de texto .
  5. Guarde el diff exactamente una vez . La copia de seguridad se sobrescribirá cada vez que guarde. Por eso solo quieres guardar una vez.
  6. Comete el cambio.
  7. Sobrescriba el original con el archivo .bak creado (que tendrá todos sus cambios originales).
  8. Confirma tu archivo.

Ahora deberías tener todos tus cambios confirmados, usando dos confirmaciones separadas.

41
Spike

Intente utilizar svn diff > out.patch y luego copie el archivo out.patch a out.patch.add y out.patch.modify

Solo cuando tienes un archivo de parche activo revertir el archivo original usando svn revert out.c.

Edite los archivos de parche a mano para que solo contengan hunks para agregar o modificar. Aplíquelos al archivo original usando el comando patch, pruebe si la adición funcionó, luego svn commit la adición.

Lave el enjuague y repita para el parche out.patch.modify.

Si los cambios están separados en el archivo como se indicó en su pregunta inicial, se agregó un nuevo método, se cambió un método existente, esto funcionará

Esta es una solución muy tediosa, aunque no estoy convencido de que deba tener alguna razón para separar sus compromisos.

También podría haber sacado varias copias de trabajo de la misma fuente para aplicar su trabajo contra:

svn co http://location/repository methodAdd

svn co http://location/repository methodModify

Asegúrese de escribir svn up y hacer una prueba para asegurarse de que todo está bien.

24
Chris

Esto es posible utilizando TortoiseSvn (Windows) desde v1.8.

4.4.1. El diálogo de cometer

Si su copia de trabajo está actualizada y no hay conflictos, está listo para confirmar sus cambios. Seleccione cualquier archivo y/o carpeta que desee confirmar, luego TortoiseSVN → Confirmar ...

<snip>

4.4.3. Cometer solo partes de archivos

En ocasiones, solo desea confirmar partes de los cambios realizados en un archivo. Esta situación suele suceder cuando se está trabajando en algo, pero luego hay que confirmar una solución urgente, y esa solución está en el mismo archivo en el que se está trabajando.

haga clic con el botón derecho en el archivo y use Menú contextual → Restaurar después de confirmar. Esto creará una copia del archivo tal como está. Luego puedes editar el archivo, por ejemplo. en TortoiseMerge y deshaga todos los cambios que no quiera confirmar. Después de guardar esos cambios puedes cometer el archivo.

Una vez finalizada la confirmación, la copia del archivo se restaura automáticamente, y tiene el archivo con todas las modificaciones que no se confirmaron.

En Linux, le daría a http://webstaff.itn.liu.se/~karlu20/div/blog/2013-05-31_SVNPartialCommit.php un intento. Aunque no lo he probado yo mismo.

10
parvus

Solía ​​hacer esto:

  • En mi editor (yo uso vim), edite el archivo para que solo aparezca uno de los cambios
  • Guarde el archivo (pero no salga del editor)
  • Confirma el archivo cambiado a svn
  • Haga clic en "deshacer" en el editor suficientes veces para que vuelva a aparecer el segundo conjunto de cambios.
  • Guarda el archivo de nuevo
  • Cometer el segundo conjunto de cambios.

Este es un enfoque simplista que asume que un conjunto de cambios es razonablemente fácil de deshacer. Para situaciones más complejas, me gustaría renunciar y cometer ambos cambios sin preocuparme por ello.

¡Ahora que uso git, esto es algo que espero no volver a tener que hacer!

7
Greg Hewgill

Utilizo un repositorio local de darcs, o simplemente fusiono los cambios gradualmente. Con la fusión (opendiff abre FileMerge, un programa de combinación que viene con Xcode; reemplaza con tu herramienta de combinación favorita):

cp file file.new
svn revert file
opendiff file.new file -merge file

fusionar los cambios relacionados, guardar la combinación, salir del programa de combinación

svn ci -m 'first hunk' file
mv file.new file
svn ci -m 'second hunk' file

si hay más de un trozo no relacionado en el archivo, enjuague y repita (pero ¿por qué esperaría tanto tiempo antes de cometerlo?)

Además, si conoce git, puede utilizar git-svn para mantener un repositorio de git local y sincronizar sus confirmaciones con un servidor maestro svn; Funciona muy bien en mi experiencia limitada.

4
Aeon

Probar VisualSVN para Visual Studio . La última versión 6.1 introduce la función QuickCommit. Puede confirmar parcialmente los cambios seleccionados en un archivo utilizando el nuevo Confirmar este bloque y Confirmar selección Comandos del menú contextual en el editor de Visual Studio.

enter image description here

3
bahrep
  1. Abra todos los archivos que desea dividir en editor de elección
  2. Usando un conjunto de herramientas diferente (en Win, use la sugerencia de Spike (la versión anterior)) para volver al segundo conjunto
  3. Cometer
  4. vuelva a su editor de su elección y guarde todos los archivos

Es un poco más arriesgado que la sugerencia completa de Spike, pero puede ser más fácil de hacer. También asegúrate de intentarlo en otra cosa primero, ya que algunos editores se negarán a guardar sobre un archivo que ha cambiado desde debajo de ellos a menos que vuelvas a cargar ese archivo (perdiendo todos tus cambios)

2
BCS

Creo que una opción más fácil que generar archivos diff, revertir, etc., sería tener dos copias del repositorio desprotegidas, y usar una herramienta de diferencias visuales como DeltaWalker para copiar fragmentos de uno a otro.

La primera copia sería la de la que realmente trabajaste, y la segunda sería solo para este propósito. Una vez que haya realizado una tonelada de cambios en la primera, puede copiar una sección a la segunda, confirmarla, copiar otra sección, confirmarla, etc.

0
Ian Dunn
  1. Copie todos los archivos modificados concernidos a las copias de respaldo.
  2. Cree un parche del estado de trabajo utilizando svn diff.
  3. Revertir los archivos utilizando svn revert.
  4. Vuelva a aplicar las partes del parche que desea confirmar, ya sea usando la herramienta patch, o editando manualmente, o lo que sea.
  5. Ejecute diff luego para comparar su copia de trabajo con su copia de seguridad para asegurarse de que aplicó las partes del parche correctamente.
  6. Construir y probar.
  7. Cometer.
  8. Copie sus copias de respaldo de nuevo a su registro de salida del repositorio.
  9. Repita en 2. (no en 1.!) Hasta que termine.
0
michaeljt