two tortoise subversion español create crear branches svn merge diff patch

tortoise - ¿Cómo hacer que svn diff produzca el archivo que aplicaría el parche, cuando se usaba svn cp o svn mv?



tortoise merge (4)

El escenario es:

  1. svn cp o mv algún archivo
  2. modificar ese archivo
  3. svn diff> mypatch

En otra máquina (misma copia de trabajo, pero sin cambios):

  1. Intenta aplicar mypatch.
  2. Fail -> intenta modificar el archivo inexistente.

¿Cómo puedo hacer que svn diff produzca parches con aplicaciones de parches, o aplicar limpiamente el parche producido por svn diff en este caso? No puedo comprometerme. Me gustaría conservar mergeinfo (porque la solución obvia es agregar el archivo como totalmente nuevo, sin conexión con el anterior).


¿Has probado la opción --show-copies-as-adds mencionada en la página web de svn diff y descrita en la página de opciones de svn ?.


Con subversión, puede especificar qué binario diferir para usar y parámetros para pasar a él. Ver el manual en svn diff.

Querrías producir un archivo de parche regular desde un svn diff, por lo que querrías que el svn diff se viera como un diff normal. Prueba esto:

svn diff --diff-cmd /usr/bin/diff -x "-i -b" > mypatch ... patch -p0 < mypatch

Prueba de concepto:

echo "newline" >> README.txt svn diff --diff-cmd /usr/bin/diff -x "-i -b" > mypatch cp README.txt README.txt.patched svn revert README.txt patch -p0 < mypatch diff README.txt README.txt.patched

No hay diferencia en los dos archivos después de parchear.


Si desea deshacerse de las propiedades de svn también en sus parches, hay una opción para eso:

svn diff --patch-compatible > mypatch.diff

svn help diff dice:

--patch-compatible : generate diff suitable for generic third-party patch tools; currently the same as --show-copies-as-adds --ignore-properties

Los parches creados de esta manera se supone que son compatibles con la buena utilidad de patch simples.


Sin entender el escenario específico en el que intentas trabajar es difícil identificar por qué querrías hacer esto. Me da la sensación de que estás tratando de hacer cambios controlados en un entorno aislado para evitar impactar a otros usuarios / aplicaciones.

Podrías resolver este problema por;

  • Crea una rama para cambiar tu código
  • Realice su copia / movimiento y cambios en la rama
  • Haga que la otra parte cambie a esta nueva rama de código y continúe compartiendo esta rama

Cuando ambos han estado de acuerdo con los cambios, vuelva a fusionarse en trunk usando el argumento --reintegrate y rm the branch?

Esto mantendría * merge-info * Identificará la copia / movimiento y cambiará en el control de la versión * Aún aislará los cambios de otros usuarios * Evitaría que los cambios incompletos durante el paso 2 sean un problema, ya que podría agregar más cambios y actualizar