git: patch não se aplica

Eu tenho um certo patch chamado my_pcc_branch.patch.

Quando tento aplicar, recebo a seguinte mensagem:

$ 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 

O que isso significa?

Como posso resolver este problema?

Johannes Sixt, da lista de discussão msysgit@googlegroups.com, sugeriu usar os seguintes argumentos da linha de comando:

 git apply --ignore-space-change --ignore-whitespace mychanges.patch 

Isso resolveu meu problema.

git apply --reject --whitespace=fix mychanges.patch funcionou para mim.

Este comando irá aplicar o patch não resolvendo deixando arquivos *.rej como *.rej :

 git apply --reject --whitespace=fix mypath.patch 

Você só precisa resolvê-los. Uma vez resolvido, execute:

 git -am resolved 

Quando tudo mais falhar, tente a opção --3way git apply .

git apply --3way patchFile.patch

–3way
Quando o patch não se aplica corretamente, use a mesclagem de 3 vias se o patch registrar a identidade dos blobs aos quais ele deve se aplicar, e temos esses blobs disponíveis localmente, possivelmente deixando os marcadores de conflito nos arquivos da tree de trabalho. para o usuário resolver. Esta opção implica a opção –index e é incompatível com as opções –reject e –cached.

Caso de falha típico aplica-se o máximo possível do patch, e deixa você com conflitos para trabalhar no git, como normalmente faz. Provavelmente um passo mais fácil que a alternativa de reject .

Isso acontece quando você mistura clientes UNIX e Windows git porque o Windows não tem realmente o conceito do bit “x”, então o check-out de um arquivo rw-r--r-- (0644) no Windows é “promovido” pelo msys POSIX camada para ser rwx-r-xr-x (0755). O git considera que a diferença de modo é basicamente igual a uma diferença textual no arquivo, portanto, seu patch não se aplica diretamente. Eu acho que sua única boa opção aqui é definir core.filemode para false (usando git-config ).

Aqui está um problema msysgit com algumas informações relacionadas: http://code.google.com/p/msysgit/issues/detail?id=164 (reencaminhado para a cópia de 3 de dezembro de 2013 do archive.org)

No meu caso, eu fui estúpido o suficiente para criar o arquivo de patch incorretamente, na verdade, difilando o caminho errado . Acabei com exatamente as mesmas mensagens de erro.

Se você está no master e git diff branch-name > branch-name.patch , isso tenta remover todos os acréscimos que você quer que aconteça e vice-versa (o que era impossível para o git realizar uma vez que, obviamente, adições nunca feitas não podem ser removido).

Portanto, certifique-se de fazer checkout na sua filial e executar git diff master > branch-name.patch

Tente usar a solução sugerida aqui: https://www.drupal.org/node/1129120

patch -p1 < example.patch

Isso me ajudou.

Eu encontrei este link

Eu não tenho idéia porque isso funciona, mas eu tentei muitos trabalhos ao redor e este é o único que funcionou para mim. Em suma, execute os três comandos abaixo:

 git fsck --full git reflog expire --expire=now --all git gc --prune=now