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:
- svn cp o mv algún archivo
- modificar ese archivo
- svn diff> mypatch
En otra máquina (misma copia de trabajo, pero sin cambios):
- Intenta aplicar mypatch.
- 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