Je voudrais créer un patch à partir d'une gcc
branche spécifique en le comparant aux versions officielles; donc quand je décompresse l'archive tar de la version stable, je peux appliquer le patch et obtenir l'équivalent de ce qui était dans cette branche spécifique.
C'est la première fois que je dois créer un patch, c'est donc ma toute première fois que je le fais et ma principale préoccupation est d'obtenir les bonnes options et l'analyse car nous parlons d'un logiciel extrêmement important
diff -crB GccStable GccGit > /tmp/fromStabletoBranch.patch
Est-ce suffisant et la meilleure façon de le faire?
gcc
l'écurie officielletar.bz2
et une autre version instable de celle-ci à partir d'ungit
référentiel, je voudrais créer un patch, bien sûr, je voudrais comparer juste contre lamaster
branche, pas le référentiel entier.tar.bz2
n'est clairement pas ungit
référentiel, comment pensez-vous que je devrais procéder?Réponses:
Oui, c'est un bon moyen de créer un patch.
En bref:
Pour créer un patch pour un seul fichier, votre commande peut ressembler
diff -Naru file_original file_updated > file.patch
où
-N
: traiter les fichiers absents comme vides-a
: traiter tous les fichiers comme du texte-r
: comparer récursivement tous les sous-répertoires trouvés-u
: sortie NUM (par défaut 3) lignes de contexte unifiéPour créer un patch pour tout le répertoire:
diff -crB dir_original dir_updated > dfile.patch
où
-c
: sortie NUM (par défaut 3) lignes du contexte copié-r
: comparer récursivement tous les sous-répertoires-B
: ignorer les modifications dont les lignes sont toutes videsAprès tout, pour appliquer ce patch, on peut exécuter
où switch
p
demande au patch de supprimer le préfixe du chemin afin que les fichiers soient correctement identifiés. Dans la plupart des cas, cela devrait l'être1
.Supprimez
--dry-run
si vous êtes satisfait du résultat imprimé à l'écran.la source
dir_updated
rapport à ce qu'il étaitdir_original
? Lediff
prend soin de cela aussi ou il est ignoré?file.patch
dans juste un fichier texte, vous pouvez donc l'ouvrir dans n'importe quel éditeur ou simplementcat
et vous verrez une ligne commeonly in dir_original: missingfile.txt
patch
supprimera celamissingfile.txt
ou quoi d'autre?diff -N ...
comme dans mon premier exemple.patch
Supprime normalement les fichiers vides par défaut. Si vous ne le souhaitez pas, utilisez-le uniquementdiff -crB
comme dans votre question. Dans certains cas (rares), une-E
option dans lapatch
commande est également nécessaire pour supprimer les fichiers vides, après le manuel du correctif:if the input is not a context diff or if patch is conforming to POSIX, patch does not remove empty patched files unless this option is given
diff -Naru dir/file dir/file.new > diff.patch
obtenircan't find file to patch at input line 3
avec lapatch -p0 --dry-run < diff.patch
première ligne de correctif lit la--- dir/file
deuxième+++ dir/file.new
avec des horodatages, le diff semble être juste, y a-t-il une option comment signaler les noms de fichiers exacts que la commande recherche?