Git

Git Tutorial for begyndere

Git Tutorial for begyndere

Softwareudvikling er et samarbejdsjob. Som softwareingeniør skal du dele dit arbejde med andre. Men deling af kode og samarbejde kan blive kompliceret. Det er svært at holde styr på forskellige ændringer, der sker under en softwares livscyklus. Så udviklingshold er afhængige af versionskontrolværktøjer til at hjælpe med softwaresamarbejdsprocessen. Git er et af de mest prominente versionskontrolværktøjer i softwareindustrien.

Tip: I denne vejledning lærer du, hvordan du bruger de grundlæggende i Git. Hver sektion slutter med et par spørgsmål. Du kan læse spørgsmålene, inden du begynder at læse sektionen. Dette hjælper dig med at forstå og være opmærksom på de vigtige punkter.

Hav det sjovt at lære Git!

Git: En kort oversigt

Git er et distribueret versionskontrolsystem. Det holder styr på de ændringer, du foretager i dine filer og mapper. Det gør det nemmere at gemme dit igangværende arbejde. Hvis der er et problem, kan du nemt kontrollere en tidligere version af filen eller mappen. Om nødvendigt kan du endda gendanne hele din codebase til en ældre version.

Udviklingen af ​​Git startede i 2005. Linux-kernel-gruppen plejede at vedligeholde deres kode i BitKeeper, et proprietært distribueret versionskontrolsystem. Imidlertid trak BitKeeper sin gratis brug af produktet tilbage. Så Linus Torvalds, skaberen og hovedudvikleren af ​​Linux, designede et nyt open source-distribueret versionskontrolsystem, der ville opfylde kravene i Linux-udviklingssamfundet. Og Git blev født.

Som et distribueret versionskontrolsystem kræver Git ikke en central myndighed til at holde styr på koden. Ældre centraliserede versionskontroller som CVS, SVN eller Perforce kræver centrale servere for at opretholde ændringshistorikken. Git kan holde styr på alle ændringer lokalt og arbejde peer-to-peer. Så det er mere alsidigt end centraliserede systemer.

Spørgsmål:

Installation af Git

For Linux-systemer er installation af Git let. Hvis du bruger en Debian-baseret distribution som Ubuntu, kan du bruge apt install:

$ sudo apt installere git-all

For Fedora, RHEL eller CentOS kan du bruge:

$ sudo dnf installerer git-all

Du kan kontrollere, om Git er installeret ved hjælp af følgende kommando:

$ git --version

Det skal vise dig versionen af ​​den Git, du installerede, for eksempel:

git version 2.17.0

Når du har installeret Git, er det tid til at konfigurere dit brugernavn og din e-mail:

$ git config - global bruger.navn "dit brugernavn"
$ git config - global bruger.e-mail "[email protected]"

Du kan kontrollere, om konfigurationerne er indstillet korrekt ved hjælp af følgende kommando:

$ git config - liste
bruger.navn = dit brugernavn
bruger.e-mail = dit brugernavn @ eksempel.com

Tip: Det er vigtigt at indstille brugeren.navn og bruger.e-mail, fordi disse konfigurationer bruges til at spore dine ændringer.

Spørgsmål

Forstå Git konceptuelt

For at kunne bruge Git skal du først forstå disse fire begreber:

Arbejdsmappen, iscenesættelsesområdet og arkivet er lokale for din maskine. Fjernlageret kan være enhver anden computer eller server. Lad os tænke på disse begreber som fire kasser, der kan indeholde standard A1-papirer.

Antag at du skriver et dokument i hånden på et A1-papir ved dit skrivebord. Du opbevarer dette dokument i arbejdskatalogboksen. På et bestemt tidspunkt i dit arbejde beslutter du, at du er klar til at gemme en kopi af det arbejde, du allerede har udført. Så du laver en fotokopi af dit aktuelle papir og lægger det i iscenesættelsesboksen.

