Een patch is een stukje computercode dat een bestaande codeset invoegt of wijzigt. Patches worden vaak gebruikt tijdens het programmeerproces om wijzigingen in de broncode te vervangen. Linux bevat een patch hulpprogramma om dit proces te stroomlijnen. Het patchproces wordt meestal gebruikt in formele systemen voor wijzigingscontrole, waar professionele best practices voor codekwaliteit en testen van kracht zijn. Patchen wordt minder vaak gebruikt in hobbyprojecten waar de broncode naar goeddunken van de programmeur verandert.
Het patchproces
In een typische use-case heb je een originele versie van je broncode en een aangepaste versie ervan. Het origineel is formeel goedgekeurd en eventuele wijzigingen moeten een duidelijk omschreven proces volgen. Deze wijzigingen vinden plaats in een patchbestand. Een tool gebruiken genaamd tool verschil, reduceer de verschillen tussen de twee bestandsversies tot een enkel bestand dat de specifieke wijzigingen weergeeft die de tweede in de eerste aanbrengt. Vervolgens wijzigt het resulterende verschilbestand de originele code door gebruik te maken van de patch hulpmiddel.
Patches toepassen: een voorbeeld
Overweeg een typisch “Hello World”-programma. De broncode in C ziet er als volgt uit: #include
int hoofd()
{
printf(“Hallo wereld!”);
}
Het afgedrukte bericht wijzigen in: Hallo universum!, ontwikkel als volgt een alternatieve versie van de code: #include
int hoofd()
{
printf(“Hallo universum!”);
}
Genereer een patch-bestand met behulp van de verschil hulpprogramma: diff -u helloworld.c helloworld2.c > bestand.patch
U zult dan zien dat het patchbestand er als volgt uitziet:
Het patchbestand geeft een overzicht van elk vergeleken bestand. Het biedt symbolen, — en +++, waarbij elke bestandsnaam wordt geïdentificeerd met de laatst herziene datum. Vervolgens vat het de locatie samen van de veranderingen tussen een paar @@ symbolen. Ten slotte vermeldt het de broncode, waarbij de verschillende regels worden gemarkeerd met behulp van de genoteerde plus-en-min-symbolen. Over het algemeen geeft het minteken aan dat de regel is verwijderd in het gepatchte bestand en het plusteken staat voor een vervanging, als de regel wordt vervangen. Om het patch-bestand op het originele bestand toe te passen, voert u het volgende uit: patch < file.patch
Op dat moment verandert het eerste bestand om overeen te komen met het tweede. Gebruik de om de patch ongedaan te maken -R optie: patch -R < file.patch
Overwegingen
Deze benadering van het patchen van broncode komt minder vaak voor dan vroeger. Moderne broncontrolesystemen zoals Git en Subversion beheren automatisch versies in de loop van de tijd, ook langs verschillende ontwikkelings- en testtakken, zodat handmatige verschillencontrole en bestandspatching nu worden beheerd door de versiecontroletool. Als je een formele codeerstructuur moet volgen of je moet houden aan teamcoderingsnormen, gebruik je in plaats daarvan een tool zoals Git. Een effectieve use-case voor de verschil en patch systeem op een lokale computer heeft betrekking op wijzigingen in een volledige map met bestanden. Als u bijvoorbeeld een website heeft ontwikkeld, maar slechts één regel hoeft te wijzigen, zoals een copyrightregel, dan werkt dit systeem al die pagina’s tegelijkertijd bij. Raadpleeg de man-pagina’s voor: patch voor extra context.