GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak Git funguje?

Úvod

Git je celosvětově nejpopulárnější decentralizovaný systém pro správu verzí. Dobrá znalost Gitu je nezbytná, pokud chcete kódovat a pracovat na společném projektu vývoje softwaru.

V tomto článku se dozvíte, jak Git funguje a jak používat jeho klíčové funkce.

Předpoklady

  • Git nainstalován a nakonfigurován (viz jak nainstalovat Git na Windows, nainstalovat Git na Mac, nainstalovat Git na Ubuntu, nainstalovat Git na CentOS 7 nebo nainstalovat Git na CentOS 8)

Jak Git funguje?

Git umožňuje uživatelům sledovat změny kódu a spravovat svůj projekt pomocí jednoduchých příkazů.

Srdcem systému Git je úložiště slouží k tomu, aby obsahoval projekt. Úložiště může být uloženo lokálně nebo na webu, jako je GitHub. Git umožňuje uživatelům ukládat několik různých úložišť a sledovat každé z nich nezávisle.

Během vývoje má projekt několik bodů uložení, nazývaných závazky . Historie odevzdání obsahuje všechna potvrzení, tj. změny implementované v projektu během vývoje. Potvrzení vám umožňuje vrátit kód zpět nebo rychle vpřed do libovolného potvrzení v historii odevzdání.

Git používá Hash SHA-1 odkazovat na závazky. Každý jedinečný hash ukazuje na konkrétní potvrzení v úložišti. Pomocí hashů Git vytváří stromovou strukturu pro snadné ukládání a načítání dat.

Soubory v každém projektu Git procházejí několika fázemi:

  • Pracovní adresář . Upravené soubory, ale nesledované a ještě nejsou připraveny k odevzdání.
  • Přístupový adresář . Přidání upravených souborů do pracovního prostředí znamená, že jsou připraveny k odevzdání.
  • Zavázáno . Snímky souborů z pracovní oblasti uložené v historii odevzdání.

Následující diagram ukazuje základní pracovní postup Git:

Následující části podrobně vysvětlují funkce Git.

Staging

Když chcete, aby Git sledoval změny, které jste provedli v určitém souboru, musíte jej přidat do pracovní oblasti. Git rozpozná, když soubor upravíte, ale nesleduje jej, pokud jej neupravíte . Pracovní oblast představuje vrstvu zabezpečení, která vám umožňuje zkontrolovat změny před jejich potvrzením.

Být v pracovní oblasti je předpokladem pro to, aby byly soubory později potvrzeny, tj. implementovány na hlavní větvi. Můžete zkontrolovat, které soubory Git sleduje, spuštěním:

git status

Chcete-li přidat soubor do pracovní oblasti, použijte následující syntaxi:

git add [filename]

Nahraďte [filename] syntaxe se skutečným názvem souboru.

Například:

Pokud si to rozmyslíte, můžete soubor z pracovní oblasti odstranit. Chcete-li zrušit fázi souboru, použijte následující syntaxi:

git rm --cached [filename]

Například:

Vytváření závazků

Potvrzení představuje bod uložení pro vaši práci, snímek vašeho kódu v určitém okamžiku. Přidání souborů do pracovní oblasti znamená, že jsou připraveny k potvrzení.

Chcete-li zkontrolovat, zda máte nějaké soubory připravené k potvrzení, spusťte:

git status

Například:

Zde vidíme, že tři soubory jsou připraveny k odevzdání. Chcete-li je potvrdit, použijte následující syntaxi:

git commit -m "Notes about the commit"

Každé potvrzení by mělo mít popis zadaný za -m flag, který vám později pomůže zjistit, čeho se odevzdání týkalo.

Například:

Výstup obsahuje potvrzení a uvádí, co bylo změněno.

Můžete zkontrolovat svou historii závazků spuštěním:

git log

Výstup zobrazuje protokol všech provedených odevzdání, kdo provedl odevzdání, datum a poznámky k odevzdání. Přidání --oneline flag zobrazuje historii odevzdání zhuštěnou v jednom řádku. Vynecháním příznaku se zobrazí podrobná historie odevzdání.