Iscenesættelsesboksen er et midlertidigt område. Hvis du beslutter dig for at kassere fotokopien i iscenesættelsesboksen og opdatere den med en ny kopi af arbejdskatalogdokumentet, vil der ikke være nogen permanent registrering af det iscenesatte dokument.

Antag at du er temmelig sikker på, at du vil gemme den permanente oversigt over det dokument, du har, i iscenesættelsesboksen. Derefter laver du en fotokopi af iscenesættelsesdokumentet og flytter det til arkivboksen.

Når du flytter det til lagerboksen, sker der to ting:

  1. Et øjebliksbillede af dokumentet gemmes permanent.
  2. En logfilpost er lavet til at gå med snapshotet.

Logposten hjælper dig med at finde det aktuelle øjebliksbillede af dit dokument, hvis du har brug for det i fremtiden.

Nu i det lokale arkivfelt har du et øjebliksbillede af dit arbejde og en logindgang. Men det er kun tilgængeligt for dig. Så du laver en kopi af dit lokale arkivdokument sammen med logfilen og lægger den i en kasse i virksomhedens forsyningsrum. Nu kan alle i din virksomhed komme og lave en kopi af dit dokument og tage det med til deres skrivebord. Kassen i forsyningsrummet ville være det eksterne lager.

Fjernlageret er ligesom at dele dit dokument ved hjælp af Google Docs eller Dropbox.

Spørgsmål:

Dit første Git-arkiv

Når du har installeret Git, kan du begynde at oprette dine egne Git-arkiver. I dette afsnit vil du initialisere dit Git-arkiv.

Antag at du arbejder på et webudviklingsprojekt. Lad os oprette en mappe kaldet project_helloworld og skifte til biblioteket:

$ mkdir project_helloworld
$ cd project_helloworld

Du kan bede Git om at overvåge denne mappe med følgende kommando:

$ git init

Du skal se en output som denne:

Initialiseret tomt Git-arkiv i / Brugere / zakh / _work / LearnGIT / git_tutorial /
project_helloworld /.git

Nu spores alle filer og mapper inde i project_helloworld af Git.

Spørgsmål:

Grundlæggende Git-kommandoer: status, log, tilføj og begå

Statuskommandoen viser den aktuelle tilstand for din arbejdsmappe, og logkommandoen viser historikken. Lad os prøve statuskommandoen:

$ git status
På filialmester
Indledende forpligtelse
intet at begå (opret / kopier filer og brug "git add" til at spore)

Outputtet fra git-statuskommandoen siger, at du er på mastergrenen. Dette er standardgrenen, som Git initialiserer. (Du kan oprette dine egne filialer. Mere om filialer senere). Også produktionen siger, at der ikke er noget at begå.

Lad os prøve logkommandoen:

$ git log
fatalt: din nuværende filial 'master' har ikke nogen forpligtelser endnu

Så det er tid til at oprette en kode. Lad os oprette en fil kaldet indeks.html:


Min webside


Hej Verden

Du kan bruge teksteditoren til at oprette filen. Når du har gemt filen, skal du kontrollere status igen:

$ git status
På filialmester
Indledende forpligtelse
Usporede filer:
(brug "git add ... "at medtage i, hvad der vil blive begået)
indeks.html
intet tilføjet for at begå, men ikke-sporede filer til stede (brug "git add" for at spore)

Git fortæller dig, at du har en fil, der hedder indeks.html i din arbejdsmappe, der ikke er sporet.

Lad os sørge for at indeksere.html spores. Du bliver nødt til at bruge tilføjkommandoen:

$ git tilføj indeks.html

Alternativt kan du bruge “.”Mulighed for at tilføje alt i biblioteket:

$ git tilføj .

Lad os nu kontrollere status igen:

$ git status
På filialmester
Indledende forpligtelse
Ændringer, der skal begås:
(brug "git rm - cached ... "for at afbryde scenen)
ny fil: indeks.html

Det grønne indikerer, at indekset.html-filen spores af Git.

