Tengo un parche llamado my_pcc_branch.patch.
Cuando trato de aplicarlo, recibo el siguiente mensaje:
$ git apply --check my_pcc_branch.patch
warning: src/main/java/.../AbstractedPanel.java has type 100644, expected 100755
error: patch failed: src/main/java/.../AbstractedPanel.java:13
error: src/main/java/.../AbstractedPanel.java: patch does not apply
Qué significa eso?
¿Como puedo solucionar este problema?
has type 100644, expected 100755
implica que hay algún desajuste de permisos chmod en alguna parte?Respuestas:
git apply --reject --whitespace=fix mychanges.patch
trabajó para mi.Explicación
La
--reject
opción le indicará a git que no falle si no puede determinar cómo aplicar un parche, sino que puede aplicar trozos individuales que puede aplicar y crear archivos de rechazo (.rej
) para los trozos que no puede aplicar. Menear puede "aplicar [estos] parches rechazados y realizar diferencias de palabras".Adicionalmente,
--whitespace=fix
advertirá sobre los errores de espacios en blanco e intentará solucionarlos, en lugar de negarse a aplicar un trozo aplicable de otro modo.Ambas opciones juntas hacen que la aplicación de un parche sea más robusta contra fallas, pero requieren atención adicional con respecto al resultado.
Para toda la documentación, consulte https://git-scm.com/docs/git-apply .
fuente
.rej
archivos cuando no puede detectar automáticamente cómo aplicar un parche. Podrías usar wiggle para resolver tales problemas.Johannes Sixt de la lista de correo [email protected] sugirió usar los siguientes argumentos de línea de comando:
Esto resolvió mi problema.
fuente
-C1
cambiar para aplicar, reduce el contexto en torno a las adiciones que se consideran importantes.Cuando todo lo demás falla, prueba
git apply
la--3way
opción .git apply --3way patchFile.patch
El caso típico de falla aplica la mayor cantidad de parche que puede y te deja con conflictos para resolver en git como de costumbre lo haces. Probablemente un paso más fácil que la
reject
alternativa.fuente
--3way
debería ser el comportamiento predeterminado. Cuando el parche falla, al menos dime qué falló para que pueda solucionarlo manualmente.git apply
simplemente falla y no informa por qué algo falla. Ni siquiera pude encontrar*.rej
archivos como los quehg
genera.Este comando aplicará el parche sin resolverlo, dejando archivos incorrectos como
*.rej
:Solo tienes que resolverlos. Una vez resuelto ejecutar:
fuente
*.rej
: todo lo que puedo encontrar es hacer los cambios manualmente en el archivo fuente y eliminar estos.rej
archivos. Cualquier otra forma ?wiggle --replace path/to/file path/to/file.rej
. Este comando aplicará los cambios del.rej
archivo al archivo original. También crea una copia del archivo original, comopath/to/file.porig
. Por favor, consulte la documentación para obtener más información sobre wiggleIntente usar la solución sugerida aquí: https://www.drupal.org/node/1129120
patch -p1 < example.patch
Esto me ayudo.
fuente
git: 'patch' is not a git command.
engit version 2.21.1 (Apple Git-122.3)
Ocurre cuando se mezclan clientes git de UNIX y Windows porque Windows realmente no tiene el concepto del bit "x", por lo que la
rw-r--r--
extracción de un archivo (0644) en Windows es "promovida" por la capa POSIX derwx-r-xr-x
msys para que sea (0755) . git considera que la diferencia de modo es básicamente la misma que una diferencia textual en el archivo, por lo que su parche no se aplica directamente. Creo que su única buena opción aquí es fijarcore.filemode
afalse
(usandogit-config
).Aquí hay un problema de msysgit con información relacionada: http://code.google.com/p/msysgit/issues/detail?id=164 (redirigido a la copia del 3 de diciembre de 2013 de archive.org)
fuente
git reset --hard HEAD
forzar a git a volver a pagar sus archivos con la nueva opción vigente.En mi caso, fui lo suficientemente estúpido como para crear el archivo de parche incorrectamente en primer lugar, en realidad difería de la manera incorrecta . Terminé con exactamente los mismos mensajes de error.
Si está en master y do
git diff branch-name > branch-name.patch
, esto intenta eliminar todas las adiciones que desea que sucedan y viceversa (lo cual fue imposible para git ya que, obviamente, las adiciones que nunca se hicieron no se pueden eliminar).Así que asegúrese de pagar a su sucursal y ejecutar
git diff master > branch-name.patch
fuente
ADVERTENCIA: Este comando puede eliminar las confirmaciones perdidas antiguas PERMANENTEMENTE. Haga una copia de todo su repositorio antes de intentar esto.
He encontrado este enlace
No tengo idea de por qué funciona, pero probé muchas soluciones y esta es la única que funcionó para mí. En resumen, ejecute los tres comandos a continuación:
fuente
Lo que busqué no se señala exactamente aquí en SO, estoy escribiendo para beneficio de otros que podrían buscar algo similar. Me enfrenté a un problema con un archivo (presente en el repositorio anterior) que se eliminaba en el repositorio. Y cuando aplico el parche, falla ya que no pudo encontrar el archivo que se aplicará. (así que mi caso es que el parche git falla porque el archivo se eliminó) '#git apply --reject' definitivamente dio una vista, pero no me ayudó a solucionarlo. No pude usar wiggle ya que no está disponible para nosotros en nuestros servidores de compilación. En mi caso, resolví este problema al eliminar la entrada del 'archivo que se eliminó en el repositorio' del archivo de parche que intenté aplicar, por lo que obtuve todos los demás cambios aplicados sin problemas (usando la combinación de 3 vías, evitando errores de espacio en blanco), y luego fusionando manualmente el contenido del archivo eliminado en donde se movió.
fuente
Mi problema es que ejecuté
git diff
, luego ejecutégit reset --hard HEAD
, luego me di cuenta de que quería deshacer, así que intenté copiar el resultado degit diff
un archivo y usarlogit apply
, pero recibí un error que indica que "el parche no se aplica". Después de cambiarpatch
e intentar usarlo, me di cuenta de que una parte del diff se repitió por alguna razón, y después de eliminar el duplicado ,patch
(y presumiblemente tambiéngit apply
) funcionó.fuente