{"id":10426,"date":"2026-09-17T18:10:00","date_gmt":"2026-09-17T16:10:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=10426"},"modified":"2026-09-09T17:09:09","modified_gmt":"2026-09-09T15:09:09","slug":"porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\/","title":{"rendered":"Por\u00f3wnywanie dw\u00f3ch eksport\u00f3w kontenera GTM: normalizacja przed diffem i czego nie pokazuje por\u00f3wnanie wierszami"},"content":{"rendered":"<p>Por\u00f3wnanie dw\u00f3ch eksport\u00f3w tej samej konfiguracji to najszybsza droga do ustalenia, co kto\u015b zmieni\u0142, a pierwsza pr\u00f3ba niemal zawsze daje wynik bezu\u017cyteczny. To kilkaset r\u00f3\u017cni\u0105cych si\u0119 wierszy, z kt\u00f3rych liczy si\u0119 jeden, a reszta to format pliku rozmawiaj\u0105cy sam ze sob\u0105.<\/p>\n<p>Wszystko, co nast\u0119puje, dotyczy odst\u0119pu mi\u0119dzy tymi dwiema liczbami &#8211; czym jest wype\u0142niony, jak znika i co pozostaje niewidoczne r\u00f3wnie\u017c potem.<\/p>\n<figure class=\"lw-diagram\">\n<img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/vergleichsebenen-pl.png\" width=\"1120\" height=\"580\" loading=\"lazy\" alt=\"Ta sama zmiana jednego s\u0142owa pokazana na poziomie wiersza, s\u0142owa i znaku, a do tego czwarta para wierszy r\u00f3\u017cni\u0105ca si\u0119 wy\u0142\u0105cznie kolejno\u015bci\u0105 kluczy i b\u0119d\u0105ca tym samym obiektem\"><figcaption>Trzy poziomy dla jednej zmiany i czwarta para, kt\u00f3r\u0105 por\u00f3wnanie wierszami nazywa r\u00f3\u017cn\u0105, a parser identyczn\u0105.<\/figcaption><\/figure>\n<h2>Czym wype\u0142niony jest ten odst\u0119p<\/h2>\n<p>Eksporty s\u0105 generowane, a generatory do niczego nie s\u0105 zobowi\u0105zane. Ta sama konfiguracja wyeksportowana dwukrotnie mo\u017ce r\u00f3\u017cni\u0107 si\u0119 kolejno\u015bci\u0105 kluczy obiekt\u00f3w, identyfikatorami nadawanymi przy eksporcie, odciskiem b\u0119d\u0105cym znacznikiem czasu i tym, czy plik ko\u0144czy si\u0119 z\u0142amaniem wiersza. Nic z tego nie jest zmian\u0105; wszystko z tego jest r\u00f3\u017cnic\u0105.<\/p>\n<table style=\"width:100%;border-collapse:collapse\">\n<thead>\n<tr>\n<th style=\"vertical-align:top\">\u0179r\u00f3d\u0142o szumu<\/th>\n<th>Jak wygl\u0105da<\/th>\n<th>Jak znika<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"vertical-align:top\">Kolejno\u015b\u0107 kluczy<\/td>\n<td>ca\u0142e bloki uchodz\u0105 za zmienione<\/td>\n<td><code>jq -S .<\/code> sortuje klucze rekurencyjnie<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align:top\">Odciski, znaczniki czasu<\/td>\n<td>jeden zmieniony wiersz na obiekt<\/td>\n<td>usun\u0105\u0107 te pola przed por\u00f3wnaniem<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align:top\">Identyfikatory nadane przy eksporcie<\/td>\n<td>ka\u017cde odwo\u0142anie si\u0119 r\u00f3\u017cni<\/td>\n<td>tak samo &#8211; albo por\u00f3wnywa\u0107 po nazwach<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align:top\">Wci\u0119cia<\/td>\n<td>r\u00f3\u017cni si\u0119 wszystko<\/td>\n<td><code>jq<\/code> formatuje obie strony jednakowo<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align:top\">Zako\u0144czenia wierszy<\/td>\n<td>r\u00f3\u017cni si\u0119 ka\u017cdy wiersz i wygl\u0105da tak samo<\/td>\n<td><code>dos2unix<\/code> albo opcja narz\u0119dzia por\u00f3wnuj\u0105cego<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align:top\">Minifikacja<\/td>\n<td>r\u00f3\u017cni si\u0119 jeden wiersz i nic nie m\u00f3wi<\/td>\n<td>sformatowa\u0107 od nowa, potem por\u00f3wna\u0107<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Wiersz o zako\u0144czeniach wierszy kosztuje godzin\u0119, bo oba wiersze wygl\u0105daj\u0105 na ekranie dok\u0142adnie tak samo. Plik, kt\u00f3ry przeszed\u0142 przez edytor na Windowsie, r\u00f3\u017cni si\u0119 od \u017ar\u00f3d\u0142a w ka\u017cdym pojedynczym wierszu, a ka\u017cda z tych r\u00f3\u017cnic jest niewidoczna.<\/p>\n<h2>Najpierw normalizacja, potem por\u00f3wnanie<\/h2>\n<p>Zaradzeniem jest potok przetwarzania, a nie lepsze narz\u0119dzie por\u00f3wnuj\u0105ce. Oba pliki przechodz\u0105 przez t\u0119 sam\u0105 normalizacj\u0119, pola ulotne zostaj\u0105 usuni\u0119te i dopiero potem por\u00f3wnuje si\u0119 wyniki &#8211; wtedy por\u00f3wnanie zawiera to, co si\u0119 zmieni\u0142o, i nic poza tym.<\/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 stary.json) &lt;(norm nowy.json)<\/code><\/pre>\n<p><code>walk<\/code> schodzi do ka\u017cdego obiektu, pola znikaj\u0105 wi\u0119c wsz\u0119dzie, gdzie wyst\u0119puj\u0105, a nie tylko na najwy\u017cszym poziomie. <code>-S<\/code> sortuje klucze ka\u017cdego obiektu i ju\u017c samo to usuwa najwi\u0119ksze \u017ar\u00f3d\u0142o szumu. Co przetrwa oba, jest zmian\u0105, kt\u00f3r\u0105 kto\u015b wprowadzi\u0142.<\/p>\n<h2>Trzy poziomy, trzy r\u00f3\u017cne odpowiedzi<\/h2>\n<p>Wiersz, s\u0142owo i znak to nie klasy jako\u015bci, tylko r\u00f3\u017cne pytania. Por\u00f3wnanie wierszami odpowiada, kt\u00f3re wiersze nie s\u0105 identyczne, a to pytanie w\u0142a\u015bciwe dla kodu \u017ar\u00f3d\u0142owego, gdzie wiersz to mniej wi\u0119cej jedna instrukcja. Jest pytaniem niew\u0142a\u015bciwym dla pliku JSON z jednym obiektem na wiersz i ca\u0142kiem bezu\u017cytecznym dla zminifikowanego, w kt\u00f3rym ca\u0142y dokument jest jednym wierszem.<\/p>\n<p>Poziom s\u0142owa por\u00f3wnuje cz\u0142ony i czyni zmian\u0119 jednej warto\u015bci czyteln\u0105. Poziom znaku jest drobniejszy, ni\u017c do czytania potrzeba, i jest dok\u0142adnie tym, czego trzeba, gdy wiersz jest d\u0142ugi: w zminifikowanym eksporcie kontenera tylko por\u00f3wnanie znakami wska\u017ce ten jeden przewr\u00f3cony znacznik logiczny.<\/p>\n<h2>Czego nie poka\u017ce \u017caden poziom<\/h2>\n<p>Por\u00f3wnanie tekstu widzi tekst. Trzy rodzaje zmian pozostaj\u0105 przez to niewidoczne, bez wzgl\u0119du na drobiazgowo\u015b\u0107 rozdzielczo\u015bci. Przeniesiony blok pojawia si\u0119 jako usuni\u0119cie w jednym miejscu i dodanie w drugim, bez niczego, co by je \u0142\u0105czy\u0142o. Przemianowana zmienna wyst\u0119puj\u0105ca w dwunastu miejscach pojawia si\u0119 jako dwana\u015bcie osobnych zmian zamiast jednego zamiaru. A warto\u015b\u0107, kt\u00f3ra zmieni\u0142a typ, nie zmieniaj\u0105c wygl\u0105du &#8211; z <code>\"1\"<\/code> na <code>1<\/code> &#8211; jest r\u00f3\u017cnic\u0105 dw\u00f3ch znak\u00f3w o skutkach, kt\u00f3rych \u017cadne wyr\u00f3\u017cnienie nie przeka\u017ce.<\/p>\n<p>Przypadek odwrotny stoi w czwartym wierszu diagramu: dwa pliki r\u00f3\u017cni\u0105ce si\u0119 w ka\u017cdym wierszu i opisuj\u0105ce ten sam obiekt. Por\u00f3wnanie tekstu potrafi odpowiada\u0107 wy\u0142\u0105cznie na pytania o tekst &#8211; a pytanie faktycznie zadawane, czy konfiguracja si\u0119 zmieni\u0142a, jest pytaniem o struktur\u0119.<\/p>\n<h2>Co por\u00f3wnywa\u0107 zamiast tego, gdy zale\u017cy na odpowiedzi<\/h2>\n<p>Przy wszystkim, co ma schemat, uczciwym por\u00f3wnaniem jest to mi\u0119dzy roz\u0142o\u017conymi obiektami, a nie mi\u0119dzy plikami. <code>jq<\/code> potrafi to wprost: dwa dokumenty s\u0105 r\u00f3wne albo nie s\u0105, a odpowiedzi\u0105 jest pojedyncza warto\u015b\u0107 logiczna, kt\u00f3rej nie dotyka formatowanie, kolejno\u015b\u0107 ani bia\u0142y znak.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code># czy to w og&oacute;le ten sam obiekt?\njq -e --slurpfile b nowy.json '. == $b[0]' stary.json &gt;\/dev\/null &amp;&amp; echo \"identyczne\"\n\n# kt&oacute;re klucze najwy&#380;szego poziomu si&#281; r&oacute;&#380;ni&#261;?\njq -n --slurpfile a stary.json --slurpfile b nowy.json \\\n  '($a[0] | keys) as $ka | ($b[0] | keys) as $kb\n   | { tylko_stary: ($ka - $kb), tylko_nowy: ($kb - $ka) }'<\/code><\/pre>\n<p>Por\u00f3wnaniu wierszami zostaje przez to zadanie, w kt\u00f3rym jest dobre: pokaza\u0107 cz\u0142owiekowi, co zrobi\u0142 kto\u015b inny, w postaci czytaj\u0105cej si\u0119 jak plik, kt\u00f3ry b\u0119dzie edytowa\u0142. Bardzo dobrze odpowiada, na co spojrze\u0107, i wcale nie odpowiada, czy co\u015b jest tym samym &#8211; a wi\u0119kszo\u015b\u0107 irytacji nim bierze si\u0119 z zadawania mu tego drugiego pytania.<\/p>\n<div class=\"lw-quellen\">\n<h2>\u0179r\u00f3d\u0142a<\/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>Dwa eksporty tego samego kontenera, trzysta r\u00f3\u017cni\u0105cych si\u0119 wierszy i jedna faktyczna zmiana. R\u00f3\u017cnic\u0119 mi\u0119dzy tymi liczbami wype\u0142niaj\u0105 w ca\u0142o\u015bci rzeczy, kt\u00f3rych por\u00f3wnanie tekstu wiedzie\u0107 nie mo\u017ce.<\/p>\n","protected":false},"author":1,"featured_media":15178,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[152],"tags":[92229],"class_list":["post-10426","post","type-post","status-publish","format-standard","hentry","category-tworzenie-stron-internetowych","tag-devops-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Por\u00f3wnywanie dw\u00f3ch eksport\u00f3w kontenera GTM: normalizacja przed diffem i czego nie pokazuje por\u00f3wnanie wierszami - Lukas Wojcik - Blog<\/title>\n<meta name=\"description\" content=\"Dlaczego dwa eksporty r\u00f3\u017cni\u0105 si\u0119 w setkach wierszy, cho\u0107 nic si\u0119 nie zmieni\u0142o, i kt\u00f3rych zmian nie poka\u017ce \u017cadne por\u00f3wnanie wierszami.\" \/>\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\/pl\/tworzenie-stron-internetowych\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Por\u00f3wnywanie dw\u00f3ch eksport\u00f3w kontenera GTM: normalizacja przed diffem i czego nie pokazuje por\u00f3wnanie wierszami - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Dlaczego dwa eksporty r\u00f3\u017cni\u0105 si\u0119 w setkach wierszy, cho\u0107 nic si\u0119 nie zmieni\u0142o, i kt\u00f3rych zmian nie poka\u017ce \u017cadne por\u00f3wnanie wierszami.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-17T16:10:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10426-co-pokazuje-porownanie-wierszami-a-c-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\\\/pl\\\/tworzenie-stron-internetowych\\\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Por\u00f3wnywanie dw\u00f3ch eksport\u00f3w kontenera GTM: normalizacja przed diffem i czego nie pokazuje por\u00f3wnanie wierszami\",\"datePublished\":\"2026-09-17T16:10:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\\\/\"},\"wordCount\":826,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10426-co-pokazuje-porownanie-wierszami-a-c-n.png\",\"keywords\":[\"DevOps\"],\"articleSection\":[\"Tworzenie stron internetowych\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\\\/\",\"name\":\"Por\u00f3wnywanie dw\u00f3ch eksport\u00f3w kontenera GTM: normalizacja przed diffem i czego nie pokazuje por\u00f3wnanie wierszami - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10426-co-pokazuje-porownanie-wierszami-a-c-n.png\",\"datePublished\":\"2026-09-17T16:10:00+00:00\",\"description\":\"Dlaczego dwa eksporty r\u00f3\u017cni\u0105 si\u0119 w setkach wierszy, cho\u0107 nic si\u0119 nie zmieni\u0142o, i kt\u00f3rych zmian nie poka\u017ce \u017cadne por\u00f3wnanie wierszami.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10426-co-pokazuje-porownanie-wierszami-a-c-n.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10426-co-pokazuje-porownanie-wierszami-a-c-n.png\",\"width\":1200,\"height\":630,\"caption\":\"Por\u00f3wnywanie dw\u00f3ch eksport\u00f3w kontenera GTM: normalizacja przed diffem i czego nie pokazuje por\u00f3wnanie wierszami\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Por\u00f3wnywanie dw\u00f3ch eksport\u00f3w kontenera GTM: normalizacja przed diffem i czego nie pokazuje por\u00f3wnanie wierszami\"}]},{\"@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":"Por\u00f3wnywanie dw\u00f3ch eksport\u00f3w kontenera GTM: normalizacja przed diffem i czego nie pokazuje por\u00f3wnanie wierszami - Lukas Wojcik - Blog","description":"Dlaczego dwa eksporty r\u00f3\u017cni\u0105 si\u0119 w setkach wierszy, cho\u0107 nic si\u0119 nie zmieni\u0142o, i kt\u00f3rych zmian nie poka\u017ce \u017cadne por\u00f3wnanie wierszami.","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\/pl\/tworzenie-stron-internetowych\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\/","og_locale":"en_US","og_type":"article","og_title":"Por\u00f3wnywanie dw\u00f3ch eksport\u00f3w kontenera GTM: normalizacja przed diffem i czego nie pokazuje por\u00f3wnanie wierszami - Lukas Wojcik - Blog","og_description":"Dlaczego dwa eksporty r\u00f3\u017cni\u0105 si\u0119 w setkach wierszy, cho\u0107 nic si\u0119 nie zmieni\u0142o, i kt\u00f3rych zmian nie poka\u017ce \u017cadne por\u00f3wnanie wierszami.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-17T16:10:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10426-co-pokazuje-porownanie-wierszami-a-c-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\/pl\/tworzenie-stron-internetowych\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Por\u00f3wnywanie dw\u00f3ch eksport\u00f3w kontenera GTM: normalizacja przed diffem i czego nie pokazuje por\u00f3wnanie wierszami","datePublished":"2026-09-17T16:10:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\/"},"wordCount":826,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10426-co-pokazuje-porownanie-wierszami-a-c-n.png","keywords":["DevOps"],"articleSection":["Tworzenie stron internetowych"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\/","name":"Por\u00f3wnywanie dw\u00f3ch eksport\u00f3w kontenera GTM: normalizacja przed diffem i czego nie pokazuje por\u00f3wnanie wierszami - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10426-co-pokazuje-porownanie-wierszami-a-c-n.png","datePublished":"2026-09-17T16:10:00+00:00","description":"Dlaczego dwa eksporty r\u00f3\u017cni\u0105 si\u0119 w setkach wierszy, cho\u0107 nic si\u0119 nie zmieni\u0142o, i kt\u00f3rych zmian nie poka\u017ce \u017cadne por\u00f3wnanie wierszami.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10426-co-pokazuje-porownanie-wierszami-a-c-n.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10426-co-pokazuje-porownanie-wierszami-a-c-n.png","width":1200,"height":630,"caption":"Por\u00f3wnywanie dw\u00f3ch eksport\u00f3w kontenera GTM: normalizacja przed diffem i czego nie pokazuje por\u00f3wnanie wierszami"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/porownywanie-dwoch-eksportow-kontenera-gtm-normalizacja-przed-diffem\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Por\u00f3wnywanie dw\u00f3ch eksport\u00f3w kontenera GTM: normalizacja przed diffem i czego nie pokazuje por\u00f3wnanie wierszami"}]},{"@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\/10426","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=10426"}],"version-history":[{"count":5,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10426\/revisions"}],"predecessor-version":[{"id":16899,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10426\/revisions\/16899"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/15178"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=10426"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=10426"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=10426"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}