Tip: Som nævnt i instruktionerne ovenfor, hvis du bruger kommandoen:

$ git rm - cached indeks.html

Dit indeks.html vender tilbage til ikke-sporet status. Du bliver nødt til at tilføje det igen for at bringe det tilbage til iscenesættelse.]

Lad os kontrollere loggen igen:

$ git log
fatalt: din nuværende filial 'mester' har ikke nogen forpligtelser endnu

Så selvom Git sporer indeks.html, der er ikke noget i Git-arkivet om filen endnu. Lad os begå vores ændringer:

$ git commit -m "Forpligtende indeks.html "
Outputtet skal se sådan ud:
[master (root-commit) f136d22] Forpligtende indeks.html
1 fil ændret, 6 indsættelser (+)
Opret tilstand 100644 indeks.html

Teksten inde i citaterne efter “-m” er en kommentar, der går ind i logfilen. Du kan bruge git commit uden “-m”, men så åbner Git en teksteditor der beder dig om at skrive kommentarerne. Det er lettere at bare placere kommentarerne direkte på kommandolinjen.

Lad os nu kontrollere vores logfil:

$ git log
begå f136d22040ba81686c9522f4ff94961a68751af7
Forfatter: Zak H
Dato: Mandag 4. juni 16:53:42 2018 -0700
Forpligtende indeks.html

Du kan se, at det viser en forpligtelse. Du har med succes foretaget dine ændringer i dit lokale lager. Hvis du vil se den samme log på en kortfattet måde, kan du bruge følgende kommando:

$ git log - online
f136d22 Forpligtelsesindeks.html

Fremadrettet bruger vi denne form for logkommandoen, fordi det gør det lettere at forstå, hvad der foregår.

Lad os begynde at redigere indekset.html. Åbn indekset.html-fil i en editor og skift linjen "Hello world" til "Hello world! Det er mig!”Og gem det. Hvis du tjekker status igen, kan du se, at Git har bemærket, at du redigerer filen:

$ git status
På filialmester
Ændringer, der ikke er iscenesat for forpligtelse:
(brug "git add ... "for at opdatere, hvad der vil blive begået)
(brug "git checkout -- ... "for at kassere ændringer i arbejdskataloget)
ændret: indeks.html
ingen ændringer tilføjet til commit (brug "git add" og / eller "git commit -a")

Ændringen findes stadig i din arbejdsmappe. Du skal skubbe det til iscenesættelsesområdet. Brug add-kommandoen, du brugte før:

$ git tilføj .

Kontroller status igen:

$ git status
På filialmester
Ændringer, der skal begås:
(brug "git reset HEAD ... "for at afbryde scenen)
ændret: indeks.html

Nu er dine ændringer i iscenesættelsesområdet. Du kan forpligte det til arkivet til permanent opbevaring:

$ git commit -m "Ændret indeks.html til en lykkeligere besked "
[master 0586662] Ændret indeks.html til en lykkeligere besked
1 fil ændret, 1 indsættelse (+), 1 sletning (-)

Du kan kontrollere loggen for dine permanente ændringer:

$ git log - online
0586662 Ændret indeks.html til en lykkeligere besked
f136d22 Forpligtelsesindeks.html

I dette afsnit har du lært at bruge status, logge, tilføje og forpligte kommandoer til at holde styr på dine dokumenter i Git.

Spørgsmål:

  • Hvad gør git-status?
  • Hvad gør git log?
  • Hvad gør git add gøre?
  • Hvad gør git commit?

Gå tilbage til ældre filer ved hjælp af kassen

Når du begår en fil i Git, opretter den en unik hash for hver forpligtelse. Du kan bruge disse som identifikatorer for at vende tilbage til en ældre version.

Lad os antage, at du vil gå tilbage til din tidligere version af indekset.html. Lad os først se på indekset.html i den aktuelle tilstand:

$ kat-indeks.html

Min webside


Hej Verden! Det er mig!

