{"id":640,"date":"2009-02-04T19:37:19","date_gmt":"2009-02-04T18:37:19","guid":{"rendered":"http:\/\/cyberelk.net\/tim\/?p=640"},"modified":"2014-05-20T09:08:02","modified_gmt":"2014-05-20T08:08:02","slug":"how-i-use-git","status":"publish","type":"post","link":"https:\/\/cyberelk.net\/tim\/2009\/02\/04\/how-i-use-git\/","title":{"rendered":"How I use git"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"710\" data-permalink=\"https:\/\/cyberelk.net\/tim\/2009\/02\/04\/how-i-use-git\/git-2\/\" data-orig-file=\"https:\/\/cyberelk.net\/tim\/wp-content\/uploads\/2009\/02\/git.png\" data-orig-size=\"71,26\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"git\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/cyberelk.net\/tim\/wp-content\/uploads\/2009\/02\/git.png\" class=\"alignright size-full wp-image-710\" title=\"git\" src=\"https:\/\/cyberelk.net\/tim\/wp-content\/uploads\/2009\/02\/git.png\" alt=\"git\" width=\"71\" height=\"26\" \/>Back in May last year I <a href=\"https:\/\/cyberelk.net\/tim\/2008\/05\/21\/moving-from-subversion-to-git\/\">switched over several projects<\/a> from <a href=\"http:\/\/subversion.tigris.org\/\">Subversion<\/a> to <a href=\"http:\/\/git-scm.com\/\">Git<\/a>. It&#8217;s a shame that git doesn&#8217;t have a better project name, something that says &#8220;version control system&#8221; rather than being a mild insult. That aside, though, what a relief it was to finally use something that is Not CVS.<\/p>\n<p>At the time I couldn&#8217;t find a good &#8220;best practice&#8221; document, just lots of instructions on individual commands. Here is how I manage the <a href=\"https:\/\/cyberelk.net\/tim\/software\/system-config-printer\/\">system-config-printer<\/a> source code using git. I hope someone finds it useful.\u00a0 I don&#8217;t pretend that this is &#8220;best practice&#8221; &#8212; it&#8217;s just some of the things I&#8217;ve learned since starting to use git.<\/p>\n<p><!--more--><\/p>\n<h4>Visualize<\/h4>\n<p>The first thing to say is that <strong>gitk<\/strong> is really quite good at displaying a graphical representation of the repository. This is invaluable if you are in any doubt about which commit went on which branch, or whether local changes need to be pushed to a remote server. You can try to get the same sort of thing with <strong>git log \u2011\u2011graph<\/strong> if you wish, but it will not be as clear or easy to understand.<\/p>\n<h4>Starting off<\/h4>\n<p>Start off your local repository by cloning it from the public server.\u00a0 I&#8217;ll assume the remote repository (e.g. fedorahosted.org for me) is already set up.\u00a0 Next, you want to set up tracking branches for any branches you are going to be working on.\u00a0 Use <strong>git branch \u2011r<\/strong> to see what branches are available, and then for each one use the following command to create tracking branches for them: <strong>git checkout \u2011\u2011track -b <em>branch<\/em> origin\/<em>branch<\/em><\/strong>.<\/p>\n<h4>Branches<\/h4>\n<p>One of the main things I really love about git is that it can do proper merging. I have three main branches for system-config-printer at the moment:<\/p>\n<ul>\n<li>1.0.x, for bug-fixes only,<\/li>\n<li>1.1.x, for bug-fixes and small features, and<\/li>\n<li>master for larger features.<\/li>\n<\/ul>\n<p>When fixing a bug I make sure to find the oldest branch that requires the bug-fix and check it in on that branch only.\u00a0 I periodically merge 1.0.x into 1.1.x, and 1.1.x into master.<\/p>\n<p>This way, when I fix a bug on 1.0.x I know that it will eventually get merged onto the newer branches and won&#8217;t be forgotten. Next time I merge 1.0.x into 1.1.x it will automatically include that bug-fix, because merging remembers the point at which we last merged. Likewise, after having merged 1.0.x into 1.1.x, merging 1.1.x into master will also pull that fix into the master branch.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"683\" data-permalink=\"https:\/\/cyberelk.net\/tim\/2009\/02\/04\/how-i-use-git\/gitk\/\" data-orig-file=\"https:\/\/cyberelk.net\/tim\/wp-content\/uploads\/2009\/02\/gitk.png\" data-orig-size=\"450,388\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"Merging between branches\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/cyberelk.net\/tim\/wp-content\/uploads\/2009\/02\/gitk.png\" class=\"alignnone size-full wp-image-683\" title=\"Merging between branches\" src=\"https:\/\/cyberelk.net\/tim\/wp-content\/uploads\/2009\/02\/gitk.png\" alt=\"Merging between branches\" width=\"450\" height=\"388\" \/><\/p>\n<p>In this gitk window you can see that I committed a fix for status icon display on branch 1.0.x (the highlighted line), removed some blank lines from a file in 1.1.x (see the line below it), then collected the fixes into newer branches by merging 1.0.x into 1.1.x, and 1.1.x into master. The colours of the lines representing change history are arbitrary; they are only different colours so it is easier to tell them apart if they cross over each other.<\/p>\n<p>The green boxes with text in are branch tags (&#8220;heads&#8221; in git language). You can see in this window that the repository I&#8217;m working with contains changes not yet in the remote repository (on fedorahosted.org) &#8212; the remotes\/origin branch tags show the current state of that repository. To bring fedorahosted.org&#8217;s repository up to date I&#8217;ll need to run <strong>git push<\/strong>. Before pushing changes it is advisable to run <strong>git pull<\/strong> first, in case other people had made changes.<\/p>\n<p>The yellow box with text in is a release tag, set using <strong>git tag<\/strong>.<\/p>\n<p>Some changes don&#8217;t make sense to merge into newer branches, for example changing the version number in 1.0.x. To mark these changes as merged without actually applying them to the current branch I use <strong>git merge \u2011s ours 1.0.x<\/strong>.<\/p>\n<p>Sometimes the gitk view of the various branches can be a bit overwhelming if the change history is complicated.\u00a0 Use View\u2192Edit view to select only those branches you are interested in &#8212; you have to type them in, separated by spaces.\u00a0 I have a saved view for &#8220;master 1.1.x 1.0.x&#8221; so that feature branches don&#8217;t clutter up the display.<\/p>\n<h4>Adding\/removing branches<\/h4>\n<p>It is easy enough to add and remove branches in your local repository, but the syntax for doing so in the remote repository is less obvious. Here&#8217;s how I do that sort of thing.<\/p>\n<p>Adding a branch locally is straightforward: creating a new branch called cups-pk-helper starting from the point currently checked out is done like this: <strong>git checkout \u2011b cups-pk-helper<\/strong>. The current branch is now cups-pk-helper, but it only exists locally.<\/p>\n<p>To make that branch exist in the remote repository (named &#8220;origin&#8221;), we need to run <strong>git push<\/strong> telling it to make a new &#8220;head&#8221;: <strong>git push origin cups-pk-helper:refs\/heads\/cups-pk-helper<\/strong>.<\/p>\n<p>Once the feature the branch was created for has been completed and tested and is ready to merge, merge it. The feature branch is no longer needed. All of the commits from the feature branch will stay around because they are reachable from the main branch. The branch name &#8220;cups-pk-helper&#8221; only marks the point immediately before the feature was merged.<\/p>\n<p>To delete that &#8220;head&#8221; locally, use <strong>git branch \u2011d cups-pk-helper<\/strong>. The remote repository will still have that branch name around. To get rid of it remotely, do this: <strong>git push origin :refs\/heads\/cups-pk-helper<\/strong>.<\/p>\n<p>Merging remote branches from random repositories is similar.\u00a0 Once commits are reachable from some branch head in your repository, they will stay around in your repository.<\/p>\n<h4>Translations<\/h4>\n<p>I treat translation files (po\/*.po) as a bit of a special case, and <em>never<\/em> merge them between branches. It becomes just too hard to merge. PO files don&#8217;t seem to lend themselves to being merged for some reason. To avoid merging them I have this line in a file called .gitattributes in the repository:<\/p>\n<blockquote>\n<pre>po\/*.po merge=binary<\/pre>\n<\/blockquote>\n<p>When merging, if any *.po files have been changed they will now show as unmerged and the merge will stop. I just run <strong>git checkout HEAD po<\/strong> to mark them as up to date, and complete the merge with <strong>git commit<\/strong>.<\/p>\n<h4>Applying patches<\/h4>\n<p>When I&#8217;m sent patches it is easiest to apply them if they have been generated with <strong>git format-patch<\/strong>. In that case I can just save run <strong>git am <em>the-patch<\/em><\/strong> and have the patch committed under the author&#8217;s name, with the commit message taken from the email.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Back in May last year I switched over several projects from Subversion to Git. It&#8217;s a shame that git doesn&#8217;t have a better project name, something that says &#8220;version control system&#8221; rather than being a mild insult. That aside, though, what a relief it was to finally use something that is Not CVS. At the [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[3],"tags":[53,96],"class_list":["post-640","post","type-post","status-publish","format-standard","hentry","category-software","tag-git","tag-software"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How I use git - PRINT HEAD<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cyberelk.net\/tim\/2009\/02\/04\/how-i-use-git\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How I use git - PRINT HEAD\" \/>\n<meta property=\"og:description\" content=\"Back in May last year I switched over several projects from Subversion to Git. It&#8217;s a shame that git doesn&#8217;t have a better project name, something that says &#8220;version control system&#8221; rather than being a mild insult. That aside, though, what a relief it was to finally use something that is Not CVS. At the [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cyberelk.net\/tim\/2009\/02\/04\/how-i-use-git\/\" \/>\n<meta property=\"og:site_name\" content=\"PRINT HEAD\" \/>\n<meta property=\"article:published_time\" content=\"2009-02-04T18:37:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2014-05-20T08:08:02+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/cyberelk.net\/tim\/wp-content\/uploads\/2009\/02\/git.png\" \/>\n<meta name=\"author\" content=\"Tim Waugh\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tim Waugh\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/2009\\\/02\\\/04\\\/how-i-use-git\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/2009\\\/02\\\/04\\\/how-i-use-git\\\/\"},\"author\":{\"name\":\"Tim Waugh\",\"@id\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/#\\\/schema\\\/person\\\/23b749f30a67f1b1c6af17024fc94bf6\"},\"headline\":\"How I use git\",\"datePublished\":\"2009-02-04T18:37:19+00:00\",\"dateModified\":\"2014-05-20T08:08:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/2009\\\/02\\\/04\\\/how-i-use-git\\\/\"},\"wordCount\":1061,\"publisher\":{\"@id\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/#\\\/schema\\\/person\\\/23b749f30a67f1b1c6af17024fc94bf6\"},\"image\":{\"@id\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/2009\\\/02\\\/04\\\/how-i-use-git\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/cyberelk.net\\\/tim\\\/wp-content\\\/uploads\\\/2009\\\/02\\\/git.png\",\"keywords\":[\"git\",\"Software\"],\"articleSection\":[\"Software\"],\"inLanguage\":\"en-GB\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/2009\\\/02\\\/04\\\/how-i-use-git\\\/\",\"url\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/2009\\\/02\\\/04\\\/how-i-use-git\\\/\",\"name\":\"How I use git - PRINT HEAD\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/2009\\\/02\\\/04\\\/how-i-use-git\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/2009\\\/02\\\/04\\\/how-i-use-git\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/cyberelk.net\\\/tim\\\/wp-content\\\/uploads\\\/2009\\\/02\\\/git.png\",\"datePublished\":\"2009-02-04T18:37:19+00:00\",\"dateModified\":\"2014-05-20T08:08:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/2009\\\/02\\\/04\\\/how-i-use-git\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/cyberelk.net\\\/tim\\\/2009\\\/02\\\/04\\\/how-i-use-git\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/2009\\\/02\\\/04\\\/how-i-use-git\\\/#primaryimage\",\"url\":\"http:\\\/\\\/cyberelk.net\\\/tim\\\/wp-content\\\/uploads\\\/2009\\\/02\\\/git.png\",\"contentUrl\":\"http:\\\/\\\/cyberelk.net\\\/tim\\\/wp-content\\\/uploads\\\/2009\\\/02\\\/git.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/2009\\\/02\\\/04\\\/how-i-use-git\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How I use git\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/#website\",\"url\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/\",\"name\":\"PRINT HEAD\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/#\\\/schema\\\/person\\\/23b749f30a67f1b1c6af17024fc94bf6\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/#\\\/schema\\\/person\\\/23b749f30a67f1b1c6af17024fc94bf6\",\"name\":\"Tim Waugh\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/printhead.png\",\"url\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/printhead.png\",\"contentUrl\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/printhead.png\",\"width\":731,\"height\":140,\"caption\":\"Tim Waugh\"},\"logo\":{\"@id\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/printhead.png\"},\"sameAs\":[\"http:\\\/\\\/cyberelk.net\\\/tim\"],\"url\":\"https:\\\/\\\/cyberelk.net\\\/tim\\\/author\\\/twaugh\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How I use git - PRINT HEAD","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cyberelk.net\/tim\/2009\/02\/04\/how-i-use-git\/","og_locale":"en_GB","og_type":"article","og_title":"How I use git - PRINT HEAD","og_description":"Back in May last year I switched over several projects from Subversion to Git. It&#8217;s a shame that git doesn&#8217;t have a better project name, something that says &#8220;version control system&#8221; rather than being a mild insult. That aside, though, what a relief it was to finally use something that is Not CVS. At the [&hellip;]","og_url":"https:\/\/cyberelk.net\/tim\/2009\/02\/04\/how-i-use-git\/","og_site_name":"PRINT HEAD","article_published_time":"2009-02-04T18:37:19+00:00","article_modified_time":"2014-05-20T08:08:02+00:00","og_image":[{"url":"http:\/\/cyberelk.net\/tim\/wp-content\/uploads\/2009\/02\/git.png","type":"","width":"","height":""}],"author":"Tim Waugh","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Tim Waugh","Estimated reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cyberelk.net\/tim\/2009\/02\/04\/how-i-use-git\/#article","isPartOf":{"@id":"https:\/\/cyberelk.net\/tim\/2009\/02\/04\/how-i-use-git\/"},"author":{"name":"Tim Waugh","@id":"https:\/\/cyberelk.net\/tim\/#\/schema\/person\/23b749f30a67f1b1c6af17024fc94bf6"},"headline":"How I use git","datePublished":"2009-02-04T18:37:19+00:00","dateModified":"2014-05-20T08:08:02+00:00","mainEntityOfPage":{"@id":"https:\/\/cyberelk.net\/tim\/2009\/02\/04\/how-i-use-git\/"},"wordCount":1061,"publisher":{"@id":"https:\/\/cyberelk.net\/tim\/#\/schema\/person\/23b749f30a67f1b1c6af17024fc94bf6"},"image":{"@id":"https:\/\/cyberelk.net\/tim\/2009\/02\/04\/how-i-use-git\/#primaryimage"},"thumbnailUrl":"http:\/\/cyberelk.net\/tim\/wp-content\/uploads\/2009\/02\/git.png","keywords":["git","Software"],"articleSection":["Software"],"inLanguage":"en-GB"},{"@type":"WebPage","@id":"https:\/\/cyberelk.net\/tim\/2009\/02\/04\/how-i-use-git\/","url":"https:\/\/cyberelk.net\/tim\/2009\/02\/04\/how-i-use-git\/","name":"How I use git - PRINT HEAD","isPartOf":{"@id":"https:\/\/cyberelk.net\/tim\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cyberelk.net\/tim\/2009\/02\/04\/how-i-use-git\/#primaryimage"},"image":{"@id":"https:\/\/cyberelk.net\/tim\/2009\/02\/04\/how-i-use-git\/#primaryimage"},"thumbnailUrl":"http:\/\/cyberelk.net\/tim\/wp-content\/uploads\/2009\/02\/git.png","datePublished":"2009-02-04T18:37:19+00:00","dateModified":"2014-05-20T08:08:02+00:00","breadcrumb":{"@id":"https:\/\/cyberelk.net\/tim\/2009\/02\/04\/how-i-use-git\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cyberelk.net\/tim\/2009\/02\/04\/how-i-use-git\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/cyberelk.net\/tim\/2009\/02\/04\/how-i-use-git\/#primaryimage","url":"http:\/\/cyberelk.net\/tim\/wp-content\/uploads\/2009\/02\/git.png","contentUrl":"http:\/\/cyberelk.net\/tim\/wp-content\/uploads\/2009\/02\/git.png"},{"@type":"BreadcrumbList","@id":"https:\/\/cyberelk.net\/tim\/2009\/02\/04\/how-i-use-git\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cyberelk.net\/tim\/"},{"@type":"ListItem","position":2,"name":"How I use git"}]},{"@type":"WebSite","@id":"https:\/\/cyberelk.net\/tim\/#website","url":"https:\/\/cyberelk.net\/tim\/","name":"PRINT HEAD","description":"","publisher":{"@id":"https:\/\/cyberelk.net\/tim\/#\/schema\/person\/23b749f30a67f1b1c6af17024fc94bf6"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cyberelk.net\/tim\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":["Person","Organization"],"@id":"https:\/\/cyberelk.net\/tim\/#\/schema\/person\/23b749f30a67f1b1c6af17024fc94bf6","name":"Tim Waugh","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/cyberelk.net\/tim\/wp-content\/uploads\/2023\/01\/printhead.png","url":"https:\/\/cyberelk.net\/tim\/wp-content\/uploads\/2023\/01\/printhead.png","contentUrl":"https:\/\/cyberelk.net\/tim\/wp-content\/uploads\/2023\/01\/printhead.png","width":731,"height":140,"caption":"Tim Waugh"},"logo":{"@id":"https:\/\/cyberelk.net\/tim\/wp-content\/uploads\/2023\/01\/printhead.png"},"sameAs":["http:\/\/cyberelk.net\/tim"],"url":"https:\/\/cyberelk.net\/tim\/author\/twaugh\/"}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pnnS2-ak","_links":{"self":[{"href":"https:\/\/cyberelk.net\/tim\/wp-json\/wp\/v2\/posts\/640","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cyberelk.net\/tim\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cyberelk.net\/tim\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cyberelk.net\/tim\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/cyberelk.net\/tim\/wp-json\/wp\/v2\/comments?post=640"}],"version-history":[{"count":37,"href":"https:\/\/cyberelk.net\/tim\/wp-json\/wp\/v2\/posts\/640\/revisions"}],"predecessor-version":[{"id":1050,"href":"https:\/\/cyberelk.net\/tim\/wp-json\/wp\/v2\/posts\/640\/revisions\/1050"}],"wp:attachment":[{"href":"https:\/\/cyberelk.net\/tim\/wp-json\/wp\/v2\/media?parent=640"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cyberelk.net\/tim\/wp-json\/wp\/v2\/categories?post=640"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cyberelk.net\/tim\/wp-json\/wp\/v2\/tags?post=640"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}