Thursday 17 August 2017

Diff Tänker Filer Är Binära Alternativ


1.7 Binära filer och tvinga textjämförelser Om diff anser att någon av de två filerna som jämförs är binär (en icke-textfil), behandlar den normalt det paret så mycket som om det sammanfattande utmatningsformatet hade valts (se kort) , och rapporterar bara att binärfilerna är olika. Detta beror på att linjevisningar inte är meningsfulla för binära filer. Detta räknas inte som problem, trots att den resulterande utmatningen inte tar upp alla skillnader. diff bestämmer om en fil är text eller binär genom att kontrollera de första bitarna i filen är det exakta antalet byte systemberoende, men det är vanligtvis flera tusen. Om varje byte i den delen av filen är icke-null, anser diff att filen är text, annars anser den att filen är binär. Ibland kanske du vill tvinga diff för att överväga att filerna ska vara text. Till exempel kan du jämföra textfiler som innehåller null tecken diff skulle felaktigt bestämma att de är icke-textfiler. Eller så kan du jämföra dokument som är i ett format som används av ett ordbehandlingssystem som använder nolltecken för att indikera särskild formatering. Du kan tvinga diff för att överväga att alla filer är textfiler och jämföra dem linje för rad, med hjälp av alternativet --text (-a). Om de filer du jämför med att använda det här alternativet inte innehåller text, kommer de förmodligen att innehålla några nya karaktärer, och diff-utgången kommer att bestå av hunks som visar skillnader mellan långa rader av vilka tecken filerna innehåller. Du kan också tvinga diff för att bara rapportera om filer skiljer sig (men inte hur). Använd alternativet - brief (-q) för detta. I operativsystem som skiljer mellan text och binära filer, läser diff normalt och skriver all data som text. Använd alternativet - binärt för att tvinga diff att läsa och skriva binär data istället. Det här alternativet har ingen effekt på ett POSIX-kompatibelt system som GNU eller traditionell Unix. Många operativsystem för persondatorer representerar dock slutet på en linje med en vagnretur följt av en ny linje. På sådana system ignorerar diff normalt dessa vagnreturer på ingången och genererar dem i slutet av varje utgångsledning, men med det binära alternativet diff behandlar varje vagnsavkastning som bara ett annat ingående tecken och genererar ingen vagnretur vid slutet av varje utgångsledning. Detta kan vara användbart vid hantering av icke-textfiler som är avsedda att bytas ut med POSIX-kompatibla system. Strip-trailing-cr orsakar diff för att behandla ingångslinjer som slutar i vagnretur följt av newline som om de slutar i vanlig ny linje. Detta kan vara användbart när man jämför text som är ofullständigt importerad från många operativsystem för persondatorer. Det här alternativet påverkar hur linjer läses, vilket i sin tur påverkar hur de jämförs och matas ut. Om du vill jämföra två filer byte med byte kan du använda cmp-programmet med alternativet --verbose (-l) för att visa värdena för varje annorlunda byte i de två filerna. Med GNU cmp. du kan också använda alternativet - b eller --print-bytes för att visa ASCII-representationen för dessa byte. Se Inbjuda cmp. för mer information. Om diff3 anser att någon av de filer som den jämför är binär (en icke-textfil), rapporterar det normalt ett fel, eftersom sådana jämförelser vanligtvis inte är användbara. diff3 använder samma test som diff för att bestämma om en fil är binär. Som med diff. Om inmatningsfilerna innehåller några icke-text-byte men annars är som textfiler kan du tvinga diff3 att överväga att alla filer är textfiler och jämföra dem line-by-line med alternativet - a eller --text. nacho4d: That39s konstigt, eftersom git shouldn39t ens vet att det finns några utökade attribut. Om du skulle kunna reproducera det skulle det vara värt att ta upp på git-postlistan. Som det är bra anpassat på vger. kernel. org listor behöver du inte prenumerera på inlägg (människor kommer att hålla dig CC39ed för svar) och är typ av förmodade att inte ge den ganska stora volymen av gitvger. kernel. org-listan. ndash Jan Hudec 28 Jul 11 ​​kl 9:34 Det betyder helt enkelt att när git inspekterar det faktiska innehållet i filen (det vet inte att någon given förlängning inte är en binär fil - du kan använda attributfilen om du vill uttrycka det explicit - se manens sidor). Efter att ha inspekterat filens innehåll har det sett saker som inte finns i grundläggande ascii-tecken. Att vara UTF16 Jag förväntar mig att det kommer att ha roliga tecken så det tycker att det är binärt. Det finns sätt att berätta git om du har internationalisering (i18n) eller utökade teckenformat för filen. Jag är inte tillräckligt med den exakta metoden för att ställa in det - du kan behöva RTFullM -) Redigera: En snabb sökning av SO fann kan-i-make-git-recognize-a-utf-16-fil-som-text som borde ge dig några ledtrådar. Du är nästan men inte helt fel. Git hade inspekterat de faktiska filerna och har sett 39funny39 tecken där. Det är dock inte quotthinkquot UTF-16 är binärt. Det är binärt, eftersom texten definieras som ASCII-baserad (det är det enda som den inbyggda diffen ger användbara resultat för) och UTF-16 är inte. Ja, det finns ett sätt att berätta för git att använda special diff för mönsterdefinierade filer (med. gitattribut). ndash Jan Hudec 28 Jul 11 ​​kl 9:27 Jag borde lägga till att 39funny characters39 betyder egentligen noll byte. ndash Jan Hudec 28 Jul 11 ​​kl 9:31 Vi har både rätt, men från olika perspektiv. Vi säger båda att quotGit inspekterar innehållet för att bestämma typ. quot Vi säger båda att för att göra git vet att den ska behandlas som UTF16 måste användaren berätta git via. gitattribut etc. ndash Philip Oakley 28 juli 11 kl 9:34 Vad är Det motsatta av att check-attr är det en set-attr. Ursprungligen sparade jag en fil som UTF-16, sedan commited och tryckte den, och nu ser BitBucket den som UTF-16, även efter att den har sparats som UTF-8 , begära och trycka på den igen. Detta gör i princip mina dragförfrågningar omöjliga att läsa eftersom granskare måste klicka på varje enskild kommentar för att lägga till kommentarer. ndash John Zabroski Jan 4 16 kl 16:15 Jag hade denna fråga där Git GUI och SourceTree behandlade JavaJS-filer som binära och sålde kunde inte se skillnad Skapa filnamn i. gitinfo-mappen med följande innehåll löst problemet Om du skulle vilja gör denna ändring för alla repositories då kan du lägga till attributfiler på följande plats HOME. configgitattributes Jag hade samma problem efter att ha redigerat en av mina filer i en ny editor. Visas den nya redigeraren använde en annan kodning (Unicode) än min gamla redigerare (UTF-8). Så jag berättade helt enkelt min nya redaktör för att spara mina filer med UTF-8 och sedan git visade mina ändringar ordentligt igen och såg det inte som en binär fil. Jag tror att problemet var helt enkelt att git inte vet hur man jämför filer med olika kodningstyper. Så kodningstypen som du använder spelar ingen roll så länge det är konsekvent. Jag testade inte det, men jag är säker på om jag bara skulle ha begått min fil med den nya Unicode-kodningen, nästa gång jag gjorde ändringar i den filen skulle det ha visat förändringarna ordentligt och inte detekterat det som binärt eftersom det sedan skulle ha jämfört två Unicode-kodade filer och inte en UTF-8-fil till en Unicode-fil. Du kan använda en app som anteckningsblock för att enkelt se och ändra kodningstypen för en textfil Öppna filen i Anteckningar och använd kodningsmenyn i verktygsfältet. Jag spenderade bara flera timmar på att gå igenom allt på den här listan och försökte träna varför ett av testprojekten i min lösning inte var att lägga till några tester för utforskaren. Det visade sig i mitt fall att på något sätt (förmodligen på grund av en dålig sammanslagning någonstans) som VS hade förlorat en referens till projektet helt och hållet. Det byggde fortfarande men jag märkte att det bara byggde avlastningarna. Jag märkte då att det inte visades upp i listan över beroenden själv, så jag tog bort och tillfogade testprojektet och alla mina tester visade sig äntligen. svarat dec 4 14 kl 14:51 Visual Studio är verkligen inte relevant här. ndash jpaugh dec 12 16 kl 14:58 Ditt svar 2017 Stack Exchange, Inc13.1 Alternativ att diff Nedan är en sammanfattning av alla alternativ som GNU diff accepterar. De flesta alternativ har två ekvivalenta namn, varav ett är ett bokstav föregås av lsquo-rsquo, och det andra är ett långt namn föregås av lsquo-rsquo. Multipla enskilda bokstäver (om de inte tar ett argument) kan kombineras till ett enda kommandoradsord: - ac motsvarar - a - c. Långa namngivna alternativ kan förkortas till ett unikt prefix av deras namn. Fästen (och) anger att ett alternativ tar ett valfritt argument. Behandla alla filer som text och jämföra dem line-by-line, även om de inte verkar vara text. Se binär. Ignorera förändringar i mängden vitt utrymme. Se White Space. Ignorera ändringar som bara sätter in eller tar bort tomma linjer. Se tomma linjer. Läs och skriv data i binärt läge. Se binär. Använd kontextutmatningsformatet och visa tre sammanhangslinjer. Se Kontextformat. Ange om du vill använda färg för att skilja olika sammanhang, till exempel rubrik, tillagda eller borttagna rader. när kan utelämnas, eller en av: ingen Använd inte färg alls. Detta är standard när inget alternativ för ndashcolor anges. auto Använd endast färg om standardutgången är en terminal. Använd alltid alltid färg. Specificera - färg och nej när motsvarar - colorauto. - C-linjer - kontextlinjer Använd kontextutmatningsformat, visa linjer (ett heltal) linjer i sammanhanget, eller tre om linjer inte anges. Se Kontextformat. För korrekt drift behöver patch normalt minst två sammanhang. För kompatibilitet stöder diff också en föråldrad alternativsyntax - linjer som har effekt när de kombineras med - c. - p. eller - u. Nya skript ska använda - U-linjer (-C-linjer) istället. Använd format för att mata ut en linjekoncern som innehåller olika linjer från båda filerna i if-then-else-format. Se Linjegruppformat. Ändra algoritmen kanske hitta en mindre uppsättning förändringar. Detta gör diff långsammare (ibland mycket långsammare). Se diff Performance. - D-namn --ifdef-namn Gör sammanslagna lsquo ifdef rsquo-formatutmatning, förutsatt att makronamnet på förprocessorn är förknippad. Se om-då-annars. Gör output som är ett giltigt ed-skript. Se redigeringsskript. Ignorera ändringar på grund av flikutbyggnad. Se White Space. Gör output som är vagt som ett ed-skript men har ändringar i den ordning de visas i filen. Se vidarebefordra ed. - F regexp --show-function-line regexp I kontext och enhetligt format, för varje honk av skillnader, visa några av de föregående föregående raden som matchar regexp. Se angivna rubriker. Jämför fil till varje operandfil kan vara en katalog. Skriv ut en sammanfattning av användningen och avsluta sedan. Kasta inte de sista linjerna i det gemensamma prefixet och de första raderna i det gemensamma suffixet. Se diff Performance. Ignorera förändringar om man anser att stora och små bokstäver motsvarar. Se Foldning av fall. - I regexp --ignore-matching-lines regexp Ignorera ändringar som bara infogar eller tar bort rader som matchar regexp. Se specificerade linjer. Ignorera fall vid jämförelse av filnamn. Till exempel kan rekursiv jämförelse av d till e jämföra innehållet i dInit och einIt. På översta nivån kan lsquo diff d inIt rsquo jämföra innehållet i dInit och inIt. Se Jämförande kataloger. Passera utmatningen via pr för att paginera den. Se pagination. - L-etikett - etikettikett Använd etikett istället för filnamnet i ramformatformatet (se Kontextformat) och enhetligt format (se enhetligt format) rubriker. Se RCS. Skriv ut endast den vänstra kolumnen av två vanliga linjer i sida vid sida format. Se sida vid sida format. Använd format för att mata ut alla ingångslinjer i if-then-else-format. Se Linjeformat. Output RCS - format diffs gillar - f förutom att varje kommando specificerar antalet rader som berörs. Se RCS. Om en fil saknas, behandla den som närvarande men tom. Se Jämförande kataloger. Använd format för att mata ut en grupp linjer som tas från bara den andra filen i if-then-else-format. Se Linjegruppformat. Använd format för att mata ut en rad som tas från bara den andra filen i if-then-else format. Se Linjeformat. Agera på symboliska länkar själva istället för vad de pekar på Två symboliska länkar anses endast vara lika när varje pekar på exakt samma namn. Använd format för att mata ut en grupp linjer som tagits från bara den första filen i if-then-else-format. Se Linjegruppformat. Använd format för att mata ut en rad som tas från bara den första filen i if-then-else-format. Se Linjeformat. Visa vilken C-funktion varje ändring är i. Se C Funktionsrubriker. Ange vilken färgpalett du vill använda när färgad utgång är aktiverad. Den är standard för lsquo rs0: hd1: ad32: de31: ln36 rsquo för röda raderade linjer, gröna läggas till linjer, cyan linjenummer, fet rubrik. Stödda funktioner är enligt följande. SGR-substrat för tillförda linjer. Standardinställningen är grön förgrund. SGR-substrat för raderade linjer. Standardinställningen är röd förgrunden. SGR-substrat för chunk header. Standardinställningen är fet i förgrunden. SGR-substrat för radnummer. Standard är cyan förgrundsinformation. Rapportera bara om filerna skiljer sig, inte detaljerna i skillnaderna. Se kortfattat. Jämför jämförbara kataloger jämfört med jämförbara kataloger. Se Jämförande kataloger. Rapportera när två filer är desamma. Se Jämförande kataloger. - S-fil - starta-filfil När du jämför kataloger börjar du med filfilen. Detta används för att återuppta en avbruten jämförelse. Se Jämförande kataloger. Använd heuristics för att snabbt hantera stora filer som har många spridna små förändringar. Se diff Performance. Stripa eventuell bakre vagnretur i slutet av en ingångsledning. Se binär. Skriv inte ut vanliga linjer i sida vid sida format. Se sida vid sida format. Utöka flikar till mellanslag i utmatningen, för att bevara inriktningen av flikar i inmatningsfilerna. Se flikar. Skriv ut en flik istället för ett mellanslag före texten på en rad i normalt eller kontextformat. Detta gör att justeringen av flikar i linjen ser normal ut. Se flikar. Antag att flikplatser ställs in för varje kolumn (standard 8) utskriftskolumner. Se flikar. Undertryck eventuella ämnen före nya linjer när du skriver ut representationen av en tom linje när du matar ut normalt, sammanhang eller enhetligt format. Se Trailing Blanks. Jämför varje operand till filfil kan vara en katalog. Använd det enhetliga utmatningsformatet och visa tre rader av sammanhang. Se enhetligt format. Använd format för att mata ut en grupp gemensamma linjer som tas från båda filerna i if-then-else-format. Se Linjegruppformat. Använd format för att mata ut en rad som är gemensam för båda filerna i if-then-else-format. Se Linjeformat. Om en första fil saknas, behandla den som närvarande men tom. Se Jämförande kataloger. - U-linjer - unified lines Använd enhetligt utmatningsformat, visa linjer (ett heltal) linjer i sammanhang, eller tre om linjer inte anges. Se enhetligt format. För korrekt drift behöver patch normalt minst två sammanhang. På äldre system stöder diff ett föråldrat alternativ - linjer som har effekt i kombination med - u. POSIX 1003.1-2001 (se Standards conformance) tillåter inte denna användning - U linjer istället. Utmatningsversionsinformation och avsluta sedan. Ignorera det vita utrymmet när man jämför linjer. Se White Space. - W kolumner - breddkolumner Utmatning i de flesta kolumner (standard 130) Skriv ut kolumner per rad i sida vid sida format. Se sida vid sida format. - x mönster - exkludera mönster När du jämför kataloger, ignorera filer och underkataloger vars basnamn matchar mönstret. Se Jämförande kataloger. - X-fil --exclude-from file När du jämför kataloger, ignorera filer och underkataloger vars basnamn matchar vilket mönster som finns i filen. Se Jämförande kataloger. Använd utmatningsformat bredvid varandra. Se sida vid sida format. Ignorera det vita utrymmet vid radänden. Se White Space.

No comments:

Post a Comment