Egyesíti a tárolókat a git-ban

Két tároló van. A feladat az, hogy egyesíti őket, hogy az egyik tárolóból származó fájlok a másik mappájába essenek, és az egész történelem megmarad.

Nem találtam a hálózatban a lépések teljes leírását (talán nem kerestem), ezért úgy döntöttem, hogy kitöltem egy különböző forrásból összeállított jegyzetet és saját kísérleteimet.

A probléma lényege

Tegyük fel, hogy két projektünk van, amelyek mindegyike egy külön repository-ban él.

Nevezzük az első libfoo projektet. Ez egy hosszú és megkülönböztetett történelemmel rendelkező archipelagos könyvtár.

Rengeteg fájl van benne, amelyek mind nagyon fontosak számunkra.

A második projekt a fő projekt, a Facebook, Twitter és (hirtelen) Wikipedia gyilkosa.

Ő is nagyon nagy

Három év fejlesztés után rájöttünk, hogy létfontosságú számunkra, hogy egyesítsük mindkét tárhelyet. Vagyis mozgassa a könyvtárat a projekttárba (az új libfoo mappába). Természetesen ugyanakkor szeretném megmenteni a változások teljes történetét.

lemondás

Ebben a bejegyzésben a változásokat közvetlenül a tárolókban végzem el. De amikor valódi adattárral dolgozom, nagyon ajánlom, hogy ilyen manipulációkat csak a tárhely másolatával végezzen. Annak ellenére, hogy a legtöbb esetben a git megpróbálja menteni a felhasználói adatokat, egyes parancsok eltávolíthatják a tároló tartalmát nyom nélkül.

Ezért végezzen minden kísérletet a munkatárolók másolatain. Ráadásul a gitban lévő klónok nagyon gyorsan kialakulnak. És amikor az összes manipuláció befejeződött, a tárolók szinkronizálhatók push / pull segítségével.

Általában úgy vélem, figyelmeztettem. Vigyázz az adatokra!

Írja át a fájlok elérési útját

Az első lépés a tárolóknak az édes ecstasyba történő egyesítése felé az, hogy megváltoztassa a könyvtár könyvtárában lévő fájlok elérési útját. Ha a fájlok most a gyökérben vannak, akkor manipulációink után a libfoo mappába kell lépni (ami a libfoo repository-ban található).

A termonukleáris git szűrő-ág parancs segít nekünk elérni ezt. A történelem aktív szerkesztésére szolgál az "1984" szellemében. A történelem közvetlenül a változtatások révén (pontosabban az újbóli létrehozás) változik, ezért az összes szerkesztés visszafordíthatatlan. A szűrőfiók sikertelen alkalmazása letölthesse az adattárat egy dump-ra.

Vigyázzon óvatosan a kezére:

A - három szűrő zászló azt mondja, hogy a következő parancsot kell alkalmazni a lánc minden egyes elkötelezettségére (ebben az esetben a teljes mesterágra). A szűrés csak akkor lesz sikeres, ha a parancs 0-as állapotú, és az összes elkötelezettség egymásra helyezhető.

A shell csapat maga is két részből áll. Először létrehozzuk a libfoo mappát. Ezután áthelyezzük az összes fájlt, kivéve magát a libfoo-t. A shell hatalma tipikus példája: egy cső és valaki anyja segítségével komplex cselekvést alkotunk az alapvető parancsokból, amelyek a személy számára minden monoton munkát eredményeznek.

Ha nem hibázzuk a parancs beírását, a git átírja az összes adattárat, és megmutatja nekünk az új, javított libfoo könyvtárat:

Ugyanakkor a változások egész történelme megmarad (bár természetesen a kötelességek tördelése is változik):

Ha akarod, akkor be tudsz jelentkezni egy adott fájlra, és győződj meg róla, hogy a története is rendben van.

Most megteheti magad.

Egyesített raktárak egyesítése

Kevés maradt. Elindulunk uberprojekt főprojektünkhöz, és kivesszük az összes kötelezettségvállalást a megváltozott könyvtári adattárból:

Git meglepődik, hogy a távoli tárhely nem áll a közös elkötelezettségünkkel, és figyelmeztet minket róla. Ne aggódjon - minden a terv szerint megy.

Azonban a terv maga attól függ, hogyan szeretné összeolvasztani a két ágat. Főleg a csapatodban alkalmazott fiókkezelés politikáján múlik.

A Linus-úton haladhatsz, és egyesítheted a két ágat rendszeres egyesítéssel. Ebben az esetben létrejön egy elkövetés, amelynek két őse van: az egyik libfoo és az egyik főprojekt:

Van egy másik lehetőség. Például a mi munkatervünkben több szülővel elköteleztük magunkat (egy egyszerű lineáris elkötelezettség kedvéért). Ebben az esetben meg kell egyesíteni az ágakat a rebase-on keresztül.

És mindenképpen ne felejtsd el eltakarítani a távoli adattárat - nem kell többé szükségünk rá!

Mi a végén

Megkaptuk, amit akarunk: a főprojekt-adattárban libfoo nevű mappát találtunk a libfoo projekt összes fájljával (remélem, tényleg ezt akarod!)

Az egész meséjének erkölcse: írja át történelmét és rendelje el az egészségügyi készleteket, de ne feledd:

Egyesíti a tárolókat a git-ban

Egyesíti a tárolókat a git-ban

Kapcsolódó cikkek