Wijzigingen lezen

Diffs & voorbeelden

Een diff lezen

Schakelaar Wat het doet
Unified ↔ split Naast elkaar als je wilt vergelijken, gestapeld als je wilt lezen
Woordniveau Markeert alleen de gewijzigde tokens binnen een bewerkte regel — rood op de oude, groen op de nieuwe
Witruimte negeren Verbergt herinspringen zodat de echte wijziging bovendrijft
Terugloop (alleen gesplitste weergave) Laat lange regels teruglopen binnen hun kolom in plaats van te scrollen
Gekoppeld (gesplitst, zonder terugloop) Scrolt beide helften samen, verticaal en zijwaarts — uit scrolt elke kolom apart
⌘F Zoeken binnen de diff, met stappen naar volgende/vorige

Terugloop staat standaard uit: één regel blijft één rij, zodat beide kanten rij voor rij vergelijkbaar blijven, en elke helft horizontaal scrolt met een eigen balk. Zet het aan als je een lange regel liever leest dan achtervolgt — de prijs is dat een regel die over drie rijen terugloopt niet meer tegenover zijn tegenhanger staat. Elke schakelaar onthoudt zijn stand over bestanden en sessies heen.

Zonder terugloop scrollen de twee helften standaard gekoppeld — verticaal, wat de rijen tegenover elkaar houdt, en zijwaarts, zodat kolom 90 links boven kolom 90 rechts staat. Ontkoppel ze wanneer de kanten uit elkaar zijn gelopen — een ingesprongen blok tegenover een niet ingesprongen blok, een hernoeming die elke regel verschoof — of wanneer je twee ver uiteenliggende delen van hetzelfde bestand wilt vergelijken, en parkeer elke helft waar haar eigen inhoud staat.

Gesplitste diff met markering op woordniveau

Boven elke diff staat de semantische samenvatting — wat er veranderde, symbool voor symbool, in plaats van regel voor regel.

Beelddiffs

Gewijzigde afbeeldingen krijgen een echte vergelijking: naast elkaar, of een sleepgreep om tussen voor en na te schuiven.

Beelddiff

Wijzigingsmarge en minimap

De bestandsweergave van een working-tree-bestand — gestaged of niet, gevolgd of gloednieuw — draagt een gekleurde balk naast elke regel die is gewijzigd sinds HEAD (of de index, voor gestagede bestanden): groen voor een invoeging, blauw voor een wijziging, een kleine rode wig waar regels zijn verwijderd zonder vervanging. Klik op een balk om die wijziging te zien zonder het bestand te verlaten — de pop-up toont de verwijderde en toegevoegde regels, met volgende/vorige om alle wijzigingen in het bestand te doorlopen.

Wijzigingsmarge met een geopende pop-up, minimap rechts

De minimap, standaard uitgeschakeld, voegt een verkleind overzicht van het hele bestand toe aan de rechterrand — klik of sleep om erin te springen, zoals een scrollbalk zou doen als die ook de vorm van het bestand kon tonen. Beide zijn per-machine-instellingen onder Instellingen → Algemeen → Bestandsviewer.

Geen van beide leest geschiedenis: schakel over naar Diff, Blame of een oudere commit en de marge verdwijnt — die weergaven tonen elke wijziging al rechtstreeks.

Bekijk alles

De modus Voorbeeld rendert het bestand in plaats van de broncode te tonen: Markdown, Word (.docx), Excel (.xlsx), PDF, video, audio, afbeeldingen, en code met syntaxkleuring voor al het overige.

Markdown-voorbeeld

Apple property lists

Info.plist en *.entitlements zijn XML, en XML is niet wat iemand probeert te lezen. De preview toont in plaats daarvan het sleutel/waarde-overzicht — de vorm die Xcode's eigen plist-editor laat zien — met de nesting intact en het type van elke waarde ernaast.

Een Info.plist als sleutel/waarde-overzicht

Twee grenzen. Een binaire plist (bplist00) wordt herkend en benoemd, niet gedecodeerd — haal hem door plutil -convert xml1 als je hem hier wilt, al is een binaire plist in een repository meestal een build-artefact dat er niet in hoort. En <data>-waarden verschijnen als een aantal bytes in plaats van als base64: een blob zegt jou niets, en een provisioning profile weergegeven in een paneel dat je misschien deelt zegt iedereen anders veel te veel.

Xcode-projecten

Een project.pbxproj is één platte woordenlijst van objecten die naar elkaar verwijzen met een id, dus hem op volgorde lezen zegt bijna niets over het project. De preview volgt die verwijzingen en bouwt de drie dingen terug waarvoor je kwam: de targets met hun buildfasen, de groepenboom zoals de Xcode-navigator hem tekent, en de buildinstellingen per configuratie.

Een project.pbxproj als targets, bestandsboom en instellingen

Het leest, het bewerkt niet — niets hiervan schrijft naar het project. Wat er gebeurt als twee branches er allebei aan zitten, staat bij conflicten oplossen.

Zeer grote bestanden

Voorbeelden en de bestandsweergave laden een bestand volledig in het geheugen, dus beide weigeren bestanden boven een groottelimiet (32 MB voor voorbeelden, 16 MB voor tekst) en tonen in plaats daarvan hoe groot het bestand is. Toch laden heft de limiet voor dat ene bestand op — niets is onbereikbaar, grote ladingen zijn alleen opt-in. Bestanden en diffs van meer dan een paar duizend regels worden nog steeds volledig gerenderd, maar regels buiten beeld worden niet meer opgemaakt en getekend, zodat een gigantische lockfile-diff niet langer het geheugen van een hele laptop kost.

Een bestand boven de groottelimiet, met Toch laden

Het tabblad Bestanden

Het tabblad Bestanden in de linkerzijbalk bladert door de werkboom zelf, met statusbadges op mappen (toegevoegd / gewijzigd / verwijderd) die samenvatten wat erin zit.

Het tabblad bestanden met een voorbeeld

Mapbadges die optellen wat er binnenin veranderde

Zie ook: Semantische diff · Stagen

Deze vertaling op GitHub verbeteren