Sunday 19 November 2017

Git Merge Konflikt Binære Alternativer


Du kan løse fusjonskonflikter ved hjelp av kommandolinjen og en tekstredigerer. Sammenslåingskonflikter kan oppstå hvis konkurrerende endringer gjøres i samme linje i en fil eller når en fil slettes som en annen person forsøker å redigere. Hvis du vil ha informasjon om hvordan du løser disse situasjonene, kan du se Konkurranse av linjeskiftefusjonskonflikter og Konflikter for fjerning av filfiler. Konkurranse for konkurrerende linjeskift For å løse en sammenføyningskonflikt forårsaket av konkurrerende linjeskift, må du velge hvilke endringer som skal innlemmes fra de forskjellige grener i en ny commit. For eksempel, hvis du og en annen person begge redigerte filen styleguide. md på samme linje i forskjellige grener av samme Git-depot, får du en sammenføynings konfliktfeil når du prøver å slå sammen disse filialene. Du må løse denne sammenføyningskonflikten med en ny forpliktelse før du kan slå sammen disse filialene. Åpne Terminal Terminal Git Bash. Naviger inn i det lokale Git-depotet som har sammenslåingskonflikten. Generer en liste over filene som berøres av sammenslåingskonflikten. I dette eksemplet har filen styleguide. md en sammenføyningskonflikt. Åpne din favoritt tekstredigerer, for eksempel Atom. og naviger til filen som har flette konflikter. For å se begynnelsen av sammenslåingskonflikten i filen, søk filen i konfliktmarkeringen ltltltltltltlt. Når du åpner filen i tekstredigeringsprogrammet, ser du endringene fra HEAD eller grunnlinjen etter linjen ltltltltltltltlt HEAD. Neste, vil du se. som deler endringene dine fra endringene i den andre grenen, etterfulgt av gtgtgtgtgtgtgt BRANCH-NAME. I dette eksemplet skrev en person et problem i basen eller HEAD-avdelingen, og en annen person skrev spørre spørsmålet ditt i IRC i sammenligningsgrenen eller grenen-a. Bestem om du vil beholde bare grenene dine, hold bare de andre grenene endringer, eller gjør en helt ny endring, som kan inkludere endringer fra begge grener. Slett konfliktmarkørene ltltltltltltlt. . gtgtgtgtgtgtgtgt og gjør de endringene du vil ha i den endelige fusjonen. I dette eksemplet innlemmes begge endringene i den endelige fusjonen: Legg til eller trinn dine endringer. Forbind dine endringer med en kommentar. Du kan nå slå sammen grenene på kommandolinjen eller trykke på endringene dine i fjernregisteret ditt på GitHub og slå sammen endringene i en trekkforespørsel. Fjernet filfusjonskonflikter For å løse en fusjonskonflikt forårsaket av konkurrerende endringer i en fil, der en person sletter en fil i en fil og en annen person redigerer samme fil, må du velge om du vil slette eller beholde den fjernede filen i en ny forpliktelse. Hvis du for eksempel har redigert en fil, for eksempel README. md. og en annen person fjernet den samme filen i en annen avdeling i samme Git-depot, får du en sammenføynings konfliktfeil når du prøver å slå sammen disse filialene. Du må løse denne sammenføyningskonflikten med en ny forpliktelse før du kan slå sammen disse filialene. Åpne Terminal Terminal Git Bash. Naviger inn i det lokale Git-depotet som har sammenslåingskonflikten. Generer en liste over filene som berøres av sammenslåingskonflikten. I dette eksemplet har filen README. md en fusjonskonflikt. Åpne din favoritt tekstredigerer, for eksempel Atom. og naviger til filen som har flette konflikter. Bestem om du vil beholde den fjernede filen. Du vil kanskje se de siste endringene som er gjort i den fjernede filen i tekstredigeringsprogrammet. For å legge til den fjernede filen tilbake til depotet ditt: For å fjerne denne filen fra depotet ditt: Forbind endringene dine med en kommentar. Du kan nå slå sammen grenene på kommandolinjen eller trykke på endringene dine i fjernregisteret ditt på GitHub og slå sammen endringene i en trekkforespørsel. Videre readingIve vært å bruke Git på Windows (msysgit) for å spore endringer for noen designarbeid jeg har gjort. I dag har jeg jobbet på en annen PC (med ekstern repo brian), og jeg prøver nå å slå sammen redigeringene gjort i dag tilbake til min vanlige lokale versjon på min bærbare PC. På min laptop brukte Ive git pull brian master til å trekke endringene i min lokale versjon. Alt var fint bortsett fra hoved InDesign-dokumentet - dette viser som en konflikt. Versjonen på PCen (brian) er den siste som jeg vil beholde, men jeg vet ikke hva kommandoer forteller repoen å bruke denne. Jeg prøvde å kopiere filen direkte på min bærbare datamaskin, men dette ser ut til å ødelegge hele fusjonen. Kan noen peke meg i riktig retning Zitrax Difter du filen etter å ha kjørt git-kassen --ours. Mannen siden antyder (IMHO) at kassen - deres - vil fjerne endringen fra quotboth modifisert, trenger mergequot liste og legge den til indeksen, og jeg tror det ikke er riktig. Jeg tror du må løpe git add etter kassen. ndash Tim Keating 13 mai 13 kl 21:06 Du kan også overvinne dette problemet, som forårsaker git å lage lokale kopier av den konfliktbaserte binæren og gyte standardredigering på dem: Åpenbart kan du ikke redigere binærfiler i en tekstredigerer. I stedet kopierer du den nye. REMOTE-filen over uten å lukke editoren. Deretter når du lukker redaktøren git, vil du se at den udekorerte arbeidskopien er endret, og sammenføyningskonflikten din er løst på vanlig måte. Hvis filene er store eller du ikke vil risikere å åpne binær i tekstredigeringsprogrammet, kan du trykke ctrlc på mergetool-meldingen (citerer Hit return for å starte fletteoppløsningsverktøyet) og git vil legge igjen de ekstra filene på plass. Deretter kan du endre dem eller slå dem sammen i et eksternt verktøy (nyttig for binære dokumentformater som LibreOfficeOpenOfficeMSWord) og lagre resultatet tilbake til det opprinnelige filnavnet. For å informere git om at konflikten er løst, legger git til det opprinnelige filnavnet, og du kan deretter fullføre sammenslåingen. ndash Felix Aug 24 15 kl 21:54 For å løse ved å holde versjonen i din nåværende filial (ignorere versjonen fra filialen du slår sammen), bare legg til og legg til filen: Å løse ved å overskrive versjonen i din nåværende gren med Versjonen fra grenen du slår sammen, må du hente den versjonen i arbeidskatalogen først, og deretter legge til det: Jeg har kommet over to strategier for å administrere diffmerge av binære filer med Git på Windows. Skildpaddsgit lar deg konfigurere diffmerge-verktøy for forskjellige filtyper basert på filtypene. Se 2.35.4.3. DiffMerge Avanserte innstillinger tortoisegit. orgdocstortoisegittgit-dug-settings. html. Denne strategien er selvfølgelig avhengig av at passende diffmeringsverktøy er tilgjengelig. Ved hjelp av git-attributter kan du spesifisere et verktøykommando for å konvertere din binære fil til tekst, og la standard diffmerge-verktøyet gjøre det. Se git-scmbookitv2Customizing-Git-Git-Attributter. Artikkelen gir til og med et eksempel på bruk av metadata for å differe bilder. Jeg har begge strategier for å jobbe med binære filer av programvaremodeller, men vi gikk med skildpaddsgit da konfigurasjonen var enkel. besvart 27. november kl 15:46 Hvis binæret er noe mer enn en dll eller noe som kan redigeres direkte som et bilde, eller en blendfil (og du trenger ikke å trashselect en fil eller den andre) ville en reell flette være Noen som: Jeg foreslår at du søker etter et diff-verktøy som er orientert for hva du er binærfil, for eksempel er det noen gratis bilder for bildefiler, for eksempel, og sammenligne dem. Hvis det ikke finnes et diff-verktøy der ute, kan du sammenligne filene dine, så hvis du har den originale generatoren til bin-filen (det vil si, det finnes en redaktør for det. Som blender 3d, kan du deretter manuelt inspisere disse filene, se også logger og spør den andre personen hva du bør inkludere) og gjør en utgang av filene med git-scmbookesv2Git-Tools-Advanced-Mergingmanualremerge git show: 1: hello. blend gt hellomon. blend git show: 2: hello. blend gt hello. ours. blend git show: 3: hello. blend gt hello. theirs. blend besvart 13 aug 15 kl 21:03 Ditt svar 2017 Stack Exchange, IncMERGE STRATEGIER Sammenslåingsmekanismen (git merge og git pull commands) tillater backend sammenføyning strategier som skal velges med - s alternativ. Noen strategier kan også ta sine egne muligheter, som kan bestås ved å gi - Xtoptiongt argumenter for å git merge andor git pull. Dette kan bare løse to hoder (det vil si den nåværende grenen og en annen gren du trukket fra) ved hjelp av en 3-veis fusjon algoritme. Det forsøker å nøye oppdage kryss-kryss sammen flertydighet og anses generelt trygt og raskt. Dette kan bare løse to hoder ved hjelp av en 3-veis fusjon algoritme. Når det er mer enn en felles forfader som kan brukes til 3-veis sammenføyning, skaper det et fusjonert tre av de vanlige forfedrene og bruker det som referansetreet for 3-veis flette. Dette har blitt rapportert å resultere i færre fusjonskonflikter uten å forårsake misdannelser ved tester gjort på faktiske fusjonsprosjekter tatt fra Linux 2.6-kjerneutviklingshistorikk. I tillegg kan dette oppdage og håndtere sammenslåinger med navn på nytt. Dette er standardfusjonsstrategien når du trekker eller slår sammen en gren. Den rekursive strategien kan ta følgende alternativer: Dette alternativet tvinger motstridende hunks til å bli automatisk løst ved å favorisere vår versjon. Endringer fra det andre treet som ikke er i konflikt med vår side, reflekteres i sammenslåingsresultatet. For en binær fil, er hele innholdet tatt fra vår side. Dette bør ikke forveksles med vår sammenslåingsstrategi, som ikke engang ser på hva det andre treet inneholder i det hele tatt. Det forkaster alt det andre tre gjorde, og erklærer at historien inneholder alt som skjedde i det. Dette er motsatt av vår. Med dette alternativet bruker merge-rekursiv litt ekstra tid for å unngå feilfeil som noen ganger oppstår på grunn av uimporterende samsvarende linjer (for eksempel braces fra forskjellige funksjoner). Bruk dette når grenene som skal slås sammen har diverget vilt. Se også git-diff1 - patience. Forteller merge-rekursiv for å bruke en annen diff-algoritme, noe som kan bidra til å unngå unnvikninger som oppstår på grunn av uimporterende samsvarende linjer (for eksempel braces fra forskjellige funksjoner). Se også git-diff1 - diff-algoritmen. ignorere-space-change ignorere-all-space ignorere-space-at-eol Behandler linjer med den angitte typen av hvite plass endres som uendret på grunn av en treveis flette. Whitespace endringer blandet med andre endringer i en linje ignoreres ikke. Se også git-diff1-b. w. og --ignore-space-at-eol. Hvis versjonen bare introduserer hvite plassendringer til en linje, brukes vår versjon Hvis vår versjon introduserer hvite plassendringer, men deres versjon inneholder en vesentlig endring, brukes versjonen deres. Ellers fortsetter sammenslåingen på vanlig måte. Dette kjører en virtuell utsjekking og innsjekking av alle tre faser av en fil når du løser en treveis flette. Dette alternativet er ment å bli brukt ved sammenslåing av grener med forskjellige rene filtre eller endringer i standardiseringsregler. Se Sammenføyning av grener med forskjellige inncheckingsattributter i gitattributes5 for detaljer. Deaktiverer renormaliseringsalternativet. Dette overstyrer fusjonen. renormaliser konfigurasjonsvariabelen. Slå av navn på gjenkjenning. Se også git-diff1 - no-renames. Slå på nytt navn på deteksjon, eventuelt innstilling av likhetsterskelen. Dette er standard. Se også git-diff1 - find-renames. Utdatert synonym for find-renamesltngt. Dette alternativet er en mer avansert form for subtree-strategi, hvor strategien gir et gjetning om hvordan to trær må skiftes for å matche hverandre når de slås sammen. I stedet er den angitte banen prefixed (eller strippet fra begynnelsen) for å gjøre formen på to trær til å matche. Dette løser saker med mer enn to hoder, men nekter å gjøre en kompleks flette som trenger manuell oppløsning. Det er først og fremst ment å bli brukt til å samle emnet grenhoder sammen. Dette er standardfusjonsstrategien når du trekker eller fusjonerer mer enn en gren. Dette løser et antall hoveder, men det resulterende treet i sammenslåingen er alltid det gjeldende grenhodet, og ignorerer alle endringer fra alle andre grener. Det er ment å brukes til å erstatte den gamle utviklingshistorien til sidegrener. Vær oppmerksom på at dette er forskjellig fra alternativet - Xours til rekursiv fusjonsstrategi. Dette er en modifisert rekursiv strategi. Ved sammenslåing av trærne A og B, hvis B tilsvarer en undertreet av A, blir B først justert for å matche trestrukturen til A, i stedet for å lese trærne på samme nivå. Denne tilpasningen gjøres også til det felles forfedretreet. Med strategiene som bruker 3-veis flette (inkludert standard, rekursiv), hvis en endring gjøres på begge grener, men senere tilbake på en av grener, vil denne endringen være til stede i det fusjonerte resultatet noen mennesker finner denne oppførselen forvirrende . Det oppstår fordi bare hodene og sammenslåingsbasen vurderes når de foretar en fusjon, ikke den enkelte forplikter seg. Sammenslåingsalgoritmen vurderer derfor den omvendte endringen som ingen endring i det hele tatt, og erstatter den endrede versjonen i stedet. Dette åpne nettstedet er vert på GitHub. Patches, forslag og kommentarer er velkomne.

No comments:

Post a Comment