<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>docs.pelican.bernatchez.net - modification</title><link href="https://docs.pelican.bernatchez.net/lang-version.en/" rel="alternate"/><link href="https://docs.pelican.bernatchez.net/lang-version.en/feeds/modification.atom.xml" rel="self"/><id>https://docs.pelican.bernatchez.net/lang-version.en/</id><updated>2025-05-24T18:23:52+00:00</updated><entry><title>How To Create File Patches</title><link href="https://docs.pelican.bernatchez.net/lang-version.en/patchhowto-en.html" rel="alternate"/><published>2025-05-24T18:23:52+00:00</published><updated>2025-05-24T18:23:52+00:00</updated><author><name>Pierre Bernatchez</name></author><id>tag:docs.pelican.bernatchez.net,2025-05-24:/lang-version.en/patchhowto-en.html</id><summary type="html">&lt;p class="first last"&gt;how to create file patches&lt;/p&gt;
</summary><content type="html">&lt;div class="section" id="single-file"&gt;
&lt;h2&gt;Single File&lt;/h2&gt;
&lt;p&gt;This is how to build a patch file that you then apply on a target
system to modify one of its files.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Get original copy&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;cp&lt;span class="w"&gt; &lt;/span&gt;/pathtofile/myfile.conf&lt;span class="w"&gt; &lt;/span&gt;/pathtofile/myfile.conf.orig
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Edit the file manually&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Using any editor, manually make changes to the file /pathtofile/myfile.conf as desired.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Capture the difference in a patch&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;diff&lt;span class="w"&gt; &lt;/span&gt;-u&lt;span class="w"&gt; &lt;/span&gt;/pathtofile/myfile.conf.orig&lt;span class="w"&gt; &lt;/span&gt;/pathtofile/myfile.conf&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;myfile.patch
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Try the patch&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Undo the manual changes you made&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;patch&lt;span class="w"&gt; &lt;/span&gt;-R&lt;span class="w"&gt; &lt;/span&gt;-p0&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;myfile.patch
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Redo your changes&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;patch&lt;span class="w"&gt; &lt;/span&gt;-p0&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;myfile.patch
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="recursive-directory"&gt;
&lt;h2&gt;Recursive Directory&lt;/h2&gt;
&lt;p&gt;In this example capture all the changes we make to a tree
of pelican-themes into a single patch file.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Duplicate&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We start by duplicating the complete tree.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;cp&lt;span class="w"&gt; &lt;/span&gt;-r&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/pelican-themes&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/pelican-themes.orig
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;TIP&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I have a tendency keep my orig copy and reuse it a lot as I modify
things.  To guard against inadvertantly changing something
within the orig version without noticing and thereby undermining
all subsequent diffs may make,  I like to boiler plate the .orig
files a bit by write protecting them.
This is not necessary but it has served me well.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;chmod&lt;span class="w"&gt; &lt;/span&gt;-w&lt;span class="w"&gt; &lt;/span&gt;--recursive&lt;span class="w"&gt; &lt;/span&gt;pelican-themes.orig/
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Create Patch File&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Now we make all the changes we want within the pelican-themes directory.
Once that is done we create the patch file incorporationg all changes.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/pelican-themes
diff&lt;span class="w"&gt; &lt;/span&gt;-Naru&lt;span class="w"&gt; &lt;/span&gt;../pelican-themes.orig&lt;span class="w"&gt; &lt;/span&gt;.&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;../pelican-themes.patch
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Note:&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;-N --new-file treat absent files as empty&lt;/div&gt;
&lt;div class="line"&gt;-a --text treat all files as text&lt;/div&gt;
&lt;div class="line"&gt;-r --recursive recursively compare subdirectories&lt;/div&gt;
&lt;div class="line"&gt;-u -U --unified[=NUM] Output NUM lines of unified context (default 3)&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Undo Changes&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/pelican-themes
patch&lt;span class="w"&gt; &lt;/span&gt;-Rs&lt;span class="w"&gt; &lt;/span&gt;-p0&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/pelican-themes.patch
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Note:&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Remember that directories created by patch must be removed manually&lt;/div&gt;
&lt;div class="line"&gt;-R  --reverse  Assume the patch was created with old and new files swapped&lt;/div&gt;
&lt;div class="line"&gt;-s  --silent  be quiet unless error occurs&lt;/div&gt;
&lt;div class="line"&gt;-pN Strip smallest filepath prefix containing N slashes. 0 means full path.&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Apply Patch Changes&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/pelican-themes
patch&lt;span class="w"&gt; &lt;/span&gt;-s&lt;span class="w"&gt; &lt;/span&gt;-p0&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/pelican-themes.patch
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</content><category term="modification"/><category term="patch"/><category term="update"/><category term="revision"/><category term="modification"/><category term="correction"/><category term="difference"/><category term="how to"/></entry></feed>