PageSourceSearch

https://www.jasom.net/how-to-download-specific-dev-version-of-drup…le-simply-using-git-checkout-or-drush-make/

html jasom.net collected 2026-09-25 19:11:39 UTC 63,866 bytes, 376 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en-US">
3    <head>
4        <meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=3.0" /><link rel="preload" href="https://www.jasom.net/wp-content/cache/fvm/min/1789975772-css1634d4dce8e447e2c70cd0166c761ba9940e6c34d2e9692825788b6db6095.css" as="style" media="all" />
5<link rel="preload" href="https://www.jasom.net/wp-content/cache/fvm/min/1789975772-cssc7d4732ca9c1511ef3c1f60ee22e1ebc2985905d2521c502e211e29a88714.css" as="style" media="all" />
6<link rel="preload" href="https://www.jasom.net/wp-content/cache/fvm/min/1789975772-cssb0b5ded471bb79b105d847c63a7e8426bc82d4c9e4caa6e3cdcd1307d7a41.css" as="style" media="all" />
7<link rel="preload" href="https://www.jasom.net/wp-content/cache/fvm/min/1789975772-css29e86ce1442e3eaf51b5c2cadb8f5eb63532c3e60f3353e18aea6976f9d26.css" as="style" media="all" />
8<link rel="preload" href="https://www.jasom.net/wp-content/cache/fvm/min/1789975772-cssc0e2b5a81747928ecfda68e4b767dbb5a4236f3070d862e87849fc80f0564.css" as="style" media="all" />
9<link rel="preload" href="https://www.jasom.net/wp-content/cache/fvm/min/1789975772-css408638780cced6081b56e3badc186475902f92e43428fb7f74a81f7f66a92.css" as="style" media="all" />
10<link rel="preload" href="https://www.jasom.net/wp-content/cache/fvm/min/1789975772-cssa0643b4e3ad9323ceb09416f88ee34fa695b9d321cf83b1dc8749f7265f4d.css" as="style" media="all" />
10<script data-cfasync="false">if(navigator.userAgent.match(/MSIE|Internet Explorer/i)||navigator.userAgent.match(/Trident\/7\..*?rv:11/i)){var href=document.location.href;if(!href.match(/[?&]iebrowser/)){if(href.indexOf("?")==-1){if(href.indexOf("#")==-1){document.location.href=href+"?iebrowser=1"}else{document.location.href=href.replace("#","?iebrowser=1#")}}else{if(href.indexOf("#")==-1){document.location.href=href+"&iebrowser=1"}else{document.location.href=href.replace("#","&iebrowser=1#")}}}}</script>
vendor: 2 bytes, line 10
10
11<script data-cfasync="false">class FVMLoader{constructor(e){this.triggerEvents=e,this.eventOptions={passive:!0},this.userEventListener=this.triggerListener.bind(this),this.delayedScripts={normal:[],async:[],defer:[]},this.allJQueries=[]}_addUserInteractionListener(e){this.triggerEvents.forEach(t=>window.addEventListener(t,e.userEventListener,e.eventOptions))}_removeUserInteractionListener(e){this.triggerEvents.forEach(t=>window.removeEventListener(t,e.userEventListener,e.eventOptions))}triggerListener(){this._removeUserInteractionListener(this),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",this._loadEverythingNow.bind(this)):this._loadEverythingNow()}async _loadEverythingNow(){this._runAllDelayedCSS(),this._delayEventListeners(),this._delayJQueryReady(this),this._handleDocumentWrite(),this._registerAllDelayedScripts(),await this._loadScriptsFromList(this.delayedScripts.normal),await this._loadScriptsFromList(this.delayedScripts.defer),await this._loadScriptsFromList(this.delayedScripts.async),await this._triggerDOMContentLoaded(),await this._triggerWindowLoad(),window.dispatchEvent(new Event("wpr-allScriptsLoaded"))}_registerAllDelayedScripts(){document.querySelectorAll("script[type=fvmdelay]").forEach(e=>{e.hasAttribute("src")?e.hasAttribute("async")&&!1!==e.async?this.delayedScripts.async.push(e):e.hasAttribute("defer")&&!1!==e.defer||"module"===e.getAttribute("data-type")?this.delayedScripts.defer.push(e):this.delayedScripts.normal.push(e):this.delayedScripts.normal.push(e)})}_runAllDelayedCSS(){document.querySelectorAll("link[rel=fvmdelay]").forEach(e=>{e.setAttribute("rel","stylesheet")})}async _transformScript(e){return await this._requestAnimFrame(),new Promise(t=>{const n=document.createElement("script");let r;[...e.attributes].forEach(e=>{let t=e.nodeName;"type"!==t&&("data-type"===t&&(t="type",r=e.nodeValue),n.setAttribute(t,e.nodeValue))}),e.hasAttribute("src")?(n.addEventListener("load",t),n.addEventListener("error",t)):(n.text=e.text,t()),e.parentNode.replaceChild(n,e)})}async _loadScriptsFromList(e){const t=e.shift();return t?(await this._transformScript(t),this._loadScriptsFromList(e)):Promise.resolve()}_delayEventListeners(){let e={};function t(t,n){!function(t){function n(n){return e[t].eventsToRewrite.indexOf(n)>=0?"wpr-"+n:n}e[t]||(e[t]={originalFunctions:{add:t.addEventListener,remove:t.removeEventListener},eventsToRewrite:[]},t.addEventListener=function(){arguments[0]=n(arguments[0]),e[t].originalFunctions.add.apply(t,arguments)},t.removeEventListener=function(){arguments[0]=n(arguments[0]),e[t].originalFunctions.remove.apply(t,arguments)})}(t),e[t].eventsToRewrite.push(n)}function n(e,t){let n=e[t];Object.defineProperty(e,t,{get:()=>n||function(){},set(r){e["wpr"+t]=n=r}})}t(document,"DOMContentLoaded"),t(window,"DOMContentLoaded"),t(window,"load"),t(window,"pageshow"),t(document,"readystatechange"),n(document,"onreadystatechange"),n(window,"onload"),n(window,"onpageshow")}_delayJQueryReady(e){let t=window.jQuery;Object.defineProperty(window,"jQuery",{get:()=>t,set(n){if(n&&n.fn&&!e.allJQueries.includes(n)){n.fn.ready=n.fn.init.prototype.ready=function(t){e.domReadyFired?t.bind(document)(n):document.addEventListener("DOMContentLoaded2",()=>t.bind(document)(n))};const t=n.fn.on;n.fn.on=n.fn.init.prototype.on=function(){if(this[0]===window){function e(e){return e.split(" ").map(e=>"load"===e||0===e.indexOf("load.")?"wpr-jquery-load":e).join(" ")}"string"==typeof arguments[0]||arguments[0]instanceof String?arguments[0]=e(arguments[0]):"object"==typeof arguments[0]&&Object.keys(arguments[0]).forEach(t=>{delete Object.assign(arguments[0],{[e(t)]:arguments[0][t]})[t]})}return t.apply(this,arguments),this},e.allJQueries.push(n)}t=n}})}async _triggerDOMContentLoaded(){this.domReadyFired=!0,await this._requestAnimFrame(),document.dispatchEvent(new Event("DOMContentLoaded2")),await this._requestAnimFrame(),window.dispatchEvent(new Event("DOMContentLoaded2")),await this._requestAnimFrame(),document.dispatchEvent(new Event("wpr-readystatechange")),await this._requestAnimFrame(),document.wpronreadystatechange&&document.wpronreadystatechange()}
11async _triggerWindowLoad(){await this._requestAnimFrame(),window.dispatchEvent(new Event("wpr-load")),await this._requestAnimFrame(),window.wpronload&&window.wpronload(),await this._requestAnimFrame(),this.allJQueries.forEach(e=>e(window).trigger("wpr-jquery-load")),window.dispatchEvent(new Event("wpr-pageshow")),await this._requestAnimFrame(),window.wpronpageshow&&window.wpronpageshow()}_handleDocumentWrite(){const e=new Map;document.write=document.writeln=function(t){const n=document.currentScript,r=document.createRange(),i=n.parentElement;let a=e.get(n);void 0===a&&(a=n.nextSibling,e.set(n,a));const s=document.createDocumentFragment();r.setStart(s,0),s.appendChild(r.createContextualFragment(t)),i.insertBefore(s,a)}}async _requestAnimFrame(){return new Promise(e=>requestAnimationFrame(e))}static run(){const e=new FVMLoader(["keydown","mousemove","touchmove","touchstart","touchend","wheel"]);e._addUserInteractionListener(e)}}FVMLoader.run();</script>
11
12        <meta http-equiv="X-UA-Compatible" content="IE=edge">
13		
14		
15
16
17<meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' />
18
19	
20	<title>How to download specific dev version of drupal module? Simply using “git checkout” or “drush make” &#8212; Jasom Dotnet</title>
21	<link rel="canonical" href="https://www.jasom.net/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make/" />
22	<meta property="og:locale" content="en_US" />
23	<meta property="og:type" content="article" />
24	<meta property="og:title" content="How to download specific dev version of drupal module? Simply using “git checkout” or “drush make” &#8212; Jasom Dotnet" />
25	<meta property="og:description" content="Dev versions of modules aren&#8217;t minor versioned, they are always current. If you need specific dev version you&#8217;d have to download it from git by a date. Latest Geocoder dev release is broken Geocoder is a module with the latest stable release from 27 Aug 2012, therefore I use dev version. Update from 07 Jan [&hellip;]" />
26	<meta property="og:url" content="https://www.jasom.net/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make/" />
27	<meta property="og:site_name" content="Jasom Dotnet" />
28	<meta property="article:published_time" content="2016-01-11T08:51:37+00:00" />
29	<meta property="article:modified_time" content="2019-09-14T08:49:52+00:00" />
30	<meta property="og:image" content="https://www.jasom.net/wp-content/uploads/2016/01/specific-dev-version-drupal-module-front.jpg" />
31	<meta property="og:image:width" content="1000" />
32	<meta property="og:image:height" content="625" />
33	<meta property="og:image:type" content="image/jpeg" />
34	<meta name="author" content="jasom" />
35	<meta name="twitter:card" content="summary_large_image" />
36	<meta name="twitter:creator" content="@jasomdotnet" />
37	<meta name="twitter:site" content="@jasomdotnet" />
38	<meta name="twitter:label1" content="Written by" />
39	<meta name="twitter:data1" content="jasom" />
40	<meta name="twitter:label2" content="Est. reading time" />
41	<meta name="twitter:data2" content="4 minutes" />
42	
42<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/#article","isPartOf":{"@id":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/"},"author":{"name":"jasom","@id":"https:\/\/www.jasom.net\/#\/schema\/person\/149323688c09014404b080c2cb464790"},"headline":"How to download specific dev version of drupal module? Simply using “git checkout” or “drush make”","datePublished":"2016-01-11T08:51:37+00:00","dateModified":"2019-09-14T08:49:52+00:00","mainEntityOfPage":{"@id":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/"},"wordCount":702,"commentCount":0,"publisher":{"@id":"https:\/\/www.jasom.net\/#\/schema\/person\/149323688c09014404b080c2cb464790"},"image":{"@id":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/#primaryimage"},"thumbnailUrl":"https:\/\/www.jasom.net\/wp-content\/uploads\/2016\/01\/specific-dev-version-drupal-module-front.jpg","keywords":["Drush","Git","Modules"],"articleSection":["Drupal"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/","url":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/","name":"How to download specific dev version of drupal module? Simply using “git checkout” or “drush make” &#8212; Jasom Dotnet","isPartOf":{"@id":"https:\/\/www.jasom.net\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/#primaryimage"},"image":{"@id":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/#primaryimage"},"thumbnailUrl":"https:\/\/www.jasom.net\/wp-content\/uploads\/2016\/01\/specific-dev-version-drupal-module-front.jpg","datePublished":"2016-01-11T08:51:37+00:00","dateModified":"2019-09-14T08:49:52+00:00","breadcrumb":{"@id":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/#primaryimage","url":"https:\/\/www.jasom.net\/wp-content\/uploads\/2016\/01\/specific-dev-version-drupal-module-front.jpg","contentUrl":"https:\/\/www.jasom.net\/wp-content\/uploads\/2016\/01\/specific-dev-version-drupal-module-front.jpg","width":1000,"height":625},{"@type":"BreadcrumbList","@id":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.jasom.net\/"},{"@type":"ListItem","position":2,"name":"How to download specific dev version of drupal module? Simply using “git checkout” or “drush make”"}]},{"@type":"WebSite","@id":"https:\/\/www.jasom.net\/#website","url":"https:\/\/www.jasom.net\/","name":"Jasom Dotnet","description":"Webcraftsman","publisher":{"@id":"https:\/\/www.jasom.net\/#\/schema\/person\/149323688c09014404b080c2cb464790"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.jasom.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.jasom.net\/#\/schema\/person\/149323688c09014404b080c2cb464790","name":"jasom","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.jasom.net\/wp-content\/uploads\/2019\/07\/me_square.jpg","url":"https:\/\/www.jasom.net\/wp-content\/uploads\/2019\/07\/me_square.jpg","contentUrl":"https:\/\/www.jasom.net\/wp-content\/uploads\/2019\/07\/me_square.jpg","width":384,"height":384,"caption":"jasom"},"logo":{"@id":"https:\/\/www.jasom.net\/wp-content\/uploads\/2019\/07\/me_square.jpg"},"description":"I know how to code. At least some basics :D","sameAs":["https:\/\/www.jasom.net\/","https:\/\/x.com\/jasomdotnet","https:\/\/www.youtube.com\/user\/jasomnet"]}]}</script>
42
43	
44
45
46<link rel="alternate" type="application/rss+xml" title="Jasom Dotnet &raquo; Feed" href="https://www.jasom.net/feed/" />
47<link rel="alternate" type="application/rss+xml" title="Jasom Dotnet &raquo; Comments Feed" href="https://www.jasom.net/comments/feed/" />
48<style id="wp-img-auto-sizes-contain-inline-css" media="all">img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}</style>
49<style id="wp-block-library-inline-css" media="all">:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;
49--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}</style>
50<style id="wp-block-image-inline-css" media="all">.wp-block-image>a,.wp-block-image>figure>a{display:inline-block}.wp-block-image img{box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom}@media not (prefers-reduced-motion){.wp-block-image img.hide{visibility:hidden}.wp-block-image img.show{animation:show-content-image .4s}}.wp-block-image[style*=border-radius] img,.wp-block-image[style*=border-radius]>a{border-radius:inherit}.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-image.aligncenter{text-align:center}.wp-block-image.alignfull>a,.wp-block-image.alignwide>a{width:100%}.wp-block-image.alignfull img,.wp-block-image.alignwide img{height:auto;width:100%}.wp-block-image .aligncenter,.wp-block-image .alignleft,.wp-block-image .alignright,.wp-block-image.aligncenter,.wp-block-image.alignleft,.wp-block-image.alignright{display:table}.wp-block-image .aligncenter>figcaption,.wp-block-image .alignleft>figcaption,.wp-block-image .alignright>figcaption,.wp-block-image.aligncenter>figcaption,.wp-block-image.alignleft>figcaption,.wp-block-image.alignright>figcaption{caption-side:bottom;display:table-caption}.wp-block-image .alignleft{float:left;margin:.5em 1em .5em 0}.wp-block-image .alignright{float:right;margin:.5em 0 .5em 1em}.wp-block-image .aligncenter{margin-left:auto;margin-right:auto}.wp-block-image :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-image.is-style-circle-mask img{border-radius:9999px}@supports ((-webkit-mask-image:none) or (mask-image:none)) or (-webkit-mask-image:none){.wp-block-image.is-style-circle-mask img{border-radius:0;-webkit-mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-mode:alpha;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}}:root :where(.wp-block-image.is-style-rounded img,.wp-block-image .is-style-rounded img){border-radius:9999px}.wp-block-image figure{margin:0}.wp-lightbox-container{display:flex;flex-direction:column;position:relative}.wp-lightbox-container img{cursor:zoom-in}.wp-lightbox-container img:hover+button{opacity:1}.wp-lightbox-container button{align-items:center;backdrop-filter:blur(16px) saturate(180%);background-color:rgb(90 90 90 / .25);border:none;border-radius:4px;cursor:zoom-in;display:flex;height:20px;justify-content:center;opacity:0;padding:0;position:absolute;right:16px;text-align:center;top:16px;width:20px;z-index:100}@media not (prefers-reduced-motion){.wp-lightbox-container button{transition:opacity .2s ease}}.wp-lightbox-container button:focus-visible{outline:3px auto rgb(90 90 90 / .25);outline:3px auto -webkit-focus-ring-color;outline-offset:3px}.wp-lightbox-container button:hover{cursor:pointer;opacity:1}.wp-lightbox-container button:focus{opacity:1}.wp-lightbox-container button:focus,.wp-lightbox-container button:hover,.wp-lightbox-container button:not(:hover):not(:active):not(.has-background){background-color:rgb(90 90 90 / .25);border:none}.wp-lightbox-overlay{box-sizing:border-box;
50cursor:zoom-out;height:100vh;left:0;overflow:hidden;position:fixed;top:0;visibility:hidden;width:100%;z-index:100000}.wp-lightbox-overlay .wp-lightbox-close-button{align-items:center;cursor:pointer;display:flex;font-family:inherit;gap:8px;justify-content:center;line-height:1;min-height:40px;min-width:40px;padding:0 4px;position:absolute;right:calc(env(safe-area-inset-right) + 16px);top:calc(env(safe-area-inset-top) + 16px);z-index:5000000}.wp-lightbox-overlay .wp-lightbox-close-button:focus,.wp-lightbox-overlay .wp-lightbox-close-button:hover,.wp-lightbox-overlay .wp-lightbox-close-button:not(:hover):not(:active):not(.has-background){background:none;border:none}.wp-lightbox-overlay .wp-lightbox-close-button:has(.wp-lightbox-close-text:not([hidden])) .wp-lightbox-close-icon svg{height:1em;width:1em}.wp-lightbox-overlay .wp-lightbox-close-icon svg{display:block}.wp-lightbox-overlay .wp-lightbox-navigation-button-next,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev{align-items:center;bottom:16px;cursor:pointer;display:flex;font-family:inherit;gap:4px;justify-content:center;line-height:1;min-height:40px;min-width:40px;padding:0 8px;position:absolute;z-index:2000002}.wp-lightbox-overlay .wp-lightbox-navigation-button-next[hidden],.wp-lightbox-overlay .wp-lightbox-navigation-button-prev[hidden]{display:none}@media (min-width:960px){.wp-lightbox-overlay .wp-lightbox-navigation-button-next,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev{bottom:50%;transform:translateY(-50%)}}.wp-lightbox-overlay .wp-lightbox-navigation-button-next:focus,.wp-lightbox-overlay .wp-lightbox-navigation-button-next:hover,.wp-lightbox-overlay .wp-lightbox-navigation-button-next:not(:hover):not(:active):not(.has-background),.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:focus,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:hover,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:not(:hover):not(:active):not(.has-background){background:none;border:none;padding:0 8px}.wp-lightbox-overlay .wp-lightbox-navigation-button-next:has(.wp-lightbox-navigation-text:not([hidden])) .wp-lightbox-navigation-icon svg,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:has(.wp-lightbox-navigation-text:not([hidden])) .wp-lightbox-navigation-icon svg{display:block;height:1.5em;width:1.5em}.wp-lightbox-overlay .wp-lightbox-navigation-button-prev{left:calc(env(safe-area-inset-left) + 16px)}.wp-lightbox-overlay .wp-lightbox-navigation-button-next{right:calc(env(safe-area-inset-right) + 16px)}.wp-lightbox-overlay .wp-lightbox-navigation-icon svg{vertical-align:middle}.wp-lightbox-overlay .lightbox-image-container{height:var(--wp--lightbox-container-height);left:50%;overflow:hidden;position:absolute;top:50%;transform:translate(-50%,-50%);transform-origin:top left;width:var(--wp--lightbox-container-width);z-index:2000001}.wp-lightbox-overlay .wp-block-image{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:center;margin:0;position:relative;transform-origin:0 0;width:100%;z-index:3000000}.wp-lightbox-overlay .wp-block-image img{height:var(--wp--lightbox-image-height);min-height:var(--wp--lightbox-image-height);min-width:var(--wp--lightbox-image-width);width:var(--wp--lightbox-image-width)}.wp-lightbox-overlay .wp-block-image figcaption{display:none}.wp-lightbox-overlay button{background:none;border:none}.wp-lightbox-overlay .scrim{background-color:#fff;height:100%;opacity:.9;position:absolute;width:100%;z-index:2000000}.wp-lightbox-overlay.active{visibility:visible}@media not (prefers-reduced-motion){.wp-lightbox-overlay.active{animation:turn-on-visibility .25s both}.wp-lightbox-overlay.active img{animation:turn-on-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active){animation:turn-off-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active) img{animation:turn-off-visibility .25s both}.wp-lightbox-overlay.zoom.active{animation:none;opacity:1;visibility:visible}.wp-lightbox-overlay.zoom.active .lightbox-image-container{animation:lightbox-zoom-in .4s}.wp-lightbox-overlay.zoom.active .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.active .scrim{animation:turn-on-visibility .4s forwards}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active){animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container{animation:lightbox-zoom-out .4s}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .scrim{animation:turn-off-visibility .4s forwards}}
50@keyframes show-content-image{0%{visibility:hidden}99%{visibility:hidden}to{visibility:visible}}@keyframes turn-on-visibility{0%{opacity:0}to{opacity:1}}@keyframes turn-off-visibility{0%{opacity:1;visibility:visible}99%{opacity:0;visibility:visible}to{opacity:0;visibility:hidden}}@keyframes lightbox-zoom-in{0%{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale))}to{transform:translate(-50%,-50%) scale(1)}}@keyframes lightbox-zoom-out{0%{transform:translate(-50%,-50%) scale(1);visibility:visible}99%{visibility:visible}to{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));visibility:hidden}}</style>
51<style id="wp-block-code-inline-css" media="all">.wp-block-code{box-sizing:border-box}.wp-block-code code{direction:ltr;display:block;font-family:inherit;overflow-wrap:break-word;text-align:initial;white-space:break-spaces}</style>
52
53<style id="classic-theme-styles-inline-css" media="all">/*! This file is auto-generated */
54.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}</style>
55
56<style id="global-styles-inline-css" media="all">:root{--wp--preset--aspect-ratio--square:1;--wp--preset--aspect-ratio--4-3:4/3;--wp--preset--aspect-ratio--3-4:3/4;--wp--preset--aspect-ratio--3-2:3/2;--wp--preset--aspect-ratio--2-3:2/3;--wp--preset--aspect-ratio--16-9:16/9;--wp--preset--aspect-ratio--9-16:9/16;--wp--preset--color--black:#000000;--wp--preset--color--cyan-bluish-gray:#abb8c3;--wp--preset--color--white:#ffffff;--wp--preset--color--pale-pink:#f78da7;--wp--preset--color--vivid-red:#cf2e2e;--wp--preset--color--luminous-vivid-orange:#ff6900;--wp--preset--color--luminous-vivid-amber:#fcb900;--wp--preset--color--light-green-cyan:#7bdcb5;--wp--preset--color--vivid-green-cyan:#00d084;--wp--preset--color--pale-cyan-blue:#8ed1fc;
56--wp--preset--color--vivid-cyan-blue:#0693e3;--wp--preset--color--vivid-purple:#9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple:linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan:linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange:linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red:linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray:linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum:linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple:linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux:linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk:linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean:linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass:linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight:linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small:13px;--wp--preset--font-size--medium:20px;--wp--preset--font-size--large:36px;--wp--preset--font-size--x-large:42px;--wp--preset--spacing--20:0.44rem;--wp--preset--spacing--30:0.67rem;--wp--preset--spacing--40:1rem;--wp--preset--spacing--50:1.5rem;--wp--preset--spacing--60:2.25rem;--wp--preset--spacing--70:3.38rem;--wp--preset--spacing--80:5.06rem;--wp--preset--shadow--natural:6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep:12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp:6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined:6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp:6px 6px 0px rgb(0, 0, 0)}.wp-block-button{--wp--preset--dimension--25:25%;--wp--preset--dimension--50:50%;--wp--preset--dimension--75:75%;--wp--preset--dimension--100:100%}:where(body){margin:0}:where(.is-layout-flex){gap:.5em}:where(.is-layout-grid){gap:.5em}body .is-layout-flex{display:flex}.is-layout-flex{flex-wrap:wrap;align-items:center}.is-layout-flex>:is(*,div){margin:0}body .is-layout-grid{display:grid}.is-layout-grid>:is(*,div){margin:0}body{padding-top:0;padding-right:0;padding-bottom:0;padding-left:0}:root :where(.wp-element-button,.wp-block-button__link){background-color:#32373c;border-width:0;color:#fff;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;padding-top:calc(0.667em + 2px);padding-right:calc(1.333em + 2px);padding-bottom:calc(0.667em + 2px);padding-left:calc(1.333em + 2px);text-decoration:none;text-transform:inherit}.has-black-color{color:var(--wp--preset--color--black)!important}.has-cyan-bluish-gray-color{color:var(--wp--preset--color--cyan-bluish-gray)!important}.has-white-color{color:var(--wp--preset--color--white)!important}.has-pale-pink-color{color:var(--wp--preset--color--pale-pink)!important}.has-vivid-red-color{color:var(--wp--preset--color--vivid-red)!important}.has-luminous-vivid-orange-color{color:var(--wp--preset--color--luminous-vivid-orange)!important}.has-luminous-vivid-amber-color{color:var(--wp--preset--color--luminous-vivid-amber)!important}.has-light-green-cyan-color{color:var(--wp--preset--color--light-green-cyan)!important}.has-vivid-green-cyan-color{color:var(--wp--preset--color--vivid-green-cyan)!important}.has-pale-cyan-blue-color{color:var(--wp--preset--color--pale-cyan-blue)!important}.has-vivid-cyan-blue-color{color:var(--wp--preset--color--vivid-cyan-blue)!important}.has-vivid-purple-color{color:var(--wp--preset--color--vivid-purple)!important}.has-black-background-color{background-color:var(--wp--preset--color--black)!important}.has-cyan-bluish-gray-background-color{background-color:var(--wp--preset--color--cyan-bluish-gray)!important}.has-white-background-color{background-color:var(--wp--preset--color--white)!important}.has-pale-pink-background-color{background-color:var(--wp--preset--color--pale-pink)!important}.has-vivid-red-background-color{background-color:var(--wp--preset--color--vivid-red)!important}.has-luminous-vivid-orange-background-color{background-color:var(--wp--preset--color--luminous-vivid-orange)!important}.has-luminous-vivid-amber-background-color{background-color:var(--wp--preset--color--luminous-vivid-amber)!important}.has-light-green-cyan-background-color{background-color:var(--wp--preset--color--light-green-cyan)!important}.has-vivid-green-cyan-background-color{background-color:var(--wp--preset--color--vivid-green-cyan)!important}.has-pale-cyan-blue-background-color{background-color:var(--wp--preset--color--pale-cyan-blue)!important}.has-vivid-cyan-blue-background-color{background-color:var(--wp--preset--color--vivid-cyan-blue)!important}.has-vivid-purple-background-color{background-color:var(--wp--preset--color--vivid-purple)!important}.has-black-border-color{border-color:var(--wp--preset--color--black)!important}.has-cyan-bluish-gray-border-color{border-color:var(--wp--preset--color--cyan-bluish-gray)!important}.has-white-border-color{border-color:var(--wp--preset--color--white)!important}.has-pale-pink-border-color{border-color:var(--wp--preset--color--pale-pink)!important}.has-vivid-red-border-color{border-color:var(--wp--preset--color--vivid-red)!important}.has-luminous-vivid-orange-border-color{border-color:var(--wp--preset--color--luminous-vivid-orange)!important}.has-luminous-vivid-amber-border-color{border-color:var(--wp--preset--color--luminous-vivid-amber)!important}.has-light-green-cyan-border-color{border-color:var(--wp--preset--color--light-green-cyan)!important}.has-vivid-green-cyan-border-color{border-color:var(--wp--preset--color--vivid-green-cyan)!important}.has-pale-cyan-blue-border-color{border-color:var(--wp--preset--color--pale-cyan-blue)!important}.has-vivid-cyan-blue-border-color{border-color:var(--wp--preset--color--vivid-cyan-blue)!important}.has-vivid-purple-border-color{border-color:var(--wp--preset--color--vivid-purple)!important}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background:var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple)!important}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background:var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan)!important}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background:var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange)!important}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background:var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red)!important}
56.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background:var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray)!important}.has-cool-to-warm-spectrum-gradient-background{background:var(--wp--preset--gradient--cool-to-warm-spectrum)!important}.has-blush-light-purple-gradient-background{background:var(--wp--preset--gradient--blush-light-purple)!important}.has-blush-bordeaux-gradient-background{background:var(--wp--preset--gradient--blush-bordeaux)!important}.has-luminous-dusk-gradient-background{background:var(--wp--preset--gradient--luminous-dusk)!important}.has-pale-ocean-gradient-background{background:var(--wp--preset--gradient--pale-ocean)!important}.has-electric-grass-gradient-background{background:var(--wp--preset--gradient--electric-grass)!important}.has-midnight-gradient-background{background:var(--wp--preset--gradient--midnight)!important}.has-small-font-size{font-size:var(--wp--preset--font-size--small)!important}.has-medium-font-size{font-size:var(--wp--preset--font-size--medium)!important}.has-large-font-size{font-size:var(--wp--preset--font-size--large)!important}.has-x-large-font-size{font-size:var(--wp--preset--font-size--x-large)!important}</style>
57
58<link rel='stylesheet' id='mkaz-code-syntax-prism-css-css' href='https://www.jasom.net/wp-content/cache/fvm/min/1789975772-css1634d4dce8e447e2c70cd0166c761ba9940e6c34d2e9692825788b6db6095.css' media='all' />
59<link rel='stylesheet' id='wp-block-paragraph-css' href='https://www.jasom.net/wp-content/cache/fvm/min/1789975772-cssc7d4732ca9c1511ef3c1f60ee22e1ebc2985905d2521c502e211e29a88714.css' media='all' />
60<link rel='stylesheet' id='wp-block-heading-css' href='https://www.jasom.net/wp-content/cache/fvm/min/1789975772-cssb0b5ded471bb79b105d847c63a7e8426bc82d4c9e4caa6e3cdcd1307d7a41.css' media='all' />
61<link rel='stylesheet' id='wp-block-list-css' href='https://www.jasom.net/wp-content/cache/fvm/min/1789975772-css29e86ce1442e3eaf51b5c2cadb8f5eb63532c3e60f3353e18aea6976f9d26.css' media='all' />
62<link rel='stylesheet' id='wp-block-quote-css' href='https://www.jasom.net/wp-content/cache/fvm/min/1789975772-cssc0e2b5a81747928ecfda68e4b767dbb5a4236f3070d862e87849fc80f0564.css' media='all' />
63<link rel='stylesheet' id='digital-nomad-css' href='https://www.jasom.net/wp-content/cache/fvm/min/1789975772-css408638780cced6081b56e3badc186475902f92e43428fb7f74a81f7f66a92.css' media='all' />
64<style id="digital-nomad-inline-css" media="all">#placeholder{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 2048 1536'%3E%3Cfilter id='b'%3E%3CfeGaussianBlur stdDeviation='12' /%3E%3C/filter%3E%3Cpath fill='%239c8872' d='M0 0h2048v1536H0z'/%3E%3Cg filter='url(%23b)' transform='matrix(8 0 0 8 4 4)' fill-opacity='.5'%3E%3Cellipse fill='%23170000' rx='1' ry='1' transform='matrix(74.81414 -1.73659 1.21307 52.26042 65.8 167)'/%3E%3Cellipse fill='%23fff' rx='1' ry='1' transform='rotate(-177.5 125 40.2) scale(137.18797 35.34812)'/%3E%3Cpath fill='%23a56121' d='M54 105h136v57H54z'/%3E%3Cpath fill='%23fff' d='M178 184l54-14-40-29z'/%3E%3Cellipse fill='%23271300' cx='32' cy='183' rx='104' ry='48'/%3E%3Cellipse fill='%23541e00' rx='1' ry='1' transform='rotate(32.9 -163.1 517.3) scale(25.9513 85.08599)'/%3E%3Cellipse fill='%23d0cbc2' rx='1' ry='1' transform='matrix(226.00608 -21.96163 1.64121 16.88962 152.5 8.2)'/%3E%3Cellipse fill='%23cdeaf9' rx='1' ry='1' transform='matrix(51.58271 6.18875 -1.951 16.26137 0 80.8)'/%3E%3C/g%3E%3C/svg%3E")}#header{background-image:url(https://www.jasom.net/wp-content/uploads/2023/09/goodbay_n_welcome_ceremony.jpg)}@media (min-width:480px){#header{background-image:url(https://www.jasom.net/wp-content/uploads/2023/09/goodbay_n_welcome_ceremony.jpg)}}.inner_content,#respond,.comment-body{max-width:56rem}</style>
65
66<link rel='stylesheet' id='child-css' href='https://www.jasom.net/wp-content/cache/fvm/min/1789975772-cssa0643b4e3ad9323ceb09416f88ee34fa695b9d321cf83b1dc8749f7265f4d.css' media='all' />
67
68    <style media="all">.logo{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 384'%3E%3Cfilter id='b'%3E%3CfeGaussianBlur stdDeviation='12' /%3E%3C/filter%3E%3Cpath fill='%2397765b' d='M0 0h384v384H0z'/%3E%3Cg filter='url(%23b)' transform='matrix(1.5 0 0 1.5 .8 .8)' fill-opacity='.5'%3E%3Cpath fill='%23fff' d='M39 120L0 271h145z'/%3E%3Cellipse cx='148' cy='20' rx='255' ry='49'/%3E%3Cellipse fill='%23ffbe80' cx='150' cy='159' rx='32' ry='134'/%3E%3Cellipse fill='%23000a19' rx='1' ry='1' transform='matrix(-57.13598 -44.47915 17.47528 -22.44799 235.4 136.8)'/%3E%3Cellipse fill='%23000014' cx='88' cy='87' rx='38' ry='41'/%3E%3Cellipse fill='%23ff8a32' rx='1' ry='1' transform='matrix(-45.09286 19.79438 -24.50284 -55.81902 201.8 207.7)'/%3E%3Cellipse fill='%23fff' cx='64' cy='230' rx='42' ry='50'/%3E%3Cellipse fill='%23fff' rx='1' ry='1' transform='matrix(-9.60004 16.95877 -26.01349 -14.72576 149.3 131.8)'/%3E%3Cellipse fill='%23ff6210' rx='1' ry='1' transform='matrix(-42.60371 -32.459 19.96961 -26.2109 110 166.5)'/%3E%3Cellipse fill='%235cffff' rx='1' ry='1' transform='matrix(19.54455 -21.78275 14.30236 12.83278 241.2 89.4)'/%3E%3C/g%3E%3C/svg%3E")}</style>
69    
70<link rel="icon" href="https://www.jasom.net/wp-content/uploads/2019/07/me_square-300x300.jpg" sizes="192x192" />
71
72
73    </head>
74
75    <body class="wp-singular post-template-default single single-post postid-21 single-format-standard wp-custom-logo wp-theme-digital-nomad wp-child-theme-child">
76				<a class="skip-link screen-reader-text" href="#content">Skip to content</a>
77				<header id="placeholder" class="basic_bg">
78			<div id="header" class="basic_bg"> 
79				<div id="headelements">
80					<div id="cell">
81						<div class="inner_content">
82							<div class="stabilize header_text text_shadow">
83								<div class="main_header_block">
84									
85<a href="https://www.jasom.net" rel="home" class="logo_link">
86
87	
88		<img src="https://www.jasom.net/wp-content/uploads/2019/07/me_square.jpg" alt="Jasom Dotnet - Webcraftsman" title="Jasom Dotnet - Webcraftsman" class="logo">
89
90	
91</a>																		
92<div class="textwidget custom-html-widget">I'm a web <a href="https://stackoverflow.com/users/2195238/jasom-dotnet" target="_blank" rel="nofollow">developer</a> with focus on WordPress, website performance and online marketing. I maintain <a href="https://www.jasom.net/digital-nomad-wordpress-theme/">Digital Nomad WordPress theme</a>. In Slovakia I occasionally write for <a href="https://www.ointernete.sk/" target="_blank">Ointernete.sk</a> technology news. My <a href="https://www.jasom.net/yellow-hat/">
92podcast</a> is called Yellow Hat. Read my <a href="https://www.jasom.net/archive/">blog</a> or <a href="https://www.jasom.net/contact/">contact</a> me.</div>								</div>
93								<noscript id="general">Some features may not work without JavaScript</noscript>
94															</div>
95													</div>
96					</div>
97									</div>
98			</div>
99		</header>
100
101		<section id="main">
102	<div id="content" class="digitalnomad_post_container post-21 post type-post status-publish format-standard has-post-thumbnail hentry category-drupal tag-drush tag-git tag-modules">
103		<article id="singular-21" class="post-21 post type-post status-publish format-standard has-post-thumbnail hentry category-drupal tag-drush tag-git tag-modules">
104	<img width="1000" height="625" src="https://www.jasom.net/wp-content/uploads/2016/01/specific-dev-version-drupal-module-front.jpg" class="feature_image wp-post-image" alt="How to download specific dev version of drupal module? Simply using “git checkout” or “drush make”" title="How to download specific dev version of drupal module? Simply using “git checkout” or “drush make”" decoding="async" fetchpriority="high" srcset="https://www.jasom.net/wp-content/uploads/2016/01/specific-dev-version-drupal-module-front.jpg 1000w, https://www.jasom.net/wp-content/uploads/2016/01/specific-dev-version-drupal-module-front-300x188.jpg 300w, https://www.jasom.net/wp-content/uploads/2016/01/specific-dev-version-drupal-module-front-768x480.jpg 768w" sizes="(max-width: 1000px) 100vw, 1000px" />
105	<div class="inner_content">
106
107		
108		<header>
109			<div class="post_time main_time time_permalink"><a href="https://www.jasom.net/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make/" title="Permalink for: How to download specific dev version of drupal module? Simply using “git checkout” or “drush make”"><time class="published" datetime="2016-01-11T08:51:37+00:00">January 11, 2016</time>, <span class="last_update_text">updated:</span> <time class="updated" datetime="2019-09-14T10:49:52+00:00">September 14, 2019</time></a></div>				
110			<h1 class="post_title main_title">How to download specific dev version of drupal module? Simply using “git checkout” or “drush make”</h1>
111			
112            <div class="post_category"><a href="https://www.jasom.net/blog/drupal/" rel="category tag">Drupal</a> (<span class="post_tags"><a href="https://www.jasom.net/tags/drush/" rel="tag">Drush</a>, <a href="https://www.jasom.net/tags/git/" rel="tag">Git</a>, <a href="https://www.jasom.net/tags/modules/" rel="tag">Modules</a></span>)</div>
113
114            		</header>
115
116					<div class="post_content">
117
118				
119				
120<p class="wp-block-paragraph">Dev versions of modules aren&#8217;t minor versioned, they are always current. If you need specific dev version you&#8217;d have to download it from git by a date.</p>
121
122
123
124<h2 class="wp-block-heading">Latest Geocoder dev release is broken</h2>
125
126
127
128<p class="wp-block-paragraph"><a href="https://www.drupal.org/project/geocoder" target="_blank" rel="noopener noreferrer">Geocoder</a> is a module with the latest stable release from 27 Aug 2012, therefore I use dev version. Update from 07 Jan 2016 <a href="https://www.drupal.org/node/2647536" target="_blank" title="Latest dev release breaks Google geocoder (2016-Jan-07)" rel="noopener noreferrer">broke</a> some key features. The question is: <em>How can I download a previously working snapshot</em>?</p>
129
130
131
132<p class="wp-block-paragraph">It&#8217;s possible to do it using 2 methods:</p>
133
134
135
136<ol class="wp-block-list"><li>“<em>git checkout</em>” – preferred</li><li>“<em>drush make</em>” – more easier when you are not familiar with git</li></ol>
137
138
139
140<h2 class="wp-block-heading">How to find commit hash?</h2>
141
142
143
144<p class="wp-block-paragraph">In both cases you will need commit hash (2ffd3fa8b22c11100516bf801bc08ba729cc8a68):</p>
145
146
147
148<ul class="wp-block-list"><li>Go to “<a href="https://www.drupal.org/node/1294050/commits" target="_blank" title=" Commits for Geocoder" rel="noopener noreferrer">View commits</a>” (located in the right sidebar on the project page).</li><li>You will see a list of various dates, the commits. In my case I see <em>1 commit from 07 Jan 2016</em>, <em>6 commits from 6 Jan 2016</em>, <em>5 commits from 20 Nov 2015</em>, <em>1 commit from 30 Sept 2015</em> etc. Click on the last commit from 20 Nov 2015.</li><li>You will be redirected to the <a href="https://www.drupal.org/commitlog/commit/27950/2ffd3fa8b22c11100516bf801bc08ba729cc8a68" target="_blank" rel="noopener noreferrer">page with the commit hash</a>.</li></ul>
149
150
151
152<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" width="1000" height="625" src="https://www.jasom.net/wp-content/uploads/2019/09/specific-dev-version-drupal-module.jpg" alt="" class="wp-image-205" srcset="https://www.jasom.net/wp-content/uploads/2019/09/specific-dev-version-drupal-module.jpg 1000w, https://www.jasom.net/wp-content/uploads/2019/09/specific-dev-version-drupal-module-300x188.jpg 300w, https://www.jasom.net/wp-content/uploads/2019/09/specific-dev-version-drupal-module-768x480.jpg 768w" sizes="(max-width: 1000px) 100v
152w, 1000px" /></figure></div>
153
154
155
156<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" width="1000" height="291" src="https://www.jasom.net/wp-content/uploads/2019/09/specific-dev-version-drupal-module-1.jpg" alt="" class="wp-image-206" srcset="https://www.jasom.net/wp-content/uploads/2019/09/specific-dev-version-drupal-module-1.jpg 1000w, https://www.jasom.net/wp-content/uploads/2019/09/specific-dev-version-drupal-module-1-300x87.jpg 300w, https://www.jasom.net/wp-content/uploads/2019/09/specific-dev-version-drupal-module-1-768x223.jpg 768w" sizes="(max-width: 1000px) 100vw, 1000px" /><figcaption>Drupal module commit hash</figcaption></figure></div>
157
158
159
160<h2 class="wp-block-heading">1. “git checkout” method</h2>
161
162
163
164<p class="wp-block-paragraph">If you are not familiar with drupal git, start with <a href="https://www.drupal.org/documentation/git" target="_blank" title="Drupal Git" rel="noopener noreferrer">this</a> documentation 😀 or watch <a href="https://vimeo.com/20459209" target="_blank" title="Using Git on Drupal.org - Randy Fay" rel="noopener noreferrer">this</a> super explaining video.</p>
165
166
167
168<p class="wp-block-paragraph">If you are familiar with git, type this into a shell:</p>
169
170
171
172<pre class="wp-block-code"><code lang="bash" class="language-bash">git clone --branch 7.x-1.x https://git.drupal.org/project/geocoder.git
173cd geocoder
174git checkout c994066d58bc7518bc9796c60d4d43f98ae477cd .</code></pre>
175
176
177
178<h3 class="wp-block-heading">Explanation</h3>
179
180
181
182<ul class="wp-block-list"><li><code>git clone</code> – you will find entire command with your-module-specific url on the project page under tab the “<a title="Gecocoder git instructions" rel="noopener noreferrer" href="https://www.drupal.org/project/geocoder/git-instructions" target="_blank">Version control</a>”</li><li><code>cd geocoder</code> – git will download files into the folder “geocoder” so go there</li><li><code>cd geocoder hash .</code> – will retrieve a date specific version of the module. <strong>Don&#8217;t forget to add dot (“.”) in the end.</strong></li></ul>
183
184
185
186<p class="wp-block-paragraph"><strong>Desired dev version of the Geocoder module is located in <em>&#8220;geocoder</em>&#8221; folder, now.</strong></p>
187
188
189
190<h2 class="wp-block-heading">2. “drush make” method</h2>
191
192
193
194<p class="wp-block-paragraph">What&#8217;s “<a href="http://www.drush.org/en/master/make/" target="_blank" title="Drush make" rel="noopener noreferrer">drush make</a>” command? This is from official documentation:</p>
195
196
197
198<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Drush make is an extension to drush that can create a ready-to-use drupal site, pulling sources from various locations. It does this by parsing a flat text file (similar to a drupal .info file) and downloading the sources it describes.</p></blockquote>
199
200
201
202<p class="wp-block-paragraph"><a href="https://www.youtube.com/watch?v=MFUlOLwREaY" target="_blank" title=" Using Drush Make" rel="noopener noreferrer">Here</a> is a very well made video briefly explaining how the &#8220;<em>drush make</em>&#8221; works. Video is tied to <a href="https://stonebergdesign.com/blog/using-drush-make-building-base-drupal-installation-through-automation" target="_blank" rel="noopener noreferrer">this</a> Jared&#8217;s article.</p>
203
204
205
206<p class="wp-block-paragraph">In drush “<code>*.make file</code>” is defined which modules, which versions and which sources (git) you wish to use. This is sample of <code>myMakeFile.make</code> file I have used to retrieve specific dev version of Geocoder (November 20, 2015) from the git:</p>
207
208
209
210<pre class="wp-block-code"><code lang="bash" class="language-bash">api = 2
211core = 7.x
212projects[drupal][version] = 7.12
213projects[geocoder][version] = "1.x-dev"
214projects[geocoder][download][type] = "git"
215projects[geocoder][download][url] = "https://git.drupal.org/project/geocoder.git"
216projects[geocoder][download][revision] = "2ffd3fa8b22c11100516bf801bc08ba729cc8a68"</code></pre>
217
218
219
220<h3 class="wp-block-heading">Explanation</h3>
221
222
223
224<ul class="wp-block-list"><li>I don&#8217;t know what <code>api = 2</code> is 🙂</li><li><em>core</em> specifies a drupal version you wish to work with like 7.x, 8.x, 9.x</li><li><code>projects[drupal][version]</code> specifies release of the Drupal you are going to download. I just copy it from <a title="Full example drupal-org.make file" rel="noopener noreferrer" href="https://www.drupal.org/node/1432374" target="_blank">this</a> page. It will download Drupal 7.12. It&#8217;s not important for the purpose of the tutorial.</li><li><code>projects[geocoder][version]</code> says I want to download dev version of the Geocoder project.</li><li><code>projects[geocoder][download][type]</code><em> </em>I&#8217;m going to download it from a drupal git</li><li><code>projects[geocoder][download][url]</code> git address. You can find your one on the project page under tab “<a rel="noopener noreferrer" href="https://www.drupal.org/project/geocoder/git-instructions" target="_blank">Version control</a>” as I already mentioned.</li><li><code>projects[geocoder][download][revision]</code> hash says which commit should be the last one in the version you are going to download. I have mentioned above how to obtain this hash.</li></ul>
225
226
227
228<p class="wp-block-paragraph">You have a drush, you have a make file and now let&#8217;s run it:</p>
229
230
231
232<pre class="wp-block-code"><code lang="bash" class="language-bash">cd
233mkdir removeMeWhenDone
234cd removeMeWhenDone
235drush make /path/to/myMakeFile.make -y</code></pre>
236
237
238
239<h3 class="wp-block-heading">Explanation</h3>
240
241
242
243<ul class="wp-block-list"><li><code>cd</code> will place you into the home folder</li><li><code>mkdir removeMeWhenDone</code> creates a temporary folder where the files will be downloaded</li><li><code>cd removeMeWhenDone</code> – go to that tmp folder</li><li><code>drush make /path/to/myMakeFile.make -y</code> runs the make file. “<code>-y</code>
243” says “<code>yes</code>” to all question Drush may have.</li></ul>
244
245
246
247<p class="wp-block-paragraph"><strong>Desired dev version of the Geocoder module is located in </strong><code>~/removeMeWhenDone/sites/all/modules</code><strong>, now.</strong></p>
248
249
250
251<h2 class="wp-block-heading">Do I really have a proper version?</h2>
252
253
254
255<p class="wp-block-paragraph">How to check if you have a good version:</p>
256
257
258
259<ul class="wp-block-list"><li>Open the patch for the next commit (<a rel="noopener noreferrer" href="https://www.drupal.org/commitlog/commit/27950/b95eb8f2b072ae4170076d8c6c4683f0db20096e" target="_blank">first one from 06 Jan 2016</a> in my case) and find some unique string (“<em>Helper function to compare 2 arrays recursively.</em>” was added).</li><li>It shouldn&#8217;t be present in the downloaded version (version from 20 Nov 2015 in my case).</li><li>You can find the “<em>unique string</em>” in the patch attached to the issue page linked from the “<em>hash</em>” page (page with the commit hash).</li><li>Download some dev version from 06 Jan 2016 (or 07 Jan 2016), and try to search for the &#8220;<em>unique string</em>&#8221; within the module files. It should be present.</li></ul>
260
261
262
263<p class="wp-block-paragraph">That&#8217;s it, you have learned how to download specific dev version of Drupal module using 2 methods – “<em>drush make</em>” and “<em>git checkout</em>”.</p>
264
265				
266			</div>
267		            
268		
269		
270	</div>
271    
272	
273	<div class="outher_respond">	<div id="respond" class="comment-respond">
274		<h3 id="reply-title" class="comment-reply-title">Leave a Reply <small><a rel="nofollow" id="cancel-comment-reply-link" href="/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make/#respond" style="display:none;">Cancel reply</a></small></h3><form action="https://www.jasom.net/wp-comments-post.php" method="post" id="commentform" class="comment-form"><p class="comment-notes"><span id="email-notes">Your email address will not be published.</span> <span class="required-field-message">Required fields are marked <span class="required">*</span></span></p><p class="comment-form-comment"><label for="comment">Comment <span class="required">*</span></label> <textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required></textarea></p>
275<input type="hidden" class="tysi" name="tysi" value="" />
276<p class="comment-form-author"><label for="author">Name <span class="required">*</span></label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" autocomplete="name" required /></p>
277<p class="comment-form-email"><label for="email">Email <span class="required">*</span></label> <input id="email" name="email" type="email" value="" size="30" maxlength="100" aria-describedby="email-notes" autocomplete="email" required /></p>
278<p class="comment-form-url"><label for="url">Website</label> <input id="url" name="url" type="url" value="" size="30" maxlength="200" autocomplete="url" /></p>
279<p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes" /> <label for="wp-comment-cookies-consent">Save my name, email, and website in this browser for the next time I comment.</label></p>
280<p class="form-submit"><input name="submit" type="submit" id="submit" class="submit" value="Post Comment" /> <input type='hidden' name='comment_post_ID' value='21' id='comment_post_ID' />
281<input type='hidden' name='comment_parent' id='comment_parent' value='0' />
282</p></form>	</div>
283	</div>    
284	
285	<nav class="post_nav single-no"><div class="preview_content basic_bg" style="background-image: url('https://www.jasom.net/wp-content/uploads/2019/10/php_elephant_pink_photo_by_pixabay_com-1024x547.jpg');"><a href="https://www.jasom.net/php-prepare-sanitize-transliterate-convert-change-user-string-input-for-filename-or-url-address/" title="Previous post: PHP: Prepare (sanitize, transliterate, convert, change) user string (input) for filename or url address" class="post_nav_link post_nav_prev text_shadow" rel="prev"><div class="preview_inside">&laquo; PHP: Prepare (sanitize, transliterate, convert, change) user string (input) for filename or url address</div></a></div><div class="preview_content basic_bg" style="background-image: url('https://www.jasom.net/wp-content/uploads/2019/09/dumbier_trip_2018-1.jpg');"><a href="https://www.jasom.net/how-to-install-and-secure-phpmyadmin-with-nginx-on-an-ubuntu-16-04-server/" title="Next post: How To Install and Secure phpMyAdmin with Nginx on an Ubuntu 16.04 Server" class="post_nav_link post_nav_next text_shadow" rel="next"><div class="preview_inside">How To Install and Secure phpMyAdmin with Nginx on an Ubuntu 16.04 Server &raquo;</div></a></div></nav></article>	</div>
286</section>
287<footer id="footer" class="basic_bg">
288
289    <div id="footer_inside" class="text_shadow">
290		<span id="spinner"></span>
291		        <p>
292            2026 &copy; Jasom Dotnet.
293            Powered by <a href="https://wordpress.org/" target="_blank">WordPress</a>.            Themed by <a href="https://www.jasom.net" target="_blank">Jasom Dotnet</a>.        </p>
294            </div>
295
296</footer>
297
298            <noscript id="deferred-styles">
299            <style>
300                #footer {background-image: url('https://www.jasom.net/wp-content/uploads/2023/09/line_between_Europe_and_Asia-1024x576.jpg');}
301                @media (min-width: 480px) {#footer {background-image: url('https://www.jasom.net/wp-content/uploads/2023/09/line_between_Europe_and_Asia.jpg');}}
302            </style>
303            </noscript>
304            
304<script type="speculationrules">
305{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/child/*","/wp-content/themes/digital-nomad/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
306</script>
306
307        <a href="#header" class="gp" title="&uarr; Up">&uarr; Up</a>
308        
308<script id="mkaz-code-syntax-prism-js-js-extra">
309var prism_settings = {"pluginUrl":"https://www.jasom.net/wp-content/plugins/code-syntax-block/"};
310//# sourceURL=mkaz-code-syntax-prism-js-js-extra
311</script>
vendor: 1 bytes, line 311
311
312<script id="mkaz-code-syntax-prism-js-js" src="https://www.jasom.net/wp-content/plugins/code-syntax-block/assets/prism/prism.js?ver=1719250798"></script>
vendor: 1 bytes, line 312
312
313<script id="digital-nomad-js" src="https://www.jasom.net/wp-content/themes/digital-nomad/js/main.min.js?ver=1.2.0"></script>
vendor: 1 bytes, line 313
313
314<script async data-wp-strategy="async" fetchpriority="low" id="comment-reply-js" src="https://www.jasom.net/wp-includes/js/comment-reply.min.js?ver=7.1.2"></script>
314
315
316    
316<script>
317        (function () {
318            var formular;
319            formular = document.getElementById('commentform');
320            if (formular === null) {
321                formular = document.getElementsByClassName('wpcf7-form');
322            }
323            window.addEventListener('load', function () {
324                var xhr = new XMLHttpRequest();
325                xhr.open('POST', 'https://www.jasom.net/wp-admin/admin-ajax.php', true);
326                xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
327                xhr.onload = function () {
328                    // Process our return data
329                    if (xhr.status >= 200 && xhr.status < 300 && xhr.readyState === 4) {
330                        //What do when the request is successful
331                        var ck = xhr.responseText;
332                        if (ck) {
333                            var x = document.getElementsByClassName('tysi');
334                            for (var i = 0; i < x.length; i++) {
335                                x[i].value = ck;
336                            }
337                        } else {
338                            console.log('No CK in response');
339                            formular.innerHTML = '<p>You are not eligible to submit this form.</p>';
340                            return;
341                        }
342                    } else {
343                        // What do when the request fails
344                        formular.innerHTML = '<p>Due to technical difficulties site does not receive new form submissions.</p>';
345                        console.log('AJAX request failed. Returned status is ' + xhr.status + '. That\'s all we know.');
346                    }
347                };
348                var msg = {
349                    action: 'aas_visit',
350                    fk: 1
351                };
352                xhr.send(endodeForPost(msg));
353            });
354
355            function endodeForPost(object) {
356                var encodedString = '';
357                for (var prop in object) {
358                    if (object.hasOwnProperty(prop)) {
359                        if (encodedString.length > 0) {
360                            encodedString += '&';
361                        }
362                        encodedString += encodeURI(prop + '=' + object[prop]);
363                    }
364                }
365                return encodedString;
366            }
367        }());
368    </script>
368
369
370    
371<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"8f330f365fef4832bd7a4c88557b3b14","r":1,"spa":2}' crossorigin="anonymous"></script>
371
372</body>
373</html>
374<!-- Cached page generated by WP-Super-Cache on 2026-09-24 21:51:57 -->
375
376<!-- Compression = gzip -->

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.