Un tutorial complet despre utilizarea GitHub

Ați început recent să folosiți Git? Sau poate îl folosești de ceva vreme, dar numeroasele sale mistere sunt încă confuze.

Git este în primul rând un sistem de control al versiunilor și o bază în orice proiect de dezvoltare software. De obicei servește 2 scopuri principale: backup de coduri și versiunea de cod. Puteți lucra pas cu pas codul dvs., salvând progresul fiecărui pas pe parcurs, în cazul în care aveți nevoie de returnare la o copie de rezervă!

Problema comună este că Git poate fi dificil de utilizat. Există momente în care versiunile și ramurile nu sunt sincronizate și petreci mult timp doar încercând să împingi codul! și mai rău, neștiind exact cum funcționează anumite comenzi poate duce cu ușurință la ștergerea sau suprascrierea accidentală a biților de cod!

Acesta este motivul pentru care am pregătit acest tutorial, pentru a vă învăța cum să folosiți corect git, astfel încât să putem trece la codare!

Instalare și configurare

instalarea

În primul rând, trebuie să instalăm git pentru a-l folosi! Putem face acest lucru rapid și ușor folosind apt:

sudo apt instala git-all

Configurare de bază

Dacă doriți, puteți merge mai departe și să vă salvați numele de utilizator și e-mailul git, astfel încât să nu mai fie necesar să le introduceți din nou pentru comenzile viitoare de la git.

git config --global user.name "User Name"
git config --global user.email "email"

colorate

Un truc îngrijit pe care unii îl ratează adesea este acela că puteți permite colorarea suplimentară pentru a face un pic, astfel încât să puteți citi mai ușor ieșirea comenzilor!

git config --global color.ui true

Controlul versiunii de bază

Inițializarea gitului

Acum putem începe versiunea proiectului nostru. Continuați și navigați la directorul pentru care doriți să configurați controlul versiunii în terminal utilizând comanda standard „cd”. Acum puteți inițializa un depozit git astfel:

git init

Aceasta creează un nou subdirector numit .git care conține toate fișierele dvs. de depozitare necesare - un schelet de depozit Git. În acest moment, nimic din proiectul dvs. nu este încă urmărit.

Adăugarea și angajarea

Pentru a începe controlul versiunilor fișiere existente, ar trebui să începeți urmărind aceste fișiere și faceți o angajare inițială. Pentru a realiza acest lucru, începeți prin a adăuga fișierele la git pe care doriți să le atașați proiectului git.

git add 
git commit -m 'primul comit'

Copie de rezervă de la distanță

Grozav! Ați început să faceți versiunea la nivel local a proiectului dvs. GitHub. Dacă doriți să salvați și să faceți backup pentru proiectul de la distanță, va trebui să creați un depozit la distanță pe GitHub (este gratuit!). Așadar, începeți mai întâi pe github.com și creați un depozit. Apoi, utilizați linkul de depozit pentru a-l adăuga ca origine a proiectului dvs. local de git adică unde va fi stocat codul respectiv.

### Exemplu general
git la distanță adăugați origine \
https://github.com/user/repo.git
### Un exemplu cu un depozit al meu
git de la distanță adăugați origine \
https://github.com/GeorgeSeif/Semantic-Segmentation-Suite.git

Apoi poți merge înainte și să îți împingi codul către GitHub ... viola! Ți-ai făcut backup codul!

git push origin master

Lucrul cu fișierele dvs.

Verificarea stării

Instrumentul principal pe care îl utilizați pentru a determina ce fișiere se află în ce stare este comanda de stare git. Vă permite să vedeți care dintre fișierele dvs. au fost deja comise și care nu. Dacă executați această comandă atunci când toate fișierele au fost deja comise și împinse, ar trebui să vedeți ceva de genul:

starea $ git
# Pe comandantul filialei
nimic de angajat (director de lucru curat)

Dacă adăugați un nou fișier la proiectul dvs. și fișierul nu mai exista înainte, atunci când rulați o stare $ git, ar trebui să vedeți fișierul dvs. neîncercat astfel:

starea $ git
# Pe comandantul filialei
# Fișiere netratate:
# (folosiți „git add  ...” pentru a include în ceea ce va fi angajat)
#
#   CITEȘTE-MĂ
nimic adăugat pentru a comite, dar fișierele netratate prezente (folosiți "git add" pentru a urmări)

Acest lucru face ca starea $ git să fie cu adevărat utilă pentru o verificare rapidă a ceea ce ați făcut deja o copie de rezervă și a ceea ce aveți doar la nivel local.

Adăugare avansată de fișiere

