Vra

Ek het Git op Windows (msysgit) gebruik om veranderinge op te spoor vir sommige ontwerpwerk wat ek gedoen het.

Vandag werk ek op 'n ander rekenaar (met remote repo brian) en ek probeer nou om die wysigings wat vandag gedoen is, terug te voeg in my gewone plaaslike weergawe op my skootrekenaar.

Op my skootrekenaar het ek gebruik git pull brian master om die veranderinge in my plaaslike weergawe te trek.Alles was in orde, behalwe die hoof InDesign-dokument - dit wys as 'n konflik.

Die weergawe op die rekenaar (brian) is die nuutste een wat ek wil behou, maar ek weet nie watter opdragte die repo sê om hierdie een te gebruik nie.

Ek het probeer om die lêer direk na my skootrekenaar te kopieer, maar dit lyk asof dit die hele samesmeltingsproses breek.

Kan iemand my in die regte rigting wys?

Was dit nuttig?

Oplossing

git checkout aanvaar 'n --ours of --theirs opsie vir gevalle soos hierdie. So as jy 'n merge konflik, en jy weet jy net die lêer van die tak wat jy samesmelting in wil, kan jy doen:

$ git checkout --theirs -- path/to/conflicted-file.txt

om dié weergawe van die lêer te gebruik. Net so, as jy weet jy jou weergawe (nie die een wat saamgesmelt in) wil jy kan gebruik

$ git checkout --ours -- path/to/conflicted-file.txt

Ander wenke

Jy het die konflik met die hand op te los (die kopiëring van die lêer oor) en dan pleeg die lêer (maak nie saak of jy dit oor gekopieer of gebruik die plaaslike weergawe) soos hierdie

git commit -a -m "Fix merge conflict in test.foo"

Git gewoonlik autocommits na die samesmelting, maar wanneer dit konflikte kan oplos nie op sigself ontdek, dit geld al kolle dit uitgepluis het en laat die res vir jou om op te los en met die hand te pleeg. Die Git Merge Man Page , die Git-SVN Crash Course of hierdie blog inskrywing dalk 'n bietjie lig op hoe dit veronderstel is om te werk werp.

Edit: Sien die onderstaande pos, het jy nie eintlik die lêers jouself tot die kopiëring, maar kan gebruik

git checkout --ours -- path/to/file.txt
git checkout --theirs -- path/to/file.txt

die weergawe van die lêer wat u wil kies. Kopiëring / die lêer redigering sal net nodig wees as jy 'n mengsel van beide weergawes wil.

Merk asseblief mipadis antwoord as die korrekte een.

Jy kan ook hierdie probleem met oorkom

git mergetool

wat git veroorsaak plaaslike kopieë van die stryd binêre skep en kuit jou standaard editor op hulle:

  • {conflicted}.HEAD
  • {conflicted}
  • {conflicted}.REMOTE

Dit is duidelik dat jy nie kan nuttig binaries lêers te wysig in 'n teks editor. In plaas jy die nuwe {conflicted}.REMOTE lêer oor {conflicted} kopieer sonder die sluiting van die redakteur. Dan wanneer jy dit doen maak die redakteur git sal sien dat die onversierde werk-kopie is verander en jou merge konflik opgelos in die gewone manier.

Om te los deur die behoud van die weergawe in jou huidige tak (ignoreer die weergawe van die tak wat jy samesmelting in), voeg net en die lêer te pleeg:

git commit -a

Om te los deur die vervang van die weergawe in jou huidige tak met die weergawe van die tak wat jy samesmelting in, moet jy daardie weergawe in jou werk gids eerste haal, en dan voeg / te pleeg dit:

git checkout otherbranch theconflictedfile
git commit -a

in meer besonderhede verduidelik

antwoord mipadi se het nie heeltemal werk vir my, ek nodig het om dit te doen:

  

git afhandeling --ours pad / na / file.bin

of, om die weergawe te hou wat saamgesmelt in:

  

git afhandeling --theirs pad / na / file.bin

dan

  

git voeg pad / na / file.bin

En dan was ek in staat was om te doen "git mergetool" weer en gaan voort na die volgende konflik.

Van die git checkout docs

  

git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <paths>...

     

--ours
   --theirs
  Wanneer u uitteken paaie van die indeks, check stadium # 2 (ours) of # 3 (theirs) vir losgemaak paaie.

     

Die indeks kan losgemaak inskrywings as gevolg van 'n vorige mislukte merge bevat. By verstek, as jy probeer om te kyk na so 'n inskrywing van die indeks, sal die afhandeling operasie misluk en niks sal bewys nie. Die gebruik van -f sal hierdie losgemaak inskrywings ignoreer. Die inhoud van 'n spesifieke kant van die merge kan uit die indeks nagegaan word deur die gebruik van --ours of --theirs. Met -m, kan veranderinge aan die werk boom lêer weggegooi te herskep die oorspronklike stryd merge gevolg.

Hierdie proses is om binêre lêer konflikte op te los nadat jy 'n trek versoek om GitHub ingedien het:

  1. So op GitHub, gevind jy jou trek versoek het 'n konflik op 'n binêre lêer.
  2. Gaan nou terug na dieselfde git tak op jou plaaslike rekenaar.
  3. Jy (a) re-make / re-opbou hierdie binêre lêer weer, en (b) verbind die gevolg gehad binêre lêer om dieselfde git tak.
  4. Toe dit dieselfde git tak weer stoot jy GitHub.

Op GitHub, op jou trek versoek, moet die konflik verdwyn.

Ek het afgekom op 'n soortgelyke probleem (wat wil trek 'n te pleeg wat 'n paar binêre lêers wat konflikte wanneer saamgesmelte veroorsaak ingesluit), maar afgekom op 'n ander oplossing wat geheel en al kan gedoen word met behulp van git (dws sonder om lêers oor die hand kopieer) . Ek het gedink ek sal dit hier sluit so ten minste het ek dit kan onthou die volgende keer as ek dit nodig het. :) Die stappe volg lyk:

% git fetch

Dit haal die nuutste pleeg (s) van die afgeleë repository (jy mag nodig wees om 'n afgeleë naam tak spesifiseer, afhangende van jou opstel), maar nie probeer om hulle saam te smelt. Dit rekords die die pleeg in FETCH_HEAD

% git checkout FETCH_HEAD stuff/to/update

Dit neem die afskrif van die binêre lêers Ek wil en oor skryf wat in die werk boom met die weergawe gaan haal die afgeleë tak. git nie probeer om enige samesmelting doen, sodat jy net eindig met 'n presiese kopie van die binêre lêer van die afgeleë tak. Sodra dit gedoen is, kan jy voeg / te pleeg die nuwe kopie net soos normaal.

Ek het oor twee strategieë kom vir die bestuur van diff / merge van binêre lêers met Git op vensters.

  1. Tortoise git kan jy diff instel / saamsmelt gereedskap vir verskillende tipes lêer op grond van hul lêeruitbreidings. Sien 2.35.4.3. Diff / Merge Gevorderde instellings http://tortoisegit.org/docs/tortoisegit/tgit- gegrawe-settings.html . Hierdie strategie natuurlik relys op geskikte diff / saamsmelt gereedskap wat beskikbaar is.

  2. Die gebruik van git eienskappe wat jy 'n instrument / opdrag om jou binêre lêer te omskep teks kan spesifiseer en dan laat jou standaard diff / merge hulpmiddel doen dit ding. Sien http://git-scm.com/book/it/ v2 / aanpas-Git-Git-eienskappe . Die artikel gee selfs 'n voorbeeld van die gebruik van meta data te ewenaar beelde.

Ek het beide strategieë om te werk met binêre lêers van sagteware modelle, maar ons het met skilpad git as die opset was maklik.

As die binêre is iets meer as 'n dll of iets wat kan wees direk geredigeer soos 'n prent, of 'n versnitlêer (en jy hoef nie een lêer of die ander lêer asblik te kies/kies nie), sal 'n regte samesmelting soos volg wees:

Ek stel voor soek vir 'n verskil-instrument wat gerig is op wat is jou binêre lêer, daar is byvoorbeeld 'n paar gratis vir beeldlêers.

en vergelyk hulle.

As daar geen verskil-instrument daar buite is om jou lêers te vergelyk nie, dan as jy die oorspronklike kragopwekker van die bin-lêer (dit is, daar bestaan ​​'n redakteur vir dit...Soos Blender 3D, kan u die lêers handmatig inspekteer, ook die logboeke sien en die ander persoon vra wat u moet insluit) en doen 'n uitvoer van die lêers met https://git-scm.com/book/es/v2/Git-Tools-Advanced-Merging#_manual_remerge

$ git show :1:hello.blend > hello.common.blend $ git show :2:hello.blend > hello.ours.blend $ git show :3:hello.blend > hello.theirs.blend

Ek gebruik Git Workflow vir Excel - https: //www.xltrail. com / blog / git-workflow-vir-excel aansoek om die meeste van my binêre lêers wat verband hou merge probleme op te los. Dit open-source app help my om kwessies produktief te los sonder om te veel tyd spandeer en laat my kersie kies die regte weergawe van die lêer sonder enige verwarring.

my geval lyk soos 'n fout .... met behulp van git 2.21.0

Ek het 'n trek ... dit het gekla oor binêre lêers:

warning: Cannot merge binary files: <path>
Auto-merging <path>
CONFLICT (content): Merge conflict in <path>
Automatic merge failed; fix conflicts and then commit the result.

En dan is daar niks in enige van die antwoorde hier gelei tot enige uitset wat enige sin gemaak.

As ek kyk na wat lêer Ek het nou ... dis die een wat ek geredigeer. As ek dit doen óf:

git checkout --theirs -- <path>
git checkout --ours -- <path>

Ek kry uitset:

Updated 0 paths from the index

en ek het nog my weergawe van die lêer. As ek RM en dan bestel, sal dit sê 1 plaas, maar dit gee my nog my weergawe van die lêer.

git mergetool sê

No files need merging

en git status sê

    All conflicts fixed but you are still merging.
    (use "git commit" to conclude merge)

Een opsie is om ongedaan die pleeg ... maar ek was ongelukkig en ek het baie handel, en hierdie slegte een was die eerste. Ek wil nie tyd te herhaal wat mors nie.

so aan hierdie waansin los:

Ek het net gehardloop

git commit

wat die afgeleë weergawe verloor, en waarskynlik mors 'n ruimte stoor 'n ekstra binêre lêer ... dan

git checkout <commit where the remote version exists> <path>

wat my gee terug die afgeleë weergawe

dan geredigeer die lêer weer ... en dan pleeg en stoot, wat weer waarskynlik beteken mors spasie met 'n ander kopie van die binêre lêer.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top