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 realizar ambos cambios como una confirmación, sino como dos confirmaciones independientes.
En un repositorio de git, usaría el modo interactivo de git-add (1) para dividir el trozo en otros más pequeños:
git add --patch
¿Cuál es la forma más sencilla de hacer esto con Subversion? (Quizás incluso usando un complemento de Eclipse)
Actualización:
En The Thing About Git , Ryan lo llama: "El problema de la copia de trabajo enredada".
Respuestas:
Con git-svn puede crear un repositorio GIT local del repositorio SVN remoto, trabajar con él utilizando el conjunto completo de características de GIT (incluidas las confirmaciones parciales) y luego enviarlo todo de regreso al repositorio SVN.
git-svn (1)
fuente
Tortoise SVN 1.8 ahora admite 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:
fuente
He hecho esto usando TortoiseSVN .
La utilidad de combinación incorporada le permite mostrar una diferencia entre la versión del repositorio y su copia de trabajo.
Utilice la función de creación de copia de seguridad de la utilidad diff
Ahora debería tener todos sus cambios confirmados, usando dos confirmaciones separadas.
fuente
Intente usar y
svn diff > out.patch
luego copie elout.patch
archivoout.patch.add
yout.patch.modify
Solo cuando tenga un archivo de parche que funcione, revierta el archivo original usando
svn revert out.c
.Edite los archivos de parche a mano para que solo contengan los trozos para agregar o modificar. Aplíquelos al archivo original usando el
patch
comando, pruebe si la adición funcionó, luegosvn commit
la adición.Repita el enjuague para el
out.patch.modify
parche.Si los cambios están separados en el archivo como se indicó en su pregunta inicial, agregó un nuevo método, 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 confirmaciones.
También podría haber verificado varias copias de trabajo de la misma fuente para aplicar su trabajo contra:
Asegúrese de hacer una
svn up
prueba para asegurarse de que todo esté bien.fuente
Esto es posible usando TortoiseSvn (Windows) desde v1.8.
En Linux, le daría a http://webstaff.itn.liu.se/~karlu20/div/blog/2013-05-31_SVNPartialCommit.php una oportunidad. Sin embargo, no lo he probado yo mismo.
fuente
Solía hacer esto:
Este es un enfoque simplista que asume que un conjunto de cambios es razonablemente fácil de deshacer. Para situaciones más complejas, me rendiría y realizaría ambos cambios sin preocuparme por eso.
Ahora que uso git, ¡esto es algo que espero no tener que volver a hacer nunca más!
fuente
Utilizo un repositorio de darcs local o simplemente fusiono los cambios gradualmente. Con la fusión (opendiff abre FileMerge, un programa de fusión que viene con Xcode; reemplácelo con su herramienta de fusión favorita):
fusionar los cambios relacionados, guardar la fusión, salir del programa de fusión
si hay más de un trozo no relacionado en el archivo, enjuague y repita (pero ¿por qué esperaría tanto antes de comprometerse?)
Además, si conoce git, puede usar git-svn para mantener un repositorio local de git y sincronizar sus confirmaciones con un servidor maestro svn; funciona muy bien en mi limitada experiencia.
fuente
Pruebe VisualSVN para Visual Studio . La última versión 6.1 presenta la función QuickCommit. Puede confirmar parcialmente los cambios seleccionados en un archivo utilizando los nuevos comandos del menú contextual Confirmar este bloque y Confirmar selección en el editor de Visual Studio.
fuente
Es un poco más arriesgado que la sugerencia completa de Spike, pero puede ser más fácil de hacer. También asegúrese de probarlo en otra cosa primero, ya que algunos editores se negarán a guardar un archivo que haya cambiado de debajo de ellos a menos que vuelva a cargar ese archivo (perdiendo todos sus cambios)
fuente
Creo que una opción más fácil que generar archivos diff, revertir, etc., sería tener dos copias del repositorio retiradas y usar una herramienta de diferencia visual como DeltaWalker para copiar trozos de uno a otro.
La primera copia sería aquella con la que realmente trabaja, y la segunda sería solo para este propósito. Una vez que haya realizado muchos cambios en la primera, puede copiar una sección a la segunda, confirmarla, copiar otra sección, confirmarla, etc.
fuente
svn diff
.svn revert
.patch
herramienta, editando manualmente o lo que sea.diff
luego para comparar su copia de trabajo con su copia de seguridad para asegurarse de que aplicó las partes del parche correctamente.fuente