Există câteva moduri mai avansate de adăugare a fișierelor în Git, care vă vor face fluxul de lucru mai eficient. În loc să încercăm să căutăm toate fișierele care au modificări și să le adăugăm unul câte unul, putem face următoarele:

### Adăugarea fișierelor unul câte unul
git adaugă numele fișierului

### Adăugarea tuturor fișierelor din directorul curent
git add -A

### Adăugarea tuturor modificărilor fișierelor în directorul curent
adauga git.

### Alegerea ce modificări trebuie adăugate (aceasta va obține toate ### modificările dvs. și puteți „Y” sau „N” modificările)
git add -p

Angajamente avansate

Anterior, am văzut că putem să comitem un fișier către Git folosind $ git commit -m "message" de comitere. Acest lucru este în regulă pentru mesaje scurte, dar dacă doriți să faceți ceva mai elaborat, veți avea nevoie de ceva mai mult:

### Comandați fișierele etapizate
### Aceasta este de obicei folosită pentru mesaje de scurtă durată
git commit -m 'message message'

### Adaugă fișier și angajează-te într-o singură fotografie
git commit nume de fișier -m 'commit message'

### Adaugă fișier și angajează fișier în etape
git commit -am 'introduceți mesajul de comitere'

### Modificarea celui mai recent mesaj de angajare
git commit --amend „nou mesaj de angajare”

# Combinați o secvență de angajamente împreună într-una singură
### S-ar putea să utilizați acest lucru pentru a organiza un istoric de comiteri dezordonate
git rebase -i
### Acest lucru vă va oferi o interfață pe editorul de bază:
# Comenzi:
# p, pick = use commit
# r, reword = folosiți commit, dar editați mesajul de comitere
# e, edit = folosiți commit, dar opriți-vă pentru a modifica
# s, squash = folosiți commit, dar s-au topit în angajarea anterioară
# f, fixup = ca "squash", dar aruncați mesajul de jurnal al acestui angajament
# x, exec = comanda rulare (restul liniei) folosind shell

Ramificarea și fuziunea

Filiala principală a depozitului dvs. GitHub ar trebui să conțină întotdeauna cod funcțional și stabil. Cu toate acestea, poate doriți să faceți o copie de rezervă pentru un cod la care lucrați în prezent, dar nu este în întregime stabil. Poate adăugați o funcție nouă, experimentați și spargeți foarte mult codul, dar doriți totuși să faceți o copie de rezervă pentru a vă salva progresul!

Filarea vă permite să lucrați la o copie separată a codului dvs., fără a afecta filiera principală. Când creați prima ramură, o clonă completă a filialei dvs. master este creată sub un nou nume. Puteți apoi să modificați codul în această ramură nouă independent, inclusiv să comiteți fișiere și altele. După ce noua caracteristică a fost complet integrată și codul este stabil, o îmbinați în filiera principală!

branșament

Iată toate lucrurile pe care trebuie să le creați și să lucrați într-o sucursală:

### Creați o sucursală locală la care să lucrați
git checkout -b branchname

### Comutare între 2 ramuri
git checkout branch_1
git checkout branch_2
### Împingeți-vă noua sucursală locală la distanță ca rezervă
git push -u origine ramură_2

### Ștergerea unei sucursale locale - acest lucru nu vă va permite să ștergeți o filială ### care încă nu a fost contopită
git branch -d branch_2

### Ștergerea unei sucursale locale - aceasta va șterge o sucursală chiar dacă ### nu a fost contopită încă!
ramură git -D ramură_2

### Vizualizarea tuturor ramurilor curente pentru depozit, inclusiv ### sucursale locale și la distanță. Bine pentru a vedea dacă aveți deja o filială ### pentru o adăugare de caracteristică specială, în special pentru proiectele mai mari ###
ramură git -a

### Vizualizarea tuturor ramurilor care au fost îmbinate în filiala dvs. actuală ###, inclusiv locală și de la distanță. Excelent pentru a vedea de unde a venit tot ### codul dvs.!
ramură git -a - concentrată

### Vizualizarea tuturor sucursalelor care nu au fost contopite în sucursala dvs. actuală, inclusiv locală și de la distanță
ramură git -a - nu-fuzionată

### Vizualizarea tuturor sucursalelor locale
ramură git

### Vizualizarea tuturor ramurilor la distanță
ramură git -r

# Ramificați filiala principală în sucursala locală
originea / stăpânul de $ git

# Împingând sucursala locală după reîncadrarea stăpânului în sucursala locală
$ git push origine + branchname

fuzionarea

