{"id":10422,"date":"2026-09-17T07:20:00","date_gmt":"2026-09-17T05:20:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=10422"},"modified":"2026-09-09T17:08:50","modified_gmt":"2026-09-09T15:08:50","slug":"comparing-two-gtm-container-exports-normalising-before-the-diff","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/comparing-two-gtm-container-exports-normalising-before-the-diff\/","title":{"rendered":"Comparing Two GTM Container Exports: Normalising Before the Diff and What a Line Diff Cannot Show"},"content":{"rendered":"<p>Comparing two exports of the same configuration is the fastest way to find out what someone changed, and the first attempt almost always produces a result that is useless. There are several hundred differing lines, of which one matters and the rest are the file format talking to itself.<\/p>\n<p>Everything below is about the gap between those two numbers &#8211; what fills it, how to remove it, and what remains invisible even after it is gone.<\/p>\n<figure class=\"lw-diagram\">\n<img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/vergleichsebenen-en.png\" width=\"1120\" height=\"580\" loading=\"lazy\" alt=\"The same one-word change shown at line, word and character level, plus a fourth pair of lines that differ only in key order and are the same object\"><figcaption>Three levels for one change, and a fourth pair that a line comparison calls different and a parser calls identical.<\/figcaption><\/figure>\n<h2>What Fills the Gap<\/h2>\n<p>Exports are generated, and generators are not obliged to be stable. The same configuration exported twice can differ in the order of object keys, in identifiers assigned at export time, in a fingerprint that is a timestamp, and in whether the file ends with a newline. None of that is a change; all of it is a difference.<\/p>\n<table style=\"width:100%;border-collapse:collapse\">\n<thead>\n<tr>\n<th style=\"vertical-align:top\">Source of noise<\/th>\n<th>What it looks like<\/th>\n<th>How it is removed<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"vertical-align:top\">Key order<\/td>\n<td>whole blocks marked as changed<\/td>\n<td><code>jq -S .<\/code> sorts keys recursively<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align:top\">Fingerprints, timestamps<\/td>\n<td>one changed line per object<\/td>\n<td>delete the fields before comparing<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align:top\">Export-time identifiers<\/td>\n<td>every reference differs<\/td>\n<td>the same &#8211; or compare by name instead<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align:top\">Indentation<\/td>\n<td>everything differs<\/td>\n<td><code>jq<\/code> reformats both sides identically<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align:top\">Line endings<\/td>\n<td>every line differs, and looks identical<\/td>\n<td><code>dos2unix<\/code>, or the diff tool&#8217;s own option<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align:top\">Minification<\/td>\n<td>one line differs and says nothing<\/td>\n<td>reformat, then compare<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The line-endings row is the one that costs an hour, because the two lines look exactly the same on screen. A file that has been through a Windows editor differs from its origin in every single line, and every one of those differences is invisible.<\/p>\n<h2>Normalise First, Compare Second<\/h2>\n<p>The fix is a pipeline rather than a better diff tool. Both files go through the same normalisation, the volatile fields are removed, and only then are the results compared &#8211; at which point the diff contains what changed and nothing else.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>norm() {\n  jq -S 'walk(if type == \"object\"\n              then del(.fingerprint, .accountId, .containerVersionId)\n              else . end)' \"$1\"\n}\n\ndiff &lt;(norm alt.json) &lt;(norm neu.json)<\/code><\/pre>\n<p><code>walk<\/code> descends into every object, so the fields disappear wherever they occur rather than only at the top level. <code>-S<\/code> sorts the keys of every object, which removes the largest source of noise on its own. What survives both is a change someone made.<\/p>\n<h2>Three Levels, Three Different Answers<\/h2>\n<p>Line, word and character are not degrees of quality but different questions. A line comparison answers &#8220;which lines are not identical&#8221;, which is the right question for source code, where a line is roughly a statement. It is the wrong question for a JSON file with one object per line and entirely useless for a minified one, where the whole document is a single line.<\/p>\n<p>Word level compares tokens and is what makes a one-value change readable. Character level is finer than anyone needs for reading, and it is exactly what is needed when the line is long: in a minified container export, only a character comparison can point at the single boolean that flipped.<\/p>\n<h2>What No Level Can Show<\/h2>\n<p>A text comparison sees text. Which means three kinds of change stay invisible no matter how fine the granularity gets. A moved block appears as a deletion in one place and an addition in another, with nothing connecting them. A renamed variable used in twelve places appears as twelve unrelated changes rather than one intention. And a value that changed type without changing appearance &#8211; <code>\"1\"<\/code> becoming <code>1<\/code> &#8211; is a two-character difference with consequences that no amount of highlighting will convey.<\/p>\n<p>The opposite case is the one the fourth row of the diagram shows: two files that differ in every line and describe the same object. A comparison of text can only ever answer questions about text, and the question actually being asked &#8211; did the configuration change &#8211; is a question about structure.<\/p>\n<h2>What to Compare Instead When the Answer Matters<\/h2>\n<p>For anything with a schema, the honest comparison is between parsed objects rather than between files. <code>jq<\/code> can do it directly: two documents are equal or they are not, and the answer is a single boolean that is not affected by formatting, order or whitespace.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code># are they the same object at all?\njq -e --slurpfile b neu.json '. == $b[0]' alt.json &gt;\/dev\/null &amp;&amp; echo \"identical\"\n\n# which top-level keys differ?\njq -n --slurpfile a alt.json --slurpfile b neu.json \\\n  '($a[0] | keys) as $ka | ($b[0] | keys) as $kb\n   | { nur_alt: ($ka - $kb), nur_neu: ($kb - $ka) }'<\/code><\/pre>\n<p>Which leaves the line comparison the job it is good at: showing a person what someone else did, in a form that reads like the file they will edit. It answers &#8220;what should I look at&#8221; very well and &#8220;is this the same&#8221; not at all, and most of the frustration with it comes from asking it the second question.<\/p>\n<div class=\"lw-quellen\">\n<h2>Sources<\/h2>\n<ul>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/web\" target=\"_blank\" rel=\"noopener noreferrer\">Tag Manager for web<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\" target=\"_blank\" rel=\"noopener noreferrer\">Google Tag Manager documentation<\/a><\/li>\n<li><a href=\"https:\/\/docs.docker.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Docker documentation<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Two exports of the same container, three hundred differing lines and one actual change. The difference between the two numbers is entirely made of things a text comparison cannot know.<\/p>\n","protected":false},"author":1,"featured_media":15176,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[148],"tags":[91144],"class_list":["post-10422","post","type-post","status-publish","format-standard","hentry","category-web-development","tag-devops"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Comparing Two GTM Container Exports: Normalising Before the Diff and What a Line Diff Cannot Show - Lukas Wojcik - Blog<\/title>\n<meta name=\"description\" content=\"Why two exports differ in hundreds of lines without anything changing, how to normalise before comparing, and which changes no line diff can show.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/comparing-two-gtm-container-exports-normalising-before-the-diff\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Comparing Two GTM Container Exports: Normalising Before the Diff and What a Line Diff Cannot Show - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Why two exports differ in hundreds of lines without anything changing, how to normalise before comparing, and which changes no line diff can show.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/comparing-two-gtm-container-exports-normalising-before-the-diff\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-17T05:20:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10422-what-a-line-by-line-comparison-shows-n.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/comparing-two-gtm-container-exports-normalising-before-the-diff\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/comparing-two-gtm-container-exports-normalising-before-the-diff\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Comparing Two GTM Container Exports: Normalising Before the Diff and What a Line Diff Cannot Show\",\"datePublished\":\"2026-09-17T05:20:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/comparing-two-gtm-container-exports-normalising-before-the-diff\\\/\"},\"wordCount\":766,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/comparing-two-gtm-container-exports-normalising-before-the-diff\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10422-what-a-line-by-line-comparison-shows-n.png\",\"keywords\":[\"DevOps\"],\"articleSection\":[\"Web Development\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/comparing-two-gtm-container-exports-normalising-before-the-diff\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/comparing-two-gtm-container-exports-normalising-before-the-diff\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/comparing-two-gtm-container-exports-normalising-before-the-diff\\\/\",\"name\":\"Comparing Two GTM Container Exports: Normalising Before the Diff and What a Line Diff Cannot Show - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/comparing-two-gtm-container-exports-normalising-before-the-diff\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/comparing-two-gtm-container-exports-normalising-before-the-diff\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10422-what-a-line-by-line-comparison-shows-n.png\",\"datePublished\":\"2026-09-17T05:20:00+00:00\",\"description\":\"Why two exports differ in hundreds of lines without anything changing, how to normalise before comparing, and which changes no line diff can show.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/comparing-two-gtm-container-exports-normalising-before-the-diff\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/comparing-two-gtm-container-exports-normalising-before-the-diff\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/comparing-two-gtm-container-exports-normalising-before-the-diff\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10422-what-a-line-by-line-comparison-shows-n.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10422-what-a-line-by-line-comparison-shows-n.png\",\"width\":1200,\"height\":630,\"caption\":\"Comparing Two GTM Container Exports: Normalising Before the Diff and What a Line Diff Cannot Show\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/comparing-two-gtm-container-exports-normalising-before-the-diff\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Comparing Two GTM Container Exports: Normalising Before the Diff and What a Line Diff Cannot Show\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Comparing Two GTM Container Exports: Normalising Before the Diff and What a Line Diff Cannot Show - Lukas Wojcik - Blog","description":"Why two exports differ in hundreds of lines without anything changing, how to normalise before comparing, and which changes no line diff can show.","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:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/comparing-two-gtm-container-exports-normalising-before-the-diff\/","og_locale":"en_US","og_type":"article","og_title":"Comparing Two GTM Container Exports: Normalising Before the Diff and What a Line Diff Cannot Show - Lukas Wojcik - Blog","og_description":"Why two exports differ in hundreds of lines without anything changing, how to normalise before comparing, and which changes no line diff can show.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/comparing-two-gtm-container-exports-normalising-before-the-diff\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-17T05:20:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10422-what-a-line-by-line-comparison-shows-n.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/comparing-two-gtm-container-exports-normalising-before-the-diff\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/comparing-two-gtm-container-exports-normalising-before-the-diff\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Comparing Two GTM Container Exports: Normalising Before the Diff and What a Line Diff Cannot Show","datePublished":"2026-09-17T05:20:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/comparing-two-gtm-container-exports-normalising-before-the-diff\/"},"wordCount":766,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/comparing-two-gtm-container-exports-normalising-before-the-diff\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10422-what-a-line-by-line-comparison-shows-n.png","keywords":["DevOps"],"articleSection":["Web Development"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/comparing-two-gtm-container-exports-normalising-before-the-diff\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/comparing-two-gtm-container-exports-normalising-before-the-diff\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/comparing-two-gtm-container-exports-normalising-before-the-diff\/","name":"Comparing Two GTM Container Exports: Normalising Before the Diff and What a Line Diff Cannot Show - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/comparing-two-gtm-container-exports-normalising-before-the-diff\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/comparing-two-gtm-container-exports-normalising-before-the-diff\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10422-what-a-line-by-line-comparison-shows-n.png","datePublished":"2026-09-17T05:20:00+00:00","description":"Why two exports differ in hundreds of lines without anything changing, how to normalise before comparing, and which changes no line diff can show.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/comparing-two-gtm-container-exports-normalising-before-the-diff\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/comparing-two-gtm-container-exports-normalising-before-the-diff\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/comparing-two-gtm-container-exports-normalising-before-the-diff\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10422-what-a-line-by-line-comparison-shows-n.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10422-what-a-line-by-line-comparison-shows-n.png","width":1200,"height":630,"caption":"Comparing Two GTM Container Exports: Normalising Before the Diff and What a Line Diff Cannot Show"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/comparing-two-gtm-container-exports-normalising-before-the-diff\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Comparing Two GTM Container Exports: Normalising Before the Diff and What a Line Diff Cannot Show"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10422","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=10422"}],"version-history":[{"count":5,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10422\/revisions"}],"predecessor-version":[{"id":16897,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10422\/revisions\/16897"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/15176"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=10422"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=10422"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=10422"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}