Om du använder Git för att samarbeta med andra på GitHub, se till att Git är korrekt konfigurerat för att hantera linjeändringar. Varje gång du trycker på Retur på tangentbordet sätter du faktiskt en osynlig karaktär som heter en linjeändning. Historiskt har olika operativsystem hanterat linjeländningar annorlunda. När du visar ändringar i en fil hanterar Git linjeändringar på egen väg. Eftersom du samarbetar om projekt med Git och GitHub kan Git producera oväntade resultat om du till exempel arbetar med en Windows-maskin och din medarbetare har gjort en förändring i OS X. Globala inställningar för radändringar Git config core. autocrlf-kommandot används för att ändra hur Git hanterar linjeändringar. Det tar ett enda argument. På OS X skickar du helt enkelt inmatning till konfigurationen. Till exempel: På Windows passerar du helt enkelt rätt till konfigurationen. Till exempel: På Linux passerar du helt enkelt inmatning till konfigurationen. Till exempel: På OS X och Linux vill du vanligtvis passera inmatning för den här inställningen. På Windows vill du vanligtvis använda sant. Till exempel: Förvaringsinställningar Alternativt kan du konfigurera hur Git hanterar linjeändringar på ett varuhus genom att konfigurera en särskild. gitattributes-fil. Den här filen är engagerad i förvaret och överstyrar en persons core. autocrlf-inställning, vilket säkerställer ett enhetligt beteende för alla användare, oavsett deras Git-inställningar. Fördelen med en. gitattributes-fil är att dina linjekonfigurationer är kopplade till ditt förråd. Du behöver inte oroa dig för huruvida samarbetspartners har samma linjeavslutande inställningar som du gör..Gitattributen filen måste skapas i roten av förvaret och begås som någon annan fil. Här är ett exempel på filen i GitHub Developers Guide. En. gitattributesfil ser ut som ett bord med två kolumner: Till vänster är filnamnet för Git att matcha. Till höger är den raden som slutar konfigurationen som Git ska använda för dessa filer. Heres ett exempel. gitattributes file. Du kan använda den som en mall för dina repositories: Du märker att filer matchas -.c..sln..png -, åtskilda av ett mellanslag, sedan ges en inställning - text. text eolcrlf. binär. Tja gå över några möjliga inställningar nedan. textauto git hanterar filerna på vad som helst som det tycker är bäst. Detta är ett bra standardalternativ. text eolcrlf Git kommer alltid att konvertera linjeändringar till CRLF vid kassan. Du bör använda detta för filer som måste behålla CRLF-ändringar, även på OSX eller Linux. Till exempel, här är ett Windows-projekt som verkställer CRLF-lineändringar. text eollf Git kommer alltid att konvertera linjeändringar till LF vid kassan. Du bör använda detta för filer som måste behålla LF-änden, även på Windows. Till exempel, här är ett projekt som verkställer LF-linjeändringar. binär Git kommer att förstå att de angivna filerna inte är text, och det borde inte försöka ändra dem. Den binära inställningen är också ett alias för - text-diff. Uppdatera ett förråd efter ändrad linjeändring Efter att du har ställt in core. autocrlf-alternativet och begått en. gitattributes-fil kan du upptäcka att Git vill begå filer som du inte har ändrat. Vid denna tidpunkt är Git angelägen om att ändra linjens slut på varje fil för dig. Det bästa sättet att automatiskt konfigurera dina repositorys linjeändringar är att först säkerhetskopiera dina filer med Git, radera alla filer i ditt repository (utom. git-katalogen) och sedan återställa filerna på en gång. Spara dina nuvarande filer i Git, så att inget av ditt arbete går förlorat. Ta bort alla filer från Gits index. Skriv om Git-indexet för att hämta alla nya radändringar. Lägg till alla dina ändrade filer tillbaka, och förbered dem för ett åtagande. Det här är din chans att inspektera vilka filer, om några, var oförändrade. Förbind ändringarna till ditt förråd. Jag har observerat CRLF-problem efter att ha sammanfogat buntar från min kollega. Ibland blandades linjer med LF i källorna, förmodligen de som slogs samman. Därför har vi bestämt oss för att lägga till. gitattributes filen med följande innehåll (kommentarer borttagna): Nu ser jag det märkliga beteendet. Jag kan se mycket modifierad. filer (dvs unstaged) som inte borde finnas där. Jag försökte git reset - hard. men filerna har fortfarande samma status. Jag försökte klona förvaret igen - samma resultat. Jag har git version 1.7.11.msysgit.0 installerad från Git-1.7.11-preview20120620.exe nedladdad som nuvarande version för Windows. Vad ska jag mer försöka Det är textauto-inställning i. gitattributes som orsakar problemet. Du kan ta bort det och leva lyckligt någonsin efter, men du kan ha filer med linjekoder som inte är repo-standard eller till och med filer med flera olika linjestyckande kodningar (dvs. både LF och CRLF och även CR) i ditt repo. Varför detta händer (detaljer) När git checkar ut en fil som-är, på vilken den kommer att modifiera linjeändringar på addcommit. Filen är faktiskt inte ändrad än, men git anser det redan som modifierat, eftersom det kommer att bli. på grund av repoens inställningar. På något sätt fungerar det lite konstigt med git. Till exempel fungerar git reset - hard ibland och ibland inte, kanske beroende på dina inställningar. Eller om du går in i dina. gitattributes och markerar förlängningen som binär, försvinner den ändrade filen magiskt: Effekten stannar även efter att du har avlägsnat binärmarkeringen, även efter att du gjort git reset - hård igen så det kan vara en git bugg eller git caching problem. Gör git - rm på filen och gör sedan git reset - hård återställer den modifierade markeringen. Så här fixar du det Vi antar här att du vill behålla din textauto-inställning så att git varnar dig för inkonsekventa linjestyckningar i olika textfiler nu och i framtiden. Om så är fallet, välj din metod: Alternativ 0. Temporärt lura git från markeringsfiler som modifierat. Ändra. gitattributes. kommentera textauto. spara git-status (det här steget behövs för att få git record ändringar i. gitattributes) git reset --hard (det här kommer att återställa textauto och även nämna några ändringar i din arbetsmapp, om du har gjort något). Detta brukar fungera (utom i kanske störst av fallen). Det skjuter också upp problemet, vilket sannolikt kommer att dyka upp senare vid något tillfälle, eftersom linjeländningarna fortfarande inte har normaliserats. Det här alternativet är bra när du måste spola tillbaka ett tidigare åtagande som inte har normaliserats, som om det är en rebase eller något annat git-arbete där du vet att befintliga följande fördrag kommer att normalisera radändelserna, men git klagar över ändrade filer som nu förhindrar dig från att fortsätta. Så använd i grunden denna metod när du behöver git för att stänga av och ignorera ändrade filer som verkligen inte har modifierats för ditt specifika sammanhang. Alternativ 1 . Enkel slutanvändarfix Om du bara har några filer ska du se till att. gitattributen och core. autocrlf är inställda och gör bara en git addcommit och du bör inte se problemet igen. Filerna kommer att konverteras till önskad linjeändring och lagras i din repo, som anges i din konfiguration. Denna förpliktelse kommer att lagras i din repo eftersom hela filen har ändrats, eftersom varje rad kommer att ha sina ändringar i linjen ändrad. För några filer i en större eller open-source repo är det bra. Var noga med att slå samman eller kirsebärplocka som engagerar sig i alla dina filialer, eftersom problemet kommer att finnas i alla filialer som hade dessa filer tills du fixar det. Förresten är det här där du kan använda alternativ 0. Om du växlar till en oförgrenad filial, och det klagar, kör alternativ 0, gör sedan fixen (fusion eller körsbärsval). VIKTIGT: Om du går till den här vägen för alternativ 1, se till att konvertera de ändrade filerna korrekt. git kanske inte gör det för dig som du förväntar dig, så gör det själv innan du begår det, dvs använd det här: Konvertera newline-formatering från Mac till Windows Orsaken till att git kan vara förvirrad är att jag har sett filer som har alla tre CR, LF - och CRLF-linjeformatering i dem. Nuke dem i ditt föredragna format själv innan du begår. Alternativ 2. Avancerad mekanik git historia omskrivning fix: Om du har en mer privat repo och är inte rädd att skriva om historien, gå och se här: git ser hela filen som en linje på grund av mac line ändringar Detta kommer att skriva om hela repo och bli av med någon linje slutar Utfärdar var som helst på alla träd, grenar, för alltid Var noga med att inkludera alla eventuella besvärliga textfiltillägg som du kanske vill normalisera, annars kan de komma upp senare. I mitt fall gjorde jag alternativ 2 som jag hade att göra med i många filer som slutade problem i många grenar. Men då hade jag några oväntade tillägg som visade sig att jag inte normaliserade, och bara gjorde alternativ 1, eftersom jag bara missade 5-6 filer. Git: Hantera linjeändringar 8211-lösning Om du utvecklar på en plattform och inte delar din kod , du kommer inte ha problem med linjens slut. Men på multiplatform utvecklat projekt kan du få problem med olika linjeändringar 8211 Windows, Linux och Mac. Som en lösning har Git möjlighet att göra linjens slutningar konsekventa. För att ställa in din miljö ställer du in globala Git-inställningar först: Varje repo kan ha olika krav på linjeländningarna, så för varje repo kan du ange radändelserna. I lagringsmappen körs: För att vara mer konsekvent och kunna ange linjen som slutar för olika filer av förlängningen kan du använda. gitattributes-filen. Filen är förbunden med förvaret och kommer att åsidosätta utvecklarens inställning..Gitattributen filen ska skapas i roten av förvaret och begås i repo som någon annan fil. Efter att you8217ve har ställt in core. autocrlf-alternativet och skapat en. gitattributes-fil kan det hända att git vill begå filer som you8217ve inte har ändrats. Detta beror på att git vill normalisera linjemålningen för dig. Se till att you8217ve har gjort något arbete innan du gör det, eller det kommer att gå vilse. Lämna ett svar Avbryt svar KategorierGitattribut (5) Manuell sida Om core. safecrlf är satt till eller varning, verifierar Git om omvandlingen är reversibel för den aktuella inställningen av core. autocrlf. För true, Git avvisar irreversibla omvandlingar för att varna, skriver Git en varning men accepterar en irreversibel omvandling. Säkerheten triggar för att förhindra en sådan omvandling som gjorts till filerna i arbetsträdet, men det finns några undantag. Även om 8230 git lägger till sig inte rörande filerna i arbetet träd, skulle nästa utcheckning så att säkerhetsutlösare git gäller för att uppdatera en textfil med en korrigeringsfil beröra filerna i arbetsträdet men operationen handlar om textfiler och CRLF-omvandling handlar om att fastställa linjens slutliga inkonsekvenser, så att säkerhetsnivån inte utlöser git diff själv inte berör filerna i arbetsträdet, det körs ofta för att inspektera de förändringar du tänker lägga till nästa git-tillägg. För att fånga potentiella problem tidigt utlöser säkerheten. När attributet ident är inställt för en sökväg, ersätter Git ID i blob-objektet med Id:. följt av det 40-karaktärs hexadecimala blob-objektnamnet, följt av ett dollar tecken vid kassan. Varje bytesekvens som börjar med Id: och slutar med i arbetsbordsfilen ersätts med ID vid incheckningen. Ett filterattribut kan ställas in på ett strängvärde som heter en filterdrivrutin som anges i konfigurationen. En filterdrivrutin består av ett rent kommando och ett smudge-kommando, som kan lämnas ospecificerat. Vid utcheckningen kommer kommandot att mata blobobjektet från sin standardinmatning när standardkommandot anges, och standardutgången används för att uppdatera arbetsbordsfilen. På samma sätt används det rena kommandot för att konvertera innehållet i worktree-filen vid incheckningen. En användning av innehållsfiltrering är att massera innehållet i en form som är mer lämplig för plattformen, filsystemet och användaren. För det här driftsättet är nyckelfrasen här mer bekväm och gör inte något oanvändbart till användbar. Med andra ord är avsikten att om någon förkastar definitionen av filterdrivrutinen eller inte har ett lämpligt filterprogram, ska projektet fortfarande vara användbart. En annan användning av innehållsfiltrering är att lagra innehållet som inte kan användas direkt i förvaret (t. ex. en UUID som refererar till det sanna innehållet som lagras utanför Git eller ett krypterat innehåll) och göra det till en användbar form vid utcheckningen (t. ex. nedladdning det externa innehållet, eller dekryptera det krypterade innehållet). Dessa två filter beter sig olika, och som standard tas ett filter som det förra och masserar innehållet till mer bekväm form. En saknad filterdriverdefinition i config eller en filterdrivrutin som går ut med en status som inte är noll, är inte ett fel men gör filtret en no-op passthru. Du kan förklara att ett filter vänder ett innehåll som i sig är oanvändbart till ett användbart innehåll genom att ställa in filter. ltdrivergt. required konfigurationsvariabeln till sann. Till exempel, i. gitattributes, skulle du tilldela filterattributet för sökvägar. Då skulle du definiera en filter. indent. clean och filter. indent. smudge konfiguration i din. gitconfig för att ange ett par kommandon för att ändra innehållet i C-program när källfilerna är markerade (ren körs) och checkas ut ingen ändring görs eftersom kommandot är katt). För bästa resultat ska ren inte ändra dess produktion ytterligare om den körs två gånger (clean8594clean ska motsvara renheten), och flera smetkommandon bör inte ändra ren s-utmatning (smudge8594smudge8594clean ska motsvara renheten). Se avsnittet om sammanslagning nedan. Indentfiltret är välbeteende i detta avseende: det kommer inte att ändra inmatning som redan är korrekt inryckt. I det här fallet betyder bristen på ett fläckfilter att rentfiltret måste acceptera sin egen utgång utan att ändra den. Om ett filter måste lyckas för att göra det lagrade innehållet användbart, kan du förklara att filtret är nödvändigt. i konfigurationen: Sekvens f på filterkommandoraden ersätts med namnet på filen filtret arbetar på. Ett filter kan använda detta vid byte av nyckelord. Till exempel: Observera att f är namnet på sökvägen som bearbetas. Beroende på vilken version som filtreras, kanske den motsvarande filen på disken inte existerar, eller kan ha olika innehåll. Så, smudge och rena kommandon ska inte försöka komma åt filen på disken, men fungerar bara som filter på innehållet som tillhandahålls dem på standardinmatning. Samverkan mellan checkincheckout-attribut I rutan för incheckningsrutan konverteras arbetsbordsfilen först med filterdrivrutinen (om den är specificerad och motsvarande drivrutin definierad), sedan bearbetas resultatet med ident (om det anges) och sedan slutligen med text (om, om specificerad och tillämplig). I rutan för utcheckning kodas blobinnehållet först med text. och sedan ident och matas för att filtrera. Sammanslagning av filialer med olika attribut för checkincheckout Om du har lagt till attribut på en fil som orsakar att det kanoniska arkivformatet för den filen ändras, till exempel att lägga till ett cleansmudge-filter eller texteolident-attribut, sammanfogar allt som attributet inte är på plats normalt orsaka sammanfogningskonflikter . För att förhindra dessa onödiga sammanfogningskonflikter kan Git få veta att man kör en virtuell utcheckning och incheckningen av alla tre etapper i en fil när man löser en trevägssammanställning genom att ställa in konfigurationsvariabeln. Detta förhindrar ändringar som orsakas av incheckningsomvandling från att orsaka falska sammanfogningskonflikter när en konverterad fil slås samman med en oförändrad fil. Så länge som en smudge8594clean resulterar i samma resultat som en ren även på filer som redan är smudda, löser denna strategi automatiskt alla filterrelaterade konflikter. Filter som inte fungerar på detta sätt kan orsaka ytterligare sammanfogningskonflikter som måste lösas manuellt. Generera diff-text Attributets diff påverkar hur Git genererar diffs för specifika filer. Det kan berätta för Git om du vill skapa en textpatch för sökvägen eller att behandla sökvägen som en binär fil. Det kan också påverka vilken linje som visas på hunkhuvudet - k, ln, m line, berätta för Git att använda ett externt kommando för att generera diffen, eller fråga Git om att konvertera binära filer till ett textformat innan generering av diff. En väg som diff attributet är inställt behandlas som text, även om de innehåller byte värden som normalt inte visas i textfiler, till exempel NUL. En väg till vilken diff attributet är avstängd kommer att generera binära filer skiljer sig (eller en binär patch om binära korrigeringar är aktiverade). En väg som diff attributet är ospecificerad först får dess innehåll inspekteras och om det ser ut som text och är mindre än core. bigFileThreshold behandlas det som text. Annars skulle det generera binära filer skiljer sig åt. Diff visas med den angivna diff-drivrutinen. Varje förare kan ange ett eller flera alternativ, som beskrivs i följande avsnitt. Alternativen för diff driver foo definieras av konfigurationsvariablerna i diff. foo-sektionen i Git config-filen. Definiera en extern diff-drivrutin Definitionen av en diff-drivrutin görs i gitconfig. inte gitattributes-fil, så strängt taget är denna manuella sida en fel plats att prata om. However8230 För att definiera en extern diff driver jcdiff. Lägg till en sektion i din GITDIRconfig-fil (eller HOME. gitconfig-fil) så här: När Git behöver visa dig en diff för sökvägen med diff-attribut satt till jcdiff. det kallar det kommando du angav med ovanstående konfiguration, dvs j-c-diff. med 7 parametrar, precis som GITEXTERNALDIFF-programmet heter. Se git (1) för detaljer. Definiera en anpassad hunk-header Varje grupp av ändringar (kallad en hunk) i den textuella diff-utgången är prefixad med en rad i formuläret: Detta kallas en hunkrubrik. TEXT-delen är som standard en rad som börjar med ett alfabet, ett understreck eller ett dollartecken som matchar vad GNU diff-p-utgången använder. Detta standardval är dock inte lämpat för vissa innehåll, och du kan använda ett anpassat mönster för att göra ett val. Först, i. gitattribut, skulle du tilldela diff-attributet för sökvägar. Därefter skulle du definiera en diff. tex. xfuncname-konfiguration för att ange ett regelbundet uttryck som matchar en rad som du skulle vilja se som en tjuvhuvud TEXT. Lägg till en sektion i din GITDIRconfig-fil (eller HOME. gitconfig-fil) så här: Obs. En enda nivå av backslashes äts av konfigurationsfilen parser, så du måste dubbla backslashes mönstret ovan väljer en linje som börjar med en backslash och noll eller flera förekomster av del följt av avsnitt följt av öppen spänn, till slutet av raden. Det finns några inbyggda mönster för att underlätta det, och tex är en av dem, så du behöver inte skriva ovanstående i din konfigurationsfil (du måste fortfarande aktivera detta med attributmekanismen via. gitattribut). Följande inbyggda mönster är tillgängliga: Ada lämpar sig för källkod i Adaspråk. bibtex lämplig för filer med BibTeX kodade referenser. cpp lämplig för källkod på C och C-språk. csharp lämplig för källkod på C-språket. fortran lämplig för källkod på Fortran-språket. fontän lämplig för fontändokument. html lämplig för HTMLXHTML-dokument. Java lämplig för källkod i Java-språket. matlab lämplig för källkod i MATLAB-språket. objc lämplig för källkod i mål-C-språket. pascal lämplig för källkod i PascalDelphi-språket. perl lämplig för källkod i Perl-språket. php lämplig för källkod i PHP-språket. python lämplig för källkod i Python-språket. rubin lämplig för källkod i Ruby-språket. tex lämplig för källkod för LaTeX-dokument. Anpassa ord diff Du kan anpassa de regler som git diff-word-diff använder för att dela upp ord i en rad, genom att ange ett lämpligt regelbundet uttryck i variabeln diff..wordRegex. Till exempel, i TeX bildas en backslash följd av en sekvens av bokstäver ett kommando, men flera sådana kommandon kan köras tillsammans utan mellanliggande whitespace. För att skilja dem, använd ett regelbundet uttryck i din GITDIRconfig-fil (eller HOME. gitconfig-fil) så här: Ett inbyggt mönster tillhandahålls för alla språk som anges i föregående avsnitt. Utföra textdiffror av binära filer Ibland är det önskvärt att se skillnaden i en textomvandlad version av vissa binära filer. Exempelvis kan ett textbehandlingsdokument konverteras till en ASCII-textrepresentation och skillnaden i texten som visas. Även om denna omvandling förlorar viss information är den resulterande diffen användbar för mänsklig visning (men kan inte appliceras direkt). Textconv config-alternativet används för att definiera ett program för att utföra en sådan omvandling. Programmet ska ta ett enda argument, namnet på en fil som ska konverteras och producera den resulterande texten på stdout. Till exempel, för att visa skillnaden i exif-informationen för en fil istället för binärinformationen (förutsatt att du har exifverktyget installerat), lägg till följande avsnitt i din GITDIRconfig-fil (eller HOME. gitconfig-fil): Textomvandlingen är generellt en enkelriktad konvertering i detta exempel förlorar vi själva bildinnehållet och fokuserar bara på textdata. Det betyder att diffr som genereras av textconv inte är lämpliga för tillämpning. Av denna anledning kommer endast git diff och git loggfamiljen av kommandon (dvs logg, whatchanged, show) att utföra textomvandling. gitformat-patch kommer aldrig att generera denna utmatning. Om du vill skicka någon textomvandlad diff av en binär fil (t. ex. för att den snabbt överför de ändringar du har gjort), ska du skapa den separat och skicka den som en kommentar utöver den vanliga binära diff som du kan skicka . Eftersom textomvandling kan vara långsam, speciellt när man gör ett stort antal av dem med git log - p. Git ger en mekanism för att cache utmatningen och använda den i framtida diffs. För att aktivera caching ställer du in cachetextconv-variabeln i din diff driver8217s config. Till exempel: Detta kommer cache resultatet av att köra exif på varje blob på obestämd tid. Om du ändrar textconv config-variabeln för en diff-drivrutin, kommer Git automatiskt att ogiltiga cacheposterna och återköra textconv-filtret. Om du vill att cachen ska invalidiseras manuellt (t. ex. eftersom din version av exif uppdaterades och nu ger bättre resultat) kan du ta bort cachen manuellt med git-uppdatering-ref - d refsnotestextconvjpg (där jpg är diff-drivrutins namn, som i exemplet ovan). Välja textconv mot extern diff Om du vill visa skillnader mellan binära eller speciellt formaterade block i ditt förråd, kan du välja att använda antingen ett extern diff-kommando eller att använda textconv för att konvertera dem till ett annorlunda textformat. Vilken metod du väljer beror på din exakta situation. Fördelen med att använda ett extern diff-kommando är flexibilitet. Du är inte bunden att hitta linjeorienterade förändringar, det är inte heller nödvändigt att utgången liknar enhetlig diff. Du kan gratis hitta och rapportera ändringar på det lämpligaste sättet för ditt dataformat. En textkonv, som jämförelse, är mycket mer begränsande. Du tillhandahåller en omvandling av data till ett linjeorienterat textformat, och Git använder sina vanliga diffverktyg för att generera utmatningen. Det finns flera fördelar med att välja den här metoden: Användarvänlighet. Det är ofta mycket enklare att skriva en binär till textomvandling än för att utföra din egen diff. I många fall kan befintliga program användas som textconv-filter (t ex exif, odt2txt). Git diff-funktioner. Genom att bara utföra omvandlingssteget själv kan du fortfarande använda många av Git8217s diff-funktioner, inklusive färgläggning, orddifferens och kombinerade diffiler för sammanslagningar. Caching. Textconv caching kan påskynda upprepade diffs, som de som kan utlösas genom att köra git log - p. Markera filer som binär Git gissar vanligtvis korrekt om en blob innehåller text eller binär data genom att undersöka innehållets början. Ibland kan du dock åsidosätta sitt beslut, antingen för att en blob innehåller binär data senare i filen eller för att innehållet, medan det är tekniskt sammansatt av texttecken, är ogenomskinligt för en mänsklig läsare. Till exempel innehåller många postscript-filer endast ASCII-tecken, men producerar bullriga och meningslösa diffs. Det enklaste sättet att markera en fil som binär är att avbryta diff-attributet i filen. gitattributes: Detta kommer att orsaka att Git genererar binära filer skiljer sig (eller en binär patch om binära korrigeringar är aktiverade) istället för en vanlig diff. Man kan dock också ange andra attribut för diff-drivrutiner. Du kan till exempel använda textconv för att konvertera postscript-filer till en ASCII-representation för mänsklig visning, men annars behandla dem som binära filer. Du kan inte ange både - diff och diffps attribut. Lösningen är att använda alternativet diff..binary config: Utföra en trevägssammanfogning Sammanslagningen av attributet påverkar hur tre versioner av en fil slås samman när en filnivåfusion är nödvändig vid sammanslagning av gitret. och andra kommandon som git återgå och git cherry-pick. Inbyggd 3-vägs sammanslagningsdrivrutin används för att sammanfoga innehållet på ett sätt som liknar sammanslagningskommandot för RCS-suite. Detta är lämpligt för vanliga textfiler. Ta versionen från den aktuella filialen som det preliminära sammanfogningsresultatet och förklara att sammanslagningen har konflikter. Detta är lämpligt för binära filer som inte har en väldefinierad sammanslagning semantik. Som standard använder den samma inbyggda 3-vägs-fusionsdrivrutinen som det är fallet när fusionsattributet är inställt. Konfigurationsvariabeln merge. default kan emellertid namngöra olika sammanslagningsdrivrutiner som ska användas med sökvägar för vilka fusionsattributet är ospecificerat. 3-vägs-fusion utförs med hjälp av den angivna anpassade sammanslagningsdrivrutinen. Den inbyggda 3-vägs-fusionsdrivrutinen kan explicit anges genom att be om textdrivrutin den inbyggda ta den nuvarande filialdrivrutinen kan begäras med binär. Inbyggda fusionsdrivrutiner Det finns några inbyggda lågnivåfusionsdrivrutiner som kan beställas via fusionsattributet. Vanlig 3-vägs filnivå sammanslagning för textfiler. Konflikta regioner är markerade med konfliktmarkörer ltltltltltltlt. och gtgtgtgtgtgtgtgt. Versionen från din gren visas före markören, och versionen från den sammanslagna grenen visas efter markören. Håll versionen från din filial i arbetsträdet, men lämna vägen i konfliktläge för att användaren ska kunna sortera ut. Kör 3-vägs filnivåfusion för textfiler, men ta rader från båda versionerna, istället för att lämna konfliktmarkörer. Detta tenderar att lämna de tillsatta raderna i den resulterande filen i slumpvis ordning och användaren ska verifiera resultatet. Använd inte detta om du inte förstår konsekvenserna. Definiera en anpassad sammanslagningsdrivrutin Definitionen av en sammanslagningsdrivrutin görs i filen. gitconfig, inte i gitattributfilen, så strängt taget är denna manuella sida en fel plats att prata om. However8230 Så här definierar du en anpassad fildrivrutinsfilfre. Lägg till en sektion i din GITDIRconfig-fil (eller HOME. gitconfig-fil) så här: Sammanfoga. name-variabeln ger föraren ett personligt läsbart namn. Värdet 8216merge..driver variable8217s används för att konstruera ett kommando för att springa för att slå samman ancestor8217s version (O), nuvarande version (A) och andra branches8217 versionen (B). Dessa tre tokens ersätts med namnen på temporära filer som innehåller innehållet i dessa versioner när kommandoraden är uppbyggd. Dessutom kommer L att ersättas med konfliktmarkörstorleken (se nedan). Sammanslagningsdrivrutinen förväntas lämna resultatet av sammanslagningen i filen med namnet A genom att skriva över den, och avsluta med nollstatus om den lyckades slå ihop dem rent eller icke-noll om det fanns konflikter. Sammanfoga .. Rekursiv variabel specificerar vilken annan sammanslagningsdrivrutin som ska användas när sammanslagningsdrivrutinen kallas för en intern sammanfogning mellan vanliga förfäder, när det finns fler än en. När den lämnas ospecificerad används föraren själv för både intern sammanfogning och slutlig sammanfogning. Sammanslagningsdrivrutinen kan lära sig sökvägen där det sammanslagna resultatet kommer att lagras via platshållaren P. konfliktmarkörstorlek Detta attribut styr längden av konfliktmarkörer som finns kvar i arbetsträdefilen under en konfliktfusion. Bara inställning till värdet till ett positivt heltal har någon meningsfull effekt. Till exempel kan den här raden i. gitattributes användas för att berätta att fusionsmaskinen lämnar mycket längre (i stället för de vanliga 7-teckens långa) konfliktmarkörerna när sammanslagning av filen Documentationgit-merge. txt resulterar i en konflikt. Kontrollera whitespace-fel i white space Konfigurationsvariabeln core. whitespace gör att du kan definiera vilken diff och tillämpning som ska överväga whitespace-fel för alla sökvägar i projektet (Se git-config (1)). Detta attribut ger dig finare kontroll per sökväg. Observera alla typer av potentiella whitespacefel som Git känner till. Fliken bredden tas från värdet av konfigurationsvariabeln core. whitespace. Lägg märke till något som fel. Använd värdet på konfigurationsvariabeln core. whitespace för att bestämma vad som ska märkas som ett fel. Ange en komma-separat lista över vanliga whitespace-problem att märka i samma format som konfigurationsvariabeln core. whitespace. Skapa ett arkiv export-ignorera Filer och kataloger med attributet export ignoreras won8217t läggas till arkivfiler. export-subst Om attributet export-subst är inställt för en fil, kommer Git att expandera flera platsinnehavare när man lägger till den här filen i ett arkiv. Expansionen beror på tillgängligheten av ett commit-ID, dvs om git-arkiv (1) har fått ett träd i stället för en commit eller en tagg kommer ingen utbyte att göras. Platshållarna är desamma som för alternativet - Prettyformat: Git-Log (1). förutom att de måste vara inslagna så här: Format: PLATSÄNDRARE i filen. T. ex. strängen Format: H kommer att ersättas med commit hash. Förpackningsobjekt Delta-komprimering kommer inte att försökas för blobs för banor med attributet delta inställt på falskt. Visa filer i GUI-verktyg Värdet på detta attribut anger den teckenkodning som ska användas av GUI-verktyg (t. ex. gitk (1) och git-gui (1)) för att visa innehållet i den relevanta filen. Observera att gitk (1) på grund av prestationshänsyn inte använder det här attributet om du inte aktiverar per-fil-kodningar manuellt i dess alternativ. Om det här attributet inte är inställt eller har ett ogiltigt värde används värdet för konfigurationsvariabeln gui. encoding istället (Se git-config (1)). ANVÄNDA MACRO-ATTRIBUTER Du vill inte att några ändringar i slutet av rad tillämpas eller inga textdiffr produceras för någon binär fil du spårar. Du skulle behöva ange t. ex. men det kan bli besvärligt när du har många attribut. Med hjälp av makroattribut kan du definiera ett attribut som, när det ställs in, också sätter in eller inaktiverar ett antal andra attribut samtidigt. Systemet känner till en inbyggd makroattribut, binär: Om du ställer in det binära attributet ställer du även in text - och diff-attribut som ovan. Observera att makroattribut endast kan ställas in, men inställningen kan ha effekten att ställa in eller avaktivera andra attribut eller till och med returnera andra attribut till ospecificerat tillstånd. DEFINING MACRO ATTRIBUTES Custom macro attributes can be defined only in top-level gitattributes files ( GITDIRinfoattributes . the. gitattributes file at the top level of the working tree, or the global or system-wide gitattributes files), not in. gitattributes files in working tree subdirectories. The built-in macro attribute binary is equivalent to: If you have these three gitattributes file: the attributes given to path tabc are computed as follows: By examining t. gitattributes (which is in the same directory as the path in question), Git finds that the first line matches. merge attribute is set. It also finds that the second line matches, and attributes foo and bar are unset. Then it examines. gitattributes (which is in the parent directory), and finds that the first line matches, but t. gitattributes file already decided how merge . foo and bar attributes should be given to this path, so it leaves foo and bar unset. Attribute baz is set. Finally it examines GITDIRinfoattributes . This file is used to override the in-tree settings. The first line is a match, and foo is set, bar is reverted to unspecified state, and baz is unset. As the result, the attributes assignment to tabc becomes:
No comments:
Post a Comment