Pergunta
Estou tendo problemas para aplicar um patch à minha árvore de origem, e não é o -p
habitual descascar problema. patch
é capaz de encontrar o arquivo de patch.
Especificamente, a minha pergunta é como ler / interpretar o .rej
arquivos patch
cria quando ele falhar em alguns pedaços. A maioria das discussões sobre patch
/ diff
que tenho visto não incluem esta.
Solução
Um exemplo simples:
$ echo -e "line 1\nline 2\nline 3" > a
$ sed -e 's/2/b/' <a >b
$ sed -e 's/2/c/' <a >c
$ diff a b > ab.diff
$ patch c < ab.diff
$ cat c.rej
***************
*** 2
- line 2
--- 2 -----
+ line b
Como você pode ver: O arquivo antigo contém linha 2 eo novo arquivo deve conter linha b. No entanto, ele realmente contém linha c (que não é visível no ficheiro rejeitar).
Na verdade, a maneira mais fácil de resolver esses problemas é levar o fragmento diff do arquivo .diff / .patch, inseri-lo no local apropriado no arquivo a ser corrigido e, em seguida, comparar o código manualmente para descobrir , que linhas realmente causar o conflito.
Or - alternativamente: Obter o arquivo original (não modificada), corrigi-lo e executar um merge de três vias no arquivo
.Outras dicas
Wiggle é uma grande ferramenta para a aplicação de arquivos .rej quando o patch não terá êxito.
Eu não sou um especialista em lidar com arquivos de patch, mas eu gostaria de adicionar um pouco de clareza sobre como lê-los com base na minha compreensão das informações que eles contêm.
Os arquivos .rej
irá dizer-lhe:
- a diferença entre o original eo arquivo .rej;
- onde o código de problema começa no arquivo original, quantas linhas ele continua nesse arquivo;
- e onde o código começa no novo arquivo, e quantas linhas se prolonga por nesse arquivo.
Assim, dado esta mensagem, observado no início do meu arquivo .rej:
diff a/www/js/app.js b/www/js/app.js (rejected hunks)
@@ -4,12 +4,24 @@
Eu vejo que para o meu arquivo de problema (www/js/app
), a diferença entre o original (anotado como a/www/js/app.js
na primeira linha) eo arquivo .rej (anotado como b/www/js/
) inicia na linha 4 do original e prolonga-se por 12 linhas (a parte antes da vírgula em @@ -4,12, +4,24 @@
na linha dois), e começa na linha 4 da nova versão do arquivo e prolonga-se por 24 linhas (a parte após a vírgula em @@ -4,12, +4,24 @@
.
Para mais informações, ver o excelente visão geral dos arquivos de patch (que contêm a informação que eu nota acima, bem como detalhes sobre linhas adicionadas e / ou entre versões de arquivo) em http://blog.humphd.org/vocamus-906/ .
Qualquer correções ou esclarecimentos boas-vindas, claro.