YAML-diff: sammenlign to YAML-filer online
Indsæt to YAML-dokumenter og få en præcis diff side om side. Lavet til Kubernetes-manifests, GitHub Actions-workflows, Helm values og docker-compose-filer.
Hvad er YAML-diff-værktøjet?
Et gratis værktøj i browseren til at sammenligne to YAML-dokumenter. Indsæt den gamle version til venstre, den nye til højre, og forskellene fremhæves tegn for tegn. Teksten forlader aldrig din browser, hvilket er vigtigt, når du differ manifests med referencer til secrets eller interne hostnames.
Diffen kører på tegnniveau, samme motor som vores tekst-diff-værktøj bruger. Editorens YAML-tilstand håndterer syntaksfremhævning ifølge YAML 1.2.2-specifikationen, så block scalars, anchors og flow collections bliver farvet korrekt.
Har du nogensinde stirret på en diff på 400 linjer i en Helm values.yaml i en pull request og ledt efter den ene indrykningsfejl, der ødelagde charten, så er det her værktøjet, der finder den på sekunder. Det er også nyttigt, når copy-paste mellem Slack og din editor laver mellemrum om til tabs, hvilket YAML afviser.
Sådan virker YAML-diffen i praksis
Diffen kører på tegnniveau, hvorefter en semantisk oprydningsrunde grupperer fremhævningerne i meningsfulde blokke i stedet for spredte enkeltkarakterer. Indsættelser vises grønt i højre rude, sletninger rødt til venstre, og tællerne i hvert hoved siger, hvor mange forskellige redigeringer diffen fandt.
YAML har parsing-regler, der bider den, der behandler formatet som tilgivende. Indrykning er strukturel ifølge YAML 1.2.2-spec, så et enkelt forkert placeret mellemrum ændrer dokumenttræet. Tabs er forbudt som indrykning, og parseren afviser dem direkte. Implicit typing gør i YAML 1.1 det ucitterede token NO til den booleanske false, det berømte Norway problem: lister med landekoder mister Norge i stilhed. YAML 1.2 strammede reglerne, så kun true, false, null og numeriske former konverterer uden anførselstegn, men mange værktøjer parser stadig 1.1.
Har du allerede konverteret din YAML til JSON for en downstream-forbruger, tager vores JSON-diff-værktøj sig af strukturelle spørgsmål som nøgleorden og kanonikalisering. JSON er en streng delmængde af YAML 1.2, så ethvert gyldigt JSON-dokument er også gyldigt YAML: den kompatibilitet er beskrevet i specen og er grunden til, at js-yaml og libyaml begge kan round-trippe JSON uden overraskelser.
Sådan sammenligner du YAML i tre trin
To tekstruder, én diff. Ingen tilmelding, ingen upload, ingen tur til serveren.
- 1
Indsæt eller upload din YAML
Indsæt den gamle YAML til venstre, den nye til højre. Eller klik på Upload i den ene side for at åbne en .yaml- eller .yml-fil direkte. Eksempel-knappen fylder begge ruder med et lille Kubernetes-Deployment, så du først kan se værktøjet i aktion.
- 2
Tjek at indrykningen passer med din hensigt
YAML bruger kun mellemrum til indrykning, aldrig tabs. Har du indsat fra en chatklient eller en terminal, der har lavet mellemrum om til tabs, afviser parseren filen. Editoren fremhæver tabs og afsluttende blanktegn, så du fanger dem, før de vælter en deploy.
- 3
Læs diffen
Sletninger vises røde til venstre, indsættelser grønne til højre. Begge ruder ruller i takt, så du kan følge lange manifests uden at miste pladsen. Ændringstællerne i hovederne opsummerer, hvor mange forskellige redigeringer diffen fandt.
Hvornår YAML-diff er det rigtige værktøj
Sammenlign Kubernetes Deployment-specs mellem staging og prod
Kør kubectl get deployment web -o yaml i begge clusters og diff outputtet. Ofte står prod stadig med replicas: 2 og en gammel image-tag, fordi en udrulning sidst i sprintet aldrig nåede dertil, og en tekstdiff er den hurtigste måde at bekræfte det på, før du kører kubectl apply igen. Kubernetes-objektmodellen er YAML hele vejen igennem, så det er hverdagens tilfælde.
Diff GitHub Actions-workflow-YAML
Når en workflow holder op med at trigge efter et branchnavn-skift, eller et job pludselig tager 8 minutter længere, diff .github/workflows/ci.yml mod sidste grønne commit. Synderen er som regel et ændret on:-filter, en fjernet cache:-nøgle i actions/setup-node, eller en matrix-post, der stille gik fra node-version: "18" (string) til node-version: 18 (tal) og fik type checkeren til at falde over.
Gennemgå docker-compose-env-ændringer før en deploy
Diff docker-compose.yml mod versionen i main for at verificere hvilke environment:-poster du faktisk ændrede. Folk indsætter en liste nye env-variabler og glemmer, at en af dem allerede var sat under en anden service, så override stille vender et flag et andet sted. Diffen gør det åbenlyst.
Følg values.yaml for et Helm-chart over releases
Når du opgraderer et chart fra 1.8.0 til 2.0.0, så diff din values.yaml mod de nye defaults, som maintaineren har offentliggjort. Helm merger værdier nøgle for nøgle, så en omdøbt topnøgle (image.tag der flytter ind under image.repository) falder stille tilbage til chartens default. Diffen får omdøbningen frem, før helm upgrade ruller en regression ud.
Gennemgang af OpenAPI- og Swagger-YAML-skemaer
En diff af en 3.000 linjer lang openapi.yaml er ulæselig, når en kodegenerator omsorterer paths alfabetisk. Stil versionerne side om side, og den faktiske ændring dukker op: et required-felt tilføjet til et request-skema, eller et response, hvis type stille er gået fra string til integer. Lettere end at grave i en genereret SDK for at finde, hvorfor builden gik i stykker.
Ansible-playbook-diff på tværs af miljøer
Når en playbook virker i dev og fejler i prod, så diff inventory eller rollens defaults/main.yml mellem de to. En hyppig årsag er en hostvar, der aldrig blev kopieret over, eller et become: yes, der i dev sad på rollen, men i prod på en enkelt task. Diffen finder det på sekunder.
YAML hurtigreference
Et kort spørgekort til de parsing-grænsetilfælde, dette værktøj oftest henter frem. Alt forankret i YAML-specifikationen og virkelig parser-adfærd.
| Topic | What this tool does |
|---|
| Indrykning | Kun mellemrum, og antallet er strukturelt. To og fire mellemrum er begge almindelige; vælg én pr. fil og hold dig til det. YAML-overblikket på Wikipedia har en god opsummering, hvis du vil have historikken. |
|---|
| Tabs | Forbudt som indrykning ifølge spec. Tilladt inden i skalarværdier. Hvis din editor sætter en tab ind ved Enter, så indstil den til at bruge mellemrum i .yaml- og .yml-filer. |
|---|
| Anchors og aliases | &name definerer en anchor; *name refererer til den. Praktisk til at gentage store blokke som container-env-variabler eller default-service-config uden copy-paste. |
|---|
| Merge keys | <<: *base merger den refererede mapping ind i den nuværende. En YAML 1.1-funktion. De fleste parsers, inklusive libyaml, accepterer den stadig; YAML 1.2-spec droppede den. |
|---|
| Filer med flere dokumenter | Tre bindestreger (---) adskiller dokumenter i samme stream. Praktisk til at sende flere Kubernetes-objekter gennem et enkelt kubectl apply -f. ... afslutter et dokument. |
|---|
| Block scalars | | bevarer linjeskift (literal); > folder dem til mellemrum. Modifikatorerne - og + styrer afsluttende linjeskift. Brug | til shell-scripts og > til lang prosa. |
|---|
| Norway problem | Ucitterede NO, YES, ON, OFF bliver booleans i YAML 1.1. Sæt dem i anførselstegn eller brug en 1.2-parser. Se YAML-typedefinitionerne for hvilke strenge der konverteres. |
|---|
| Kodning | YAML 1.2-spec kræver UTF-8. UTF-16 er tilladt med BOM. I praksis forventer værktøjer UTF-8 uden BOM, så gem dine filer på den måde for at undgå overraskelser. |
|---|
YAML-diff: ofte stillede spørgsmål
Hjælper eller skader YAMLs følsomhed for blanktegn diffen?
YAML er følsomt for blanktegn, så en almindelig tekstdiff er allerede nyttig: enhver indrykningsændring er en strukturel ændring, og diffen fanger den. Forskellen ligger i præsentationen. YAML-tilstanden farver anchors, tags, block scalars og flow collections med syntaksfarver, så du på et øjeblik ser, om en ændring vedrører en nøgle, en strengværdi eller et listeelement. Diff-algoritmen under motorhjelmen er den samme som i vores tekstdiff-værktøj.
Hvorfor er YAML så pernittengrynet med indrykning og mellemrum?
Fordi indrykningen er det eneste, der fortæller parseren, hvilke nøgler der hører til hvilken mapping. YAML 1.2.2-spec definerer en nodes indrykningsniveau ud fra antallet af indledende mellemrum og forbyder tabs som indrykning. Et enkelt ekstra mellemrum forfremmer en nøgle til en sub-mapping. Den strenghed er prisen for et format uden krøllede parenteser og kommaer, og forklaringen på, at indrykningsfejl optræder oftere i YAML end i JSON.
Hvad er Norway problem?
Implicit typing i YAML 1.1 gør det ucitterede token NO til den booleanske false. Så en liste over landekoder, der indeholder NO for Norge, bliver i stilhed en liste, hvor en post er erstattet med false. Det samme gælder YES, ON, OFF og lignende. StrictYAML beskriver det i detaljer. Løsningen er at sætte værdien i anførselstegn ("NO") eller bruge en parser, der følger YAML 1.2 og kun konverterer true, false og null implicit.
Hvordan virker anchors, aliases og merge keys?
En anchor (&name) markerer en node, så du senere kan henvise til den med et alias (*name) og undgå gentagelser i lange filer. Merge key (<<: *name) var en YAML 1.1-udvidelse, der kopierer alle nøgler fra den refererede mapping ind i den nuværende, brugbart til at dele fælles config mellem services. Merge keys er ikke en del af YAML 1.2, men de fleste parsers, inklusive js-yaml, accepterer dem stadig af kompatibilitetshensyn. Diffen behandler anchors og aliases som ren tekst, så en omdøbt anchor vises pænt.
Kan jeg indsætte JSON i YAML-diff-værktøjet?
Ja. JSON er en streng delmængde af YAML 1.2, så ethvert gyldigt JSON-dokument er også et gyldigt YAML-dokument. Du kan blande de to, hvis du vil, og smide en flow collection i JSON-stil ind i en fil i blok-stil. Til ren JSON-arbejde har vores JSON-diff-værktøj formaterings- og valideringsknapper, der er JSON-bevidste, inklusive pretty-print og sort-keys.
Hvorfor afviser parseren min fil, når jeg bruger tabs?
Fordi YAML-spec forbyder tabs som indrykning. Fra 1.2.2-spec: "To maintain portability, tab characters must not be used in indentation." Tabs er tilladt inden i skalarværdier (en streng kan indeholde en tab), bare ikke i begyndelsen af en linje, hvor indrykningen måles. Løsningen er en hurtig find-og-erstat fra tab til to eller fire mellemrum, alt efter hvilken konvention din fil i forvejen bruger.
Privatliv og hvordan det virker
Din YAML forlader ikke din browser. Editor, syntaksfremhæver og diff kører alle på din maskine, lokalt. Ingen analytics på dit input, ingen logs, ingen tur til skyen. Formatet vi følger er YAML 1.2.2-specifikationen. For at bekræfte at intet bliver uploadet, åbn DevTools og hold øje med Network-fanen, mens du sammenligner.