Du kan se, at du har den nyere version (“Hej verden! Det er mig!”). Lad os kontrollere loggen:

$ git log - online
0586662 Ændret indeks.html til en lykkeligere besked
f136d22 Forpligtende indeks.html

Hashet til den tidligere version var f136d22 (“Hej verden”).  Du kan bruge checkout-kommandoen for at komme til den version:

$ git checkout f136d22
Bemærk: tjek 'f136d22'.
Du er i 'løsrevet HEAD'-tilstand. Du kan se dig omkring, foretage eksperimentelle ændringer
og begå dem, og du kan kassere alle forpligtelser, du foretager i denne tilstand
uden at påvirke nogen grene ved at udføre en anden kasse.
Hvis du vil oprette en ny gren for at bevare de forpligtelser, du opretter, kan du
gør det (nu eller senere) ved at bruge -b med checkout-kommandoen igen. Eksempel:
git checkout -b
HEAD er nu på f136d22 ... Forpligtende indeks.html

Hvis du ser på indholdet af indekset.html, du vil se:

$ kat-indeks.html

Min webside


Hej Verden

Det har kun "Hej verden". Så dit indeks.html er ændret til den ældre version. Hvis du kontrollerer status:

$ git status
HOVED løsrevet på f136d22
intet at begå, arbejder bibliotek ren

Git fortæller dig grundlæggende, at HEAD ikke er ved den seneste begåelse. Du kan gå tilbage til den seneste forpligtelse ved at tjekke mastergrenen ved hjælp af følgende kommando:

$ git checkout master
Tidligere HEAD-position var f136d22 ... Forpligtende indeks.html
Skiftet til gren 'master'

Nu hvis du tjekker status:

$ git status
På filialmester
intet at begå, arbejder bibliotek ren

Den røde advarsel er væk. Også, hvis du tjekker dit indeks.html, du skal være tilbage til den nyeste version:

$ kat-indeks.html

Min webside

Hej Verden! Det er mig!

Kassen kommandoen bringer dig til forskellige stater. Vi lærer mere om kassen i det næste afsnit.

Spørgsmål:

  • Hvordan bruger du kommandoen git checkout til at gå til en ældre version af en fil?
  • Hvordan bruger du git checkout for at komme tilbage til den nyeste version af filen?

Kasse, forgrening og fletning

Forgrening er en af ​​Gits bedste funktioner. Det hjælper dig med at adskille dit arbejde og eksperimentere mere. I andre versionskontrolsystemer var forgrening tidskrævende og vanskelig. Git gjorde forgrening og fusion lettere.

Som du bemærkede i statuskommandoen, er du i mastergrenen, når du opretter et nyt Git-arkiv.

$ git status
På filialmester
intet at begå, arbejder bibliotek ren

Antag at du laver et websted til din ven David. Du vil genbruge koden på dit eget websted. Forgrening er en god løsning. Lad os kalde filialen david_website.

Du kan udstede følgende kommando:

$ git gren david_website

Du kan bruge følgende kommando til at se alle grenene:

$ git gren - liste
david_website
* mester

Stjernen (*) ved siden af ​​mester betyder, at du stadig er i mestergrenen. Du kan tjekke david_website-grenen med følgende kommando:

$ git checkout david_website
Skiftet til gren 'david_website'

Nu hvis du igen tjekker grenlisten, ser du:

$ git gren - liste
* david_website
mestre

Så du er på david_website-grenen.

Lad os ændre indekset.html fra “Hej verden! Det er mig!”Til“ Hej verden! Det er David!”Og derefter iscenesætte og begå det:

$ git tilføj .
$ git commit -m "Ændret websted for David"

Hvis du tjekker logfilerne, skal du se:

$ git log - online
345c0f4 Ændret hjemmeside for David
0586662 Ændret indeks.html til en lykkeligere besked
f136d22 Forpligtende indeks.html

Og din indeksfil skal se sådan ud:

$ kat-indeks.html

