Question

Je vais avoir du mal à appliquer un patch à mon arbre source, et ce n'est pas le problème de décapage -p d'habitude. patch est en mesure de trouver le fichier à patcher.

Plus précisément, ma question est de savoir comment lire / interpréter les fichiers .rej patch crée quand il échoue sur quelques gros morceaux. La plupart des discussions de patch / diff j'ai vu ne comprennent pas.

Était-ce utile?

La solution

Un exemple simple:

$ 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

Comme vous pouvez le voir: L'ancien fichier contient la ligne 2 et le nouveau fichier devrait contenir la ligne b. Cependant, il contient en fait la ligne c (ce n'est pas visible dans le rejet de fichier).

En fait, la meilleure façon de résoudre ces problèmes est de prendre le fragment de diff à partir du fichier .diff / .patch, insérez-le à l'endroit approprié dans le fichier à patcher puis comparer le code à la main pour comprendre , quelles lignes causent effectivement le conflit.

Ou - encore. Obtenez le fichier d'origine (non modifié), patcher et exécuter un à trois voies de fusion sur le fichier

Autres conseils

Wiggle est un excellent outil pour appliquer les fichiers .rej quand patch ne réussit pas.

Je ne suis pas un expert sur le traitement des fichiers de patch, mais je voudrais ajouter un peu de clarté sur la façon de les lire en fonction de ma compréhension des informations qu'ils contiennent.

Vos fichiers .rej vous diront:

  • la différence entre l'original et le fichier .rej;
  • où le code de problème commence dans le fichier d'origine, le nombre de lignes qu'elle passe dans ce fichier;
  • et où le code commence dans le nouveau fichier, et combien de lignes il continue dans ce fichier.

Donc, étant donné ce message, noté au début de mon dossier .rej:

diff a/www/js/app.js b/www/js/app.js (rejected hunks) @@ -4,12 +4,24 @@

Je vois que mon fichier problème (de www/js/app), la différence entre l'original (noté a/www/js/app.js sur la première ligne) et le fichier .rej (noté b/www/js/) commence la ligne 4 de l'original et se poursuit pendant 12 des lignes (la partie avant la virgule dans la ligne @@ -4,12, +4,24 @@ deux), et commence à la ligne 4 de la nouvelle version du fichier et se poursuit pendant 24 lignes (la partie après la virgule dans @@ -4,12, +4,24 @@.

Pour plus d'informations, voir l'excellent aperçu des fichiers de patch (contenant les informations que je note ci-dessus, ainsi que des détails sur les lignes ajoutées et / ou entre les versions de fichiers) à http://blog.humphd.org/vocamus-906/ .

Les corrections ou clarifications sont les bienvenus, bien sûr.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top