Grozav! Acum ai învățat cum să creezi o sucursală și să lucrezi cu acel cod! După ce ați adăugat noua funcție la sucursala dvs., veți dori să o îmbinați din nou în sucursala principală, astfel încât masterul să aibă toate cele mai recente caracteristici de cod.

Iată cum se face:

### În primul rând, asigurați-vă că vă uitați la filiala principală
git checkout master

### Acum îmbinați-vă filiala cu masterul
git merge branch_2

Asta e! este posibil să fiți nevoit să remediați orice conflict de coduri între sucursală și comandant, dar Git vă va arăta cum să faceți toate acestea după ce introduceți comanda respectivă.

Corectarea greșelilor și backtracking

Se întâmplă greșeli ... și se întâmplă frecvent cu codificarea! Important este că putem să le remediem.

Nu aveți teamă aici! Git are tot ce ai nevoie în cazul în care faci o greșeală cu codul pe care îl apese, rescrieți ceva sau doriți doar să faceți o corecție la ceva pe care l-ați împins.

### Treceți la versiunea codului celui mai recent angajament
resetare git HEAD
git reset HEAD - nume de fișier # pentru un fișier specific
### Treceți la versiunea codului înainte de comiterea cea mai recentă
resetare git HEAD ^ - nume de fișier
git reset HEAD ^ - nume de fișier # pentru un fișier specific
### Comutați înapoi 3 sau 5 angajamente
resetare git HEAD ~ 3 - nume de fișier
git reset HEAD ~ 3 - nume de fișier # pentru un fișier specific
resetare git HEAD ~ 5 - nume de fișier
git reset HEAD ~ 5 - nume de fișier # pentru un fișier specific
### Comutați înapoi la un angajament specific
### În cazul în care „0766c053” este codul de identificare
resetare git 0766c053 - nume de fișier
git reset 0766c053 - nume de fișier pentru un fișier specific
### Comenzile anterioare au fost cele cunoscute sub numele de resetări „soft”. Codul dvs. ### este resetat, dar git va păstra în continuare o copie a celuilalt cod ### la îndemână în cazul în care aveți nevoie de el. Pe de altă parte, --hard flag ### îi spune lui Git să suprascrie toate modificările din directorul de lucru.
resetare git --hard 0766c053

Sfaturi și trucuri utile pentru Git

Cu toții am terminat cu chestiile grozave! Iată câteva alte sfaturi și trucuri Git pe care le puteți găsi utile pentru a vă îmbunătăți fluxul de lucru!

In cautarea

### Căutări pentru părți de șiruri dintr-un director
git grep 'ceva'

### Căutări pentru părți de șiruri într-un director și -n tipărește ### numerele de linie în care git a găsit potriviri
git grep -n 'ceva'

### Căutări pentru părți de șir cu un anumit context (unele linii
### înainte și unele după „ceva” pe care îl căutăm)
git grep -C  'ceva'

### Caută părți de șir și arată, de asemenea, linii ÎNAINTE
git grep -B  'ceva'

### Căutează părți de șir și arată, de asemenea, liniile DUPĂ ea
git grep -A  'ceva'

Văzând cine a scris ce

### Afișează istoricul modificărilor unui fișier cu numele autorului
git blame 'nume de fișier'

### Afișează istoricul modificărilor unui fișier cu numele autorului ### și ID-ul git de comitere
git blam „nume de fișier” -l

Logging

### Afișează o listă a tuturor angajamentelor dintr-un depozit. Această comandă arată ### totul despre o comisie, cum ar fi codul de identificare, autorul, data și ### mesajul de comitere.
jurnal jurnal

### Lista de comiteri care afișează doar mesaje și modificări
git log -p

### Lista de angajamente cu șirul special pe care îl căutați
git log -S 'ceva'

### Lista de angajamente ale autorului
git log --author 'Denumirea autorului'

### Afișați un rezumat al listei de angajamente dintr-un depozit. Acest ### arată o versiune mai scurtă a ID-ului de comitere și a mesajului de angajare.
git log --oneline

### Afișează o listă de angajamente într-un depozit încă de ieri
git log --since = ieri

### Arată jurnalul după autor și căutarea unui termen specific în mesajul ### commit
git log --grep "termen" --autor "nume"

Lectură recomandată

Încercați să intrați într-o lucrare de programare sau încercați să o actualizați pe cea actuală? Cracking the Coding Interview are cele mai bune exemple de întrebare comună pentru interviuri de codare și soluțiile lor pentru companii precum Google, Microsoft și Amazon!

Și doar o idee sus, susțin acest blog cu link-uri de afiliere Amazon către cărți grozave, deoarece împărtășirea cărților grozave ajută toată lumea! În calitate de asociat Amazon am câștigat din achiziții calificate.