Min webside


Hej Verden! Det er David!

Lad os nu tjekke mastergrenen igen:

$ git checkout master
Skiftet til gren 'master'

Hvis du kontrollerer status og log:

$ git status
På filialmester
intet at begå, arbejder bibliotek ren
$ git log - online
0586662 Ændret indeks.html til en lykkeligere besked
f136d22 Forpligtelsesindeks.html

Bemærk, at du ikke har din tredje forpligtelse i mesteren. Fordi denne forpligtelse kun opretholdes i david_website-grenen.

Dette er hvad der skete

Antag, at du på dette tidspunkt beslutter, at du ikke vil fortsætte dit websted. Du bliver bare udvikler for David. Så du vil flette ændringerne i david_website-grenen til mesteren. Fra mastergrenen skal du bare udstede følgende kommandoer (statuskommandoen bruges til at kontrollere, om du er på det rigtige sted):

$ git status
På filialmester
intet at begå, arbejder bibliotek ren
 
$ git fusionere david_website
Opdaterer 0586662… 345c0f4
Spol frem
indeks.html | 2 +-
1 fil ændret, 1 indsættelse (+), 1 sletning (-)

Tip: Du trækker ændringer fra david_website til master. Du skal være på mesteren for at opnå dette.

Nu hvis du tjekker loggen på masteren, ser du at den tredje forpligtelse er der:

$ git log - online
345c0f4 Ændret hjemmeside for David
0586662 Ændret indeks.html til en lykkeligere besked
f136d22 Forpligtende indeks.html

Du har sammenlagt david_website-filialen til master. Og dit indeks.html for master gren ser identisk ud med david_website gren:

$ kat-indeks.html

Min webside


Hej Verden! Det er David!

Du kan beholde filialen david_website:

$ git gren - liste
david_website
* mester

Eller du kan slette det:

$ git gren -d david_website
Slettet filial david_website (var 345c0f4).

Efter sletning skal du ikke se david_website-grenen længere:

$ git gren - liste
* mester

Tip: Hvis Git ikke kan flette automatisk under en fletning, vil det give dig flette konfliktfejl. I så fald skal du manuelt løse fletteproblemerne.

Spørgsmål:

  • Hvorfor har du brug for forgrening??
  • Hvordan forgrener og fletter du filer og mapper?

Fjernlager

Indtil nu har alt dit arbejde været lokalt. Du har foretaget dine ændringer i et lokalt lager. Men det er tid til at dele dit arbejde med verden.

Git remote repository er dybest set en anden kopi af dit lokale repository, som andre kan få adgang til. Du kan oprette en server og gøre den til det eksterne lager. Men de fleste bruger GitHub eller Bitbucket til dette formål. Du kan oprette offentlige opbevaringssteder gratis der, som alle kan få adgang til.

Lad os oprette et eksternt lager på GitHub.

Først skal du oprette en GitHub-konto []. Når du har kontoen, skal du oprette et nyt lager ved hjælp af knappen "Nyt lager". Brug "project_website" som lagernavnet (du kan vælge noget andet, hvis du vil).

Du skal se en kode-fane med instruktioner som disse:

... eller opret et nyt lager på kommandolinjen

ekko "# project_website" >> LÆS.md
git init
git tilføj README.md
git commit -m "first commit"
git remote tilføj oprindelse git @ github.com: dit brugernavn / projekt_website.git
git push -u oprindelsesmester

Kopier følgende kommando "git remote add origin" og kør den i din arbejdsmappe:

$ git remote tilføj oprindelse git @ github.com: dit brugernavn / projekt_website.git

Bemærk: I dit tilfælde skal dit brugernavn være det, du brugte til at oprette din GitHub-konto.

I ovenstående kommando instruerede du Git placeringen af ​​det eksterne lager. Kommandoen fortæller Git, at "oprindelsen" til dit projekt_helloworld-arbejdskatalog vil være "[e-mailbeskyttet]: dit brugernavn / projekt_website.git ”.

Skub nu din kode fra din hovedfilial til oprindelse (fjernlager):

$ git push oprindelsesmester
Optælling af objekter: 9, færdig.
Delta-kompression ved hjælp af op til 4 tråde.
Komprimerende objekter: 100% (6/6), færdig.
Skriveobjekter: 100% (9/9), 803 bytes | 0 byte / s, færdig.
I alt 9 (delta 2), genbrugt 0 (delta 0)
fjernbetjening: Løsning af deltaer: 100% (2/2), færdig.
At git @ github.com: dit brugernavn / projekt_website.git
* [ny gren] master -> master

Hvis du opdaterer din browser i GitHub, skal du se, at indekset.html-filen er deroppe. Så din kode er offentlig, og andre udviklere kan tjekke ud og ændre kode på fjernlageret.

Som udvikler arbejder du med andres kode. Så det er værd at prøve at tjekke koden fra GitHub.

Lad os gå til en ny mappe, hvor du ikke har noget. På højre side af GitHub-arkivet bemærker du knappen "Klon eller download". Hvis du klikker på det, skal det give dig en SSH-adresse. Kør følgende kommando med SSH-adressen:

$ git klon git @ github.com: dit brugernavn / projekt_website.git

Outputtet skal se sådan ud:

$ git klon git @ github.com: dit brugernavn / projekt_website.git
Kloning til 'projekt_website' ..
fjernbetjening: Tæller objekter: 9, færdig.
fjernbetjening: Komprimering af objekter: 100% (4/4), færdig.
fjernbetjening: I alt 9 (delta 2), genbrugt 9 (delta 2), genbrugt pakke 0
Modtagende objekter: 100% (9/9), færdig.
Løsning af deltaer: 100% (2/2), færdig.
Kontrollerer tilslutningsmuligheder ... færdig.

Det opretter et projekt_website i din rene mappe. Hvis du går ind, skal du se indekset.html fra din project_helloworld.

Så du har opnået følgende:

  • Oprettet og foretaget ændringer i project_helloworld
  • Uploadede koden til GitHub på projekt_website
  • Downloadede koden fra GitHub

Lad os en anden fil fra den nye arbejdsmappe project_website:

$ tryk på ReadMe.md
$ git tilføj .
$ git commit -m "Tilføjet ReadMe.md "
$ git push oprindelsesmester

Hvis du opdaterer siden GitHub project_website, skal du se ReadMe.md-fil der.

Bemærk: Når du downloader kode fra GitHub, kender arbejdsmappen automatisk oprindelsen. Du behøver ikke definere det med kommandoen “git remote add origin”.

Spørgsmål:

  • Hvorfor har du brug for fjernopbevaringssteder?
  • Hvordan konfigurerer du dit nuværende lokale lager til at oprette forbindelse til det eksterne lager?
  • Hvordan kloner du fjernopbevaringssteder til din lokale computer?

Konklusion

Du kan finde flere oplysninger om alle kommandoerne i Git docs []. Selvom der findes Git UI-værktøjer, er kommandolinje den bedste måde at mestre Git på. Det vil give dig et stærkere fundament for dit udviklingsarbejde.

Yderligere studier:
  • https: // git-scm.com / docs
  • https: // git-scm.com / book / da / v2
  • https: // git-scm.com / videoer
Top 5 spiloptagelseskort
Vi har alle set og elsket streaming af gameplay på YouTube. PewDiePie, Jakesepticye og Markiplier er kun nogle af de bedste spillere, der har tjent mi...
Sådan udvikler du et spil på Linux
For et årti siden ville ikke mange Linux-brugere forudsige, at deres foretrukne operativsystem en dag ville være en populær spilplatform til kommercie...
Open Source-porte med kommercielle spilmotorer
Gratis, open source og cross-platform spilmotorgendringer kan bruges til at spille gamle såvel som nogle af de temmelig nylige spiltitler. Denne artik...