Návrat

Pokud jste během vývoje projektu udělali chyby nebo chcete z jakéhokoli důvodu vrátit potvrzení, git revert vám to umožňuje.

git revert příkaz vrátí konkrétní potvrzení, tj. zruší potvrzení, které jste provedli, abyste odstranili změny z hlavní větve.

Syntaxe je:

git revert [commit_ID]

Najděte ID odevzdání spuštěním git log . 7místný kód je ID odevzdání.

Následující příklad ukazuje git revert příkaz:

git reset příkaz trvale vás vrátí do určitého bodu vývoje. Všechny soubory a změny přidané po tomto okamžiku jsou zrušeny, pokud je chcete znovu přidat.

Upozornění: Použijte git reset pouze pokud jste si zcela jisti, že chcete vrátit zpět/smazat části kódu, protože tato akce je nevratná.

Syntaxe je:

git reset [commit_ID]

Zadání --hard flag odstraní neuspořádané soubory, takže je nelze vrátit zpět.

Rozvětvení

Fork je kompletní kopie existujícího úložiště což vám umožňuje provádět změny a experimentovat, aniž by to ovlivnilo původní projekt. Forking je způsob, jak může někdo navrhnout změny existujícího projektu, nebo může být výchozím bodem pro váš vlastní projekt, pokud je kód open source.

Pokud chcete navrhnout změnu nebo opravu chyby pro projekt, můžete rozdělit úložiště, provést opravu a odeslat žádost o stažení vlastníkovi projektu.

Následující diagram ukazuje, jak funguje rozvětvení:

Chcete-li rozdělit úložiště, postupujte podle následujících kroků:

1. Přihlaste se ke svému účtu GitHub.

2. Navštivte stránku úložiště na GitHubu a klikněte na Fork možnost.

3. Počkejte na dokončení procesu rozvětvení. Po dokončení budete mít kopii úložiště na svém účtu GitHub.

4. Dalším krokem je zadání adresy URL úložiště z Kódu a naklonujte úložiště do místního počítače.

5. Naklonujte úložiště pomocí následující syntaxe:

git clone [repository URL]

Místo [repository URL] zadejte adresu URL syntaxe.

Například:

V tomto příkladu jsme vytvořili větev springmvc-raml-plugin úložiště a nyní můžeme volně implementovat naše změny nebo začít budovat nový plugin nad stávajícím.

Větvení

Větvení je funkce v Gitu, která umožňuje vývojářům pracovat na kopii původního kódu, aby opravili chyby nebo vyvíjeli nové funkce. Tím, že vývojáři pracují na větvi, neovlivňují hlavní větev dokud nebudou chtít provést změny.

Hlavní větev obecně představuje stabilní verzi vašeho kódu, který je uvolněn nebo zveřejněn. Proto byste se měli vyhnout přidávání nových funkcí a nového kódu do hlavní větve, pokud jsou nestabilní.

Větvení vytváří izolované prostředí vyzkoušet nové funkce, a pokud se vám budou líbit, můžete je sloučit do hlavní větve. Pokud se něco pokazí, můžete větev smazat a hlavní větev zůstane nedotčena.

Větvení usnadňuje společné programování a umožňuje každému pracovat na své části kódu současně.

Následující diagram je vizuální reprezentací větvení v Gitu:

Syntaxe pro vytvoření nové větve v Gitu je:

git branch [branch-name]

Místo [branch-name] zadejte název své pobočky syntax. Například:

V tomto příkladu jsme vytvořili novou větev s názvem feature-1 .

Slučování a konflikty

git merge příkaz umožňuje vývojářům pracujícím na nové funkci nebo opravě chyby v samostatné větvi sloučit své změny s hlavní větví po dokončení. Sloučení změn znamená jejich implementaci do hlavní větve.

Vývojáři mohou vložit své změny pomocí git merge aniž by museli posílat své práce všem, kteří na projektu pracují.

Chcete-li zobrazit své stávající pobočky, spusťte:

git branch -a

Pro tento tutoriál jsme vytvořili samostatnou větev s názvem feature-1 . Chcete-li sloučit funkci-1 větev s master větev, postupujte podle následujících kroků:

1. Přepněte na hlavní větev. git merge příkaz vyžaduje, abyste byli ve větvi pro příjem sloučení. Spusťte následující příkaz pro přepnutí do hlavní větve:

git checkout master

2. Po přepnutí do hlavní větve použijte ke sloučení změn následující syntaxi:

git merge [branch-name]

Místo [branch-name] zadejte název své pobočky syntaxe.

Například:

Git automaticky vloží vaše změny do hlavní větve, kterou uvidí kdokoli, kdo na projektu pracuje.

Někdy však můžete narazit na sloučení konflikty .

Ke konfliktu například dojde, pokud se někdo rozhodne provést úpravy na hlavní větvi, zatímco vy pracujete na jiné větvi. K tomuto typu konfliktu dochází, protože chcete sloučit své změny s hlavní větví, která se nyní liší od vaší kopie kódu.

Náš podrobný průvodce nabízí několik různých metod pro řešení konfliktů sloučení v Gitu.

Načítání / stahování změn

git fetch a git pull oba příkazy se používají k načtení změn ze vzdáleného úložiště.

Rozdíl je v tom, že git fetch pouze načte metadata ze vzdáleného úložiště, ale nic nepřenese do vašeho místního úložiště. Pouze vás informuje, zda jsou k dispozici nějaké změny od posledního stažení.

V následujícím příkladu git fetch nás informuje, že ve vzdáleném úložišti došlo k určitým změnám, ale v místním úložišti se nic nezměnilo:

Na druhou stranu git pull také zkontroluje všechny nové změny ve vzdáleném úložišti a přenese tyto změny do vašeho místního úložiště.

Takže git pull dělá dvě věci jedním příkazem – git fetch a git merge . Příkaz stáhne změny provedené ve vaší aktuální větvi a aktualizuje kód ve vašem místním úložišti.

Například:

V tomto výstupu vidíme, že šlo o typ rychlého sloučení a že Git stáhl jeden soubor do místního úložiště - README.md .

Prosazování změn

git push příkaz dělá opak git pull , což vám umožní sdílet změny a publikovat je ve vzdáleném úložišti.

Když provedete změny lokálně a chcete je odeslat do vzdáleného úložiště, spusťte:

git push

Například:

Pokud jste lokálně vytvořili novou větev, která vzdáleně neexistuje, vrátí příkaz při pokusu o prosazení změn chybu:

Git nabízí řešení ve výstupu. Spuštěním příkazu zadaného ve výstupu pošlete svou větev proti proudu:

Změna základu

Když vytvoříte větev, Git vytvoří kopii stávajícího kódu, kterou můžete dále rozvíjet. Někdy může být potřeba začlenit nové změny z hlavní větve držet krok s obecným vývojem.

Rebasing zahrnuje implementaci nových změn z hlavní větve do vaší větve funkcí. To znamená, že Git přehraje nové změny z hlavní větve a vytvoří potvrzení nad špičkou vaší větve funkcí.

Chcete-li znovu založit větev funkcí, postupujte takto:

1. Přejděte do větve funkcí pomocí git checkout . Syntaxe je:

git checkout [branch-name]

2. Spuštěním následujícího příkazu znovu založte větev:

git rebase master

Následující diagram ukazuje, jak funguje funkce rebase:


Ubuntu
  1. Co je NGINX? Jak to funguje?

  2. Jak Awk ‚!a[$0]++‘ funguje?

  3. Jak Sticky Bit funguje?

  1. Ssh – Jak funguje Tcp-keepalive v Ssh?

  2. Jak Sanlock funguje ve virtualizaci RedHat

  3. Jak rm funguje? Co dělá rm?

  1. Jak vlastně sig_atomic_t funguje?

  2. Jak omezit velikost souboru při odevzdání?

  3. Jak funguje debugger v Linuxu?