tool - ¿Cómo aplico un parche diff en Windows?
download flex gnuwin32 (20)
EDITAR: Mirando las respuestas hasta ahora, parece que Tortoise solo lo hará bien si es un archivo que ya tiene una versión. Ese no es el caso aquí. Necesito poder aplicar un parche a un archivo que no salió de un repositorio SVN. Simplemente intenté usar Tortoise porque sé que SVN usa diffs y tiene que saber cómo crearlos y aplicarlos.
Puede instalar Cygwin y luego usar la herramienta de parche de línea de comando para aplicar el parche. Consulte también esta página man de Unix , que se aplica al parche .
Hay muchos programas que pueden crear un parche de diff, pero me está costando mucho tiempo aplicar uno. Estoy tratando de distribuir un parche, y recibí una pregunta de un usuario sobre cómo aplicarlo. Así que traté de resolverlo por mi cuenta y descubrí que no tengo ni idea, y la mayoría de las herramientas que puedo encontrar son de línea de comandos. (Puedo manejar una línea de comando, pero muchas personas se perderían sin una GUI agradable y amigable. Por lo tanto, eso no es bueno para este propósito).
Intenté usar TortoiseSVN. Tengo el parche que me gustaría aplicar. Hago clic derecho en el parche y hay una opción debajo del submenú TortoiseSVN que dice "Aplicar parche". Todo lo que hace es levantar una ventana vacía.
Así que intenté golpear Open. Tiene dos opciones: fusionar y aplicar diff unificado. (Por suerte, el parche está en formato unificado). Pero la opción de aplicar sencillamente no funciona: solicita el parche y una carpeta. ¡De alguna manera se olvidó de pedir el archivo para aplicar el parche! Entonces TortoiseSVN simplemente no funciona. ¿Hay una utilidad basada en Windows GUI que tomará un parche y un archivo y lo aplicará correctamente?
EDITAR: Mirando las respuestas hasta ahora, parece que Tortoise solo lo hará bien si es un archivo que ya tiene una versión. Ese no es el caso aquí. Necesito poder aplicar un parche a un archivo que no salió de un repositorio SVN. Solo traté de usar Tortoise, porque sé que SVN usa diffs y tiene que saber cómo crearlos y aplicarlos.
¿Tienes dos monitores? Estaba teniendo el mismo problema con TortoiseMerge y me di cuenta de que cuando desactivaba uno de los monitores, aparecía la pequeña ventana con la lista de archivos. Espero que esto te ayude.
Al aplicar parches usando TortoiseSVN, normalmente guardo la ruta en la raíz del repositorio desprotegido. Debería poder hacer clic derecho en el parche, ir al menú de TortoiseSVN y hacer clic en Aplicar en el registro. ApplyPatch debería determinar automáticamente en qué nivel de la jerarquía de directorios se creó el parche.
Sin embargo, he tenido problemas en el pasado con la aplicación de parches que contienen nuevos archivos o que implican cambiar el nombre de los archivos. Cualquier algoritmo que Tortoise use para esto no parece manejar esos escenarios muy bien. Unicode puede darle problemas similares.
Eclipse debería poder hacerlo, vaya a TeamSynchronize perspective y luego a Project-> Apply patch
El parche le dice a qué archivo se debe aplicar. El encabezado debe ser algo así como (verlo en el Bloc de notas o su editor de texto favorito):
--- Folder/old_file
+++ Folder/new_file
En el caso de un parche de Subversion, también tendrías números de revisión (dado que los nombres de los archivos son los mismos).
El parche de GNU le permitirá anular esos nombres, pero no conozco ninguna herramienta GUI para hacer lo mismo. Verificaría con los diferentes programas de diff, aunque no parece que WinMerge admita la aplicación de parches.
En TortoiseSVN, la aplicación de parches funciona. Debe aplicar el parche al mismo directorio desde el que se creó . Siempre es importante tener esto en cuenta. Así que aquí está cómo lo haces en TortoiseSVN:
Haga clic con el botón derecho en la carpeta a la que desea aplicar el parche. Presentará un diálogo preguntando por la ubicación del archivo de parche. Seleccione el archivo y esto debería abrir una pequeña ventana de lista de archivos que enumera los archivos modificados, y al hacer clic en cada elemento, se abrirá una ventana de diferencia que muestra lo que el parche está por hacer con ese archivo.
Buena suerte.
Hice la herramienta pura de Python solo para eso. Tiene un comportamiento predecible multiplataforma. Aunque no crea archivos nuevos (al momento de escribir esto) y carece de una GUI, puede usarse como una biblioteca para crear una herramienta gráfica.
ACTUALIZACIÓN : debería ser más conveniente usarlo si tiene instalado Python.
pip install patch
python -m patch
La utilidad patch.exe de la instalación de Git funciona en Windows 10.
Instale Git para Windows y luego use el comando "C:/Program Files/Git/usr/bin/patch.exe"
para aplicar un parche.
Si algún mensaje de error como un Hunk #1 FAILED at 1 (different line endings).
se ha obtenido en la salida durante la aplicación de un parche, intente agregar el -l
(que es un atajo para --ignore-whitespace
) o los --binary
cambian a la línea de comando.
Para los proyectos de Java, he usado NetBeans para aplicar archivos de parche. Si el código de Java que está aplicando no es un proyecto de NetBeans, cree un proyecto para él. Para crear un nuevo proyecto:
- Seleccione el menú Archivo -> Nuevo proyecto
- En el cuadro de diálogo resultante, conviértalo en un proyecto de aplicación Java . Ponle un nombre en el cuadro de diálogo y haz clic en Finalizar .
- Haga clic con el botón derecho en el nombre de su proyecto y seleccione Propiedades en el menú contextual
- En el cuadro de diálogo resultante, seleccione Fuentes y agregue una Carpeta de origen . Busque su fuente Java.
Ahora que tienes un proyecto, aplica el parche:
- Resalta tu proyecto para seleccionarlo
- Desde el menú principal, selecciona el menú Herramientas -> Aplicar parche diferido
- En el cuadro de diálogo resultante, busque su archivo de parche, selecciónelo y presione el botón Patch.
Eso es. Su parche debe aplicarse, y debería ver una ventana de diferencia que muestra los cambios.
Parece que TortoiseSVN (TortoiseMerge) requiere la línea Index: foobar.py
en el archivo diff / patch. Esto es lo que tenía que hacer para hacer que un archivo de parche que no sea de TortoiseSVN funcione con TortoiseSVN, haga clic con el botón derecho en Aplicar comando de parche .
Antes de:
--- foobar.py.org Sat May 08 16:00:56 2010
+++ foobar.py Sat May 08 15:47:48 2010
Después:
Index: foobar.py
===================================================================
--- foobar.py
+++ foobar.py (working copy)
O bien, si conoce la revisión específica a la que estaba trabajando su contribuyente:
Index: foobar.py
===================================================================
--- foobar.py (revision 1157)
+++ foobar.py (working copy)
Puede usar this puerto nativo Win32 de la utilidad de parche.
Viene junto con una mayor selección de otras utilidades y, a diferencia de Cygwin y similares, no necesita ningún archivo DLL o similar. Simplemente elija su pequeño ejecutable de su elección y guárdelo donde desee.
Uso simple:
patch.exe -i <patchfile>
Obtenga más ayuda:
patch.exe --help
Sé que dijiste que preferirías una GUI, pero las herramientas de línea de comando harán el trabajo bien. Ver GnuWin para un puerto de herramientas de Unix para Windows. Necesitarías el comando de parche, obviamente ;-)
Sin embargo, puede encontrarse con un problema con la terminación de la línea. El puerto GnuWin supondrá que el archivo de parche tiene terminación de línea estilo DOS (CR / LF). Intente abrir el archivo de parche en un editor razonablemente inteligente y lo convertirá por usted.
Si está utilizando Mercurial , esto se hace mediante "importación". Entonces en la línea de comando, el comando de hg import
, o (puede encontrar la --no-commit
útil), o "Repository" => "Importar ..." en Hg Workbench.
Tenga en cuenta que estos confirmarán los cambios por defecto; puede evitar esto usando la hg import --no-commit
si usa la línea de comandos, o si usó Hg Workbench, puede serle útil emitir hg rollback
después de la fusión.
Si recibe el mensaje de error "No es una copia de trabajo", intente seleccionar un directorio del cuadro de diálogo TortoiseMerge, que es un directorio de trabajo de SVN.
Solo usa:
patch -p0 < path-file.patch
Recuerde ejecutar este comando solo desde la ubicación de la carpeta donde creó el parche.
Un puerto BusyBox para Windows tiene un comando de parche y de parche, pero solo admiten un formato unificado.
Ya estoy usando BeyondCompare (comercial) para diffs y merges, y esta herramienta también tiene la capacidad de crear, ver y aplicar parches.
Yo uso MSYS2 desde http://www.msys2.org/
Proporciona muchas utilidades como patch
, which
, git
, tree
y muchas más.
Después de instalar MSYS2 simplemente ejecute el administrador de paquetes para instalar el patch
:
pacman -S patch
TortoiseMerge es una utilidad independiente que viene incluida con TortoiseSVN.
También puede descargarse por separado en el archivo TortoiseDiff.zip . Esto le permitirá aplicar diffs unificados a archivos no versionados.
Aplicar el parche
Con TortoiseMerge:
- Buscar y abrir un directorio de repositorio SVN existente
- Crea un nuevo directorio llamado "merges", si no existe ya
- Copie el archivo en el que desea aplicar el archivo .patch
- AGREGAR y COMPROMETER al repositorio svn antes de continuar con el siguiente paso
- Haga clic derecho sobre las fusiones y elija Aplicar parche ...
- Haga doble clic en el archivo de la lista
- El archivo parcheado con diff se muestra en el panel derecho
- Haga clic en ese panel y presione Guardar o exportar con Archivo-> Guardar como ...
Pantalla alternativa si abre desde TortoiseMerge. En la imagen siguiente, el directorio hace referencia al directorio "fusiones" mencionado en el paso 2 anterior:
Captura de pantalla de la GUI de WinMerge: