/ / git zlúči dve vetvy s rôznymi štruktúrami adresárov - git, github, zlúčiť

git zlúčiť dve pobočky s rôznymi štruktúrami adresárov - git, github, merge

Mám vetvu funkcie a hlavnú vetvu a chcem zlúčiť hlavnú vetvu s vetvou funkcie. Problém je v tom, že adresárové štruktúry týchto dvoch vetiev nie sú rovnaké.

Štruktúra adresára vetvy funkcií je nasledovná:

|── app1
│   ├── common
│   └── static
└── app2

Štruktúra adresárov hlavnej vetvy:

|── app1
│── common
│── static
└── app2

Teraz v hlavnej vetve aktualizujem priečinky „bežné“a „statický“. Potom sa chystám zlúčiť hlavnú vetvu do vetvy funkcie, aby som aktualizoval „bežné“ a „statické“ priečinky pod „app1“. Keďže však štruktúry týchto dvoch vetiev nie sú rovnaké, git ich bude považovať za dva nové Ako zlúčiť aktualizovať vetvu funkcií?

odpovede:

2 pre odpoveď č. 1

Štruktúra adresárov týchto dvoch vetiev nie je zvlášť dôležitá, okrem v porovnaní s zlúčiť základňu dopustiť.

Git vykoná zlúčenie porovnaním zlučovacej základnezaviazať sa k obom záväzkom týkajúcim sa pobočiek. Vaša otázka je preto mylne orámovaná: mala by sa skutočne týkať toho, ako sa zlúčený základný záväzok porovnáva so záväzkami dvoch tipov. Samozrejme, ak majú obe potvrdenia pobočky rôzne rozloženia adresárov, najviac jeden z nich sa môže zhodovať s rozložením adresárov zlúčenej základne. Ale je to možné ani zodpovedá tomuto rozloženiu.

Keď Git vykoná dva rozdiely, od zlučovacej základnena tip # 1 a potom zo zlučovacej základne na tip # 2 umožňuje detekciu premenovania v oboch rozdieloch. Ak táto detekcia premenovania správne nájde všetky premenované súbory, Git súbory správne spojí. V akomkoľvek rozsahu Git zlyhá Ak chcete správne identifikovať súbory s rovnakým obsahom a rôznymi názvami, budete musieť súbory zlúčiť manuálne.

Môžete trochu pomôcť Gitu pri detekcii premenovania pomocou -X find-renames=<n> alebo -X rename-threshold=<n> argument. Toto číslo n je rovnaký argument „indexu podobnosti“, ktorý môžete odovzdať git diff ako -M alebo --find-renames, (Ďalej len rename-threshold meno je starý názov, zmenený relatívne nedávno tak git merge"možnosť by sa zhodovala git diff„s.) Upozorňujeme, že existuje limit pre koľko súbory, na ktoré Git tiež vykoná detekciu premenovania. Táto hranica je predvolene vyššia pre git merge (Teraz 1 000) ako pre git diff (Teraz 400). (Tieto limity boli v starších verziách Gitu pred 1.7.5 menšie, všetky sú však konfigurovateľné; pozri diff.renameLimit a merge.renameLimit v na git config dokumentácia, Pozri tiež Ako zlúčim zmeny v Gite v súboroch, ktoré som presunul?)