A Git-előzmények egyszerűsítésének ismertetése
Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019
A Git-előzmények egyszerűsítése zavaró fenevad lehet. Az idő 99%-ában nem is fogja tudni, hogy létezik, de időnként kiugrik a Git sötét sarkaiból, és harap. Ebben a cikkben bemutatjuk, hogy mi az előzmények egyszerűsítése, és hogyan okozhat zavart a fájlelőzmények megtekintésekor.
Kezdjük egy gyakori forgatókönyvvel:
- A módosítást fájlba kell küldenie, majd egyesítenie kell a módosítást a fő fájllal.
- Néhány munkatársa is egyesíti az ágakat a főbe.
- Később visszatér, és észreveszi, hogy a módosítások hiányoznak.
- Ha a bűnöst keresi, nézze meg a fájlelőzményeket és figyelje meg... a módosítások nem is szerepelnek a listán!?
A Git véglegesítési előzményei egy fa. Néha az időrend nem ugyanaz, mint a tényleges fájlfaelőzmények. Ez a helyzet leggyakrabban akkor fordul elő, ha egy egyesítési véglegesítés visszaállít egy fájlt az eredeti állapotába. Ebben az esetben az alapértelmezett előzménynézet valójában nem jeleníti meg az összes módosítást, mert gyakorlatilag a fájl nem változott. Ebben a forgatókönyvben a Git rájön, hogy egyszerűsítheti az előzményeket, és a valószínűleg keresett "módosítások" törlődnek a naplóból.
Hacsak nem futott bele korábban, akkor lehet, hogy frusztrált, kíváncsi , hol a fene nem a változások ment?
Előzmények egyszerűsítése: Alapértelmezés szerint bekapcsolva
Alapértelmezés szerint a naplóparancs futtatása egy fájlon: git log file.txt
automatikusan leegyszerűsíti az előzményeket, esetleg elrejt néhány véglegesítést a kimenetéből. További információ: git log man page.
Ami hozzáteszi, hogy a történelem egyszerűsítése nem történik meg, ha csak futgit log
, mert az összes módosítást vizsgáljuk, nincs mit egyszerűsíteni.
Az előzmények egyszerűsítésének kikapcsolásához a parancssori kapcsolót --full-history
kell használnia.
Példa a történelem egyszerűsítésére
Az egyszerűsítés működésének jobb megértése érdekében saját példát hozunk létre a történelem egyszerűsítésére. Először nézzük meg a létrehozandó előzmények diagramját:
Amint láthatja, a következőt fogjuk tenni:
- Hozzon létre egy fájlt.
- Adjon hozzá egy sort a fájlhoz egy ágban (állatokban).
- Adjon hozzá egy másik sort a fájlhoz egy másik ágban (gyümölcs).
- Egyesítse az elágazási állatokat a főbe.
- Egyesítse újra az ág gyümölcsét a főágba, és válassza ki a fájl teljes példányát a gyümölcságból.
- Ellenőrizze a fájl előzményeit.
Git leegyszerűsíti a történelmünket. Itt az 5. lépés a kulcs. Figyelmen kívül hagytunk minden változást az állatágban . A Git megfigyeli, hogy a fájl lényegében nem változott az 1. és az 5. lépés között, így csak két előzménybejegyzés jelenik meg.
Először létrehozzuk a fájlt, és hozzáadjuk az adattárhoz:
> cd sample
> git init
> echo "some content" > test.txt
> git add test.txt
> git commit -m "Initial commit"
Most úgy döntünk, hogy hozzáfűzzük a "szamarak" szöveget a fájlhoz egy állatágban:
> git checkout -b animals
> echo "donkeys" >> test.txt
> git commit -am "We have added an animal"
Miközben kísérletezünk, úgy döntünk, hogy inkább gyümölcsöt szeretnénk használni a fájlban, ezért létrehozunk egy másik ágat, és a fájl végén hozzáfűzzük a "banán" szöveget:
> git checkout main -b fruit
> echo "bananas" >> test.txt
> git commit -am "We have added a fruit"
Elégedettnek érezzük magunkat a változásokkal, úgy döntünk, hogy az állatágat visszafésüljük a főágba:
> git checkout main
> git merge animals
Most nézzük meg a fájl naplóját test.txt
:
> git log test.txt
commit 6b33d99b996c430a60c9552b79245d1aa8320339
Date: Mon Feb 15 10:45:33 2016 -0500
We have added an animal
commit 206613ccd9a54b055b184c7b6c16f2ece8067e51
Date: Mon Feb 15 10:44:18 2016 -0500
Initial commit
Eddig jó volt, ugye? Semmi sem tűnik ki a szokásosból a napló kimenetében. Tegyük fel, hogy meggondoltuk magunkat, és úgy döntöttünk, hogy egyesítjük a gyümölcságat:
>git merge fruit
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.
Uh-oh, egy egyesítési ütközés. Némi megfontolás után úgy döntünk, hogy a gyümölcság test.txt
teljes fájljának használatát választjuk. Általában valamilyen szövegszerkesztőt vagy egyesítési eszközt használna, de a teljes fájlt újra létrehozzuk, mivel csak két sorból áll:
> echo "some content" > test.txt
> echo "bananas" >> test.txt
> git commit -am "Fixed merge conflict"
Most tekintsük át a fájl előzményeit test.txt
:
> git log test.txt
commit fdd4dfd816c4efebc5bdb240f49e934e299db581
Date: Mon Feb 15 10:51:06 2016 -0500
We have added a fruit
commit 206613ccd9a54b055b184c7b6c16f2ece8067e51
Date: Mon Feb 15 10:44:18 2016 -0500
Initial commit
Persze, nem látjuk az első kísérletünk módosításait a naplóban, és nem látjuk az egyesítést sem! Még mindig ott vannak? A Git teljesen megszüntette a módosításokat?
> git log --full-history test.txt
Mint látható, bár a jelölő nélkül egyszerűsítette a naplót, a full-history
Git megtartotta az összes módosítást:
> commit 5d0bb77a24e265dc154654fb3b5be331b53bf977
Merge: 6b33d99 fdd4dfd
Date: Mon Feb 15 10:59:34 2016 -0500
Fixed merge conflict
commit fdd4dfd816c4efebc5bdb240f49e934e299db581
Date: Mon Feb 15 10:51:06 2016 -0500
We have added a fruit
commit 6b33d99b996c430a60c9552b79245d1aa8320339
Date: Mon Feb 15 10:45:33 2016 -0500
We have added an animal
commit 206613ccd9a54b055b184c7b6c16f2ece8067e51
Date: Mon Feb 15 10:44:18 2016 -0500
Initial commit
Git-előzmények egyszerűsítési összefoglalása
A történelem egyszerűsítése az, hogy az idő nagy részében soha nem fogja észrevenni. Ha azonban az egyesítési ütközés hibás, és tudni szeretné, hogy mi történt, előfordulhat, hogy megtekinti a gitnapló előzményeit, és kíváncsi arra, hogy hová mentek a módosítások.
Most, ahelyett, hogy pánik, tudod, hogy:
- A fájlok előzményeinek egyszerűsítése alapértelmezés szerint be van kapcsolva
- A
--full-history
jelölő átfogóbb fájlelőzményeket biztosít
Frissítés: Mivel ezt a cikket írtam, az Azure DevOps Services számos fantasztikus előzménymegtekintési lehetőséget vezetett be a weben. Ez azt jelenti, hogy ha nem szeretné végighaladni a parancssoron, egyszerűen lekérheti azt a fájlt, amelynek előzményeit meg szeretné tekinteni a böngészőben, és az alábbi előzményszűrővel fog megjelenni, ahol egyszerű vagy nem egyszerű előzménynézeteket adhat meg:
(c) 2016 Microsoft Corporation. Minden jog fenntartva. Ezt a dokumentumot a rendszer az "is"-ként adja meg. A dokumentumban kifejezett információk és nézetek, beleértve az URL-címet és más internetes webhelyhivatkozásokat, értesítés nélkül változhatnak. A használat kockázata Önt terheli.
A jelen dokumentum egyetlen Microsoft-termékben foglalt szellemi termékkel kapcsolatban sem biztosít Önnek jogokat. A dokumentumot belső segédanyag céljára lemásolhatja és felhasználhatja.