Controlul versiunii ușoare cu Git

Ați lucrat vreodată la un proiect care a fost atât de greu, ați fost speriat să actualizați un fișier sau să adăugați o caracteristică? Poate problema a fost că nu utilizați un sistem de control al versiunilor. În tutorialul de astăzi, vom învăța elementele de bază despre ceea ce ar putea fi cel mai bun VCS din lume: Git.

Ce este Git?

Git este un instrument de gestionare a codului open source; a fost creat de Linus Torvalds când construia kernelul Linux. Din cauza acestor rădăcini, trebuia să fie foarte rapid; că este și ușor de a obține atârnă de asemenea. Git vă permite să lucrați la codul dvs. cu liniștea minții că tot ceea ce faceți este reversibil. Ea facilitează experimentarea cu idei noi într-un proiect și nu vă faceți griji în legătură cu nimicirea. Git Parabola, de Tom Preston-Werner, este o introducere minunată a termenilor și ideilor din spatele Git.

De ce ar trebui să folosesc Git?

Ar trebui să utilizați cu siguranță un sistem de control al revizuirii; după cum am spus deja, aceasta vă oferă libertatea de a face tot ceea ce doriți cu codul dvs. și nu vă faceți griji despre ruperea acestuia. Deci, dacă ați realizat beneficiile utilizării unui sistem de control al reviziilor, de ce ar trebui să utilizați git? De ce nu SVN sau Perforce sau altul? Pentru a fi sincer, nu am studiat diferențele prea strâns; verificați WhyGitIsBetterThanX.com pentru informații utile.

Cum obțin setarea?

Git este destul de ușor de obținut: pe un Mac, este probabil mai ușor să utilizați git-osx-installer. Dacă aveți MacPorts instalat, poate doriți să obțineți Git prin ea; puteți găsi instrucțiuni pe site-ul de ajutor GitHub. (Și da, vom vorbi despre GitHub). Pe Windows, cel mai simplu mod de a începe rularea este să utilizați programul de instalare msysgit. Cu toate acestea, dacă ai Cygwin, poți să-l ajuți și pe Git acolo.

Cum utilizez Git?

Până acum ar trebui să aveți Git instalat; dacă sunteți pe Mac, deschideți un terminal; dacă sunteți pe Windows, deschideți Git Bash (de la msysgit) sau promptul dvs. Cygwin. De aici, nu ar trebui să existe diferențe între OS.

configurație

Vom începe prin a face un pic de configurare. Fiecare comitere pe care o faceți va avea numele dvs. și adresa de e-mail pentru a identifica "proprietarul" comitetului, așa că ar trebui să începeți prin acordarea acelor valori. Pentru a face acest lucru, executați aceste comenzi:

 git config - numele utilizatorului global "Numele tău" git config --global user.email "[email protected]" 

De asemenea, este frumos să permiteți o colorare a textului, doar pentru o citire mai ușoară în terminal.

 git config --global color.diff auto git config --global color.status auto git config --global color.branch auto

git init

Acum că Git știe cine ești, să ne imaginăm că creăm o aplicație web PHP simplă. (Bineînțeles, cu cât proiectul este mai mare, cu atât mai strălucitoare Git strălucește, dar învățăm doar instrumentele, nu?) Avem un director gol numit "mySite". Mai întâi se concentrează asupra acelui director (folosind comanda cd). Pentru a începe cu Git, trebuie să executați comanda git init; după cum probabil ați putea ghici, acest lucru inițializează un depozit Git în acel dosar, adăugând un dosar .git în el. Un depozit este un fel de carte de istorie a codului. Acesta va conține toate versiunile anterioare ale codului dvs., precum și versiunea actuală.

Observați că calea terminalului este atașată cu (master). Aceasta este sucursala în care lucrați în prezent. Branch? Gândiți-vă la proiectul dvs. ca pe un copac; puteți crea diferite funcții pe diferite ramuri și totul va rămâne separat și sigur.

adăugați git

Am început să lucrăm la cererea noastră.

Înainte de a merge mai departe, ar trebui să facem primul nostru angajament. O comitere este pur și simplu un indicator pentru un loc din istoricul codului. Înainte de a putea face acest lucru, cu toate acestea, trebuie să mutăm toate fișierele pe care dorim să le facem parte din acest angajament în zona de așteptare. Zona de așteptare este un loc pentru a ține fișierele pentru următorul comitet; poate că nu vrei să-ți faci toate schimbările curente, așa că ai pus ceva în zona de așteptare. Putem face acest lucru folosind comanda Add

 adăugați git . 

The. pur și simplu înseamnă să adăugați totul. Ai putea fi mai specific dacă vrei.

 git adăugați * .js git adăugați index.php 

git comite

Acum, când ne-am pus în scenă fișierele, să le angajăm. Acest lucru se face cu comanda

 git comite 

Aceasta ia toate fișierele din zona noastră de așteptare și marchează codul ca un punct din istoria proiectului nostru. Dacă nu adăugați nicio opțiune comenzii de mai sus, veți obține ceva de genul acesta.

Fiecare comitet ar trebui să aibă un mesaj de însoțire, astfel încât să știți de ce a fost comis acest cod. Acest editor vă permite să vă scrieți mesajul, precum și să vedeți ce se întâmplă în această acțiune. Din imaginea de mai sus, puteți vedea că această comitere este compusă din patru fișiere noi. Editorul pe care îl utilizați pentru a scrie mesajul este Vim; dacă nu sunteți familiarizat cu vim, știți că va trebui să apăsați i (pentru Inserare) înainte de a putea introduce mesajul. În fotografia de mai sus, am adăugat mesajul "Initial Commit." După ce scrieți mesajul dvs., apăsați tasta de evacuare și tastați: wq (pentru salvare și ieșire). Veți vedea că veți avea loc comiterea.

Puteți utiliza câteva opțiuni pentru a face comitete mai repede. În primul rând, -m vă permite să adăugați mesajul în linie.

 git commit -m "inițial comite" 

Apoi, -a vă permite să săriți zona de așteptare; nu chiar. Git va staționa automat și va angaja toate fișierele modificate atunci când utilizați această opțiune. (rețineți că nu va adăuga fișiere noi). Împreună, ați putea folosi aceste comenzi astfel:

 git commit -am 'actualizare la index.php' 

Deci, cum spune Git să se despartă? În loc să le numeroteze, Git folosește conținutul codului pentru a crea un hash SHA1 de 40 de caractere. Partea clară despre acest lucru este că, deoarece utilizează codul pentru a crea hash-ul, nici două hashes din proiectul dvs. nu vor fi aceleași dacă codul din comitete nu este identic.

git status

git status vă permite să vedeți starea actuală a codului. Tocmai am făcut o comisie git status ne va arata ca nu este nimic nou.

Dacă vom continua să lucrăm la proiectul nostru imaginar, veți vedea că statutul nostru se schimbă. O să editez index.php și să adaug un alt fișier. Acum, alergând git status ne ofera aceasta:

Actualizarea este împărțită în două categorii: "schimbat dar nu actualizat" și "fișiere netracked". Dacă executăm

 git adăugați userAuthentication.php git status 

veți vedea că acum avem o secțiune "modificări care vor fi angajate". Aceasta afișează fișierele adăugate în zona de așteptare. Voi comite aceste schimbări cu acest lucru:

 git commit -am "codul de autentificare a utilizatorului a fost adăugat" 

Acum alergând git status ne arată un director de lucru curat.

git branch / git checkout

Iată un scenariu: lucrăm fericit la proiectul nostru, când brusc avem o idee mare. Această idee este atât de revoluționară, încât ne va schimba drastic proiectul. Trebuie să încercăm, dar nu vrem să aruncăm codul nesigur, primul proiect în codul nostru testat și adevărat. Ce sa fac? Aici e locul git ramură va fi extrem de util. Să ne încadrăm proiectul, astfel încât, dacă ideea noastră mare nu funcționează, nu se face nici un rău.

 git ramură 

Pur și simplu rularea comenzii ramurii sans opțiunile vor lista filialele noastre; acum avem doar ramura master, ceea ce începe de la orice depozit git. Pentru a crea o nouă ramură, adăugați numele după noua comandă.

 git ramură bigIdea 

Când creați o ramură nouă, nu vi se trece automat la aceasta. Observați că terminalul nostru încă spune (comandant). Aici folosim comanda comandanților sucursalelor Git checkout.

 git checkout bigIdea 

(Sfat: puteți crea o ramură și treceți la ea într-o singură lovitură cu această comandă: git checkout -b numele ramurii.) După cum puteți vedea, suntem acum pe ramura bigIdea. Să codificăm o furtună. Git status ne va arăta munca.

Să facem schimbările:

 adăugați git. git commit -m 'Funcția Kiler adăugată' 

În regulă, suficient pentru această caracteristică; să ne întoarcem la sucursala noastră; dar înainte de a face, vreau să vă arăt dosarul actual al proiectului nostru.

Acum, reveniți la ramura master; Știi cum:Git comandă comandă. Uită-te din nou la dosarul nostru de proiect.

Nu, nu am făcut nimic; aceste două fișiere sunt doar o parte din ramura bigIdea, așa că nici măcar nu știm că există din ramura master. Acest lucru nu funcționează numai pentru fișiere complete, dar și pentru cele mai mici modificări din fișiere.

git merge

Ok, așa că am muncit din greu pe acea filială mare în timpul liber. De fapt, după o altă comisie, se pare atât de dulce, am hotărât că este destul de bun să se alăture ramurii master. Deci cum o facem noi??

git merge comanda este făcută exact pentru acest scop. În timp ce vă aflați pe ramura principală, faceți acest lucru:

 git merge bigIdea 

Este atât de ușor; acum, totul de pe sucursala bigIdea este o parte a ramurii master. Poți scăpa de ramura bigIdea acum, dacă vrei.

 git branch -d bigIdea

Ar trebui să menționez că dacă nu ați fuzionat o sucursală, Git nu vă va lăsa să o ștergeți cu această comandă; va trebui să utilizați o majusculă D în opțiune. Aceasta este doar o măsură de siguranță.

git log / gitk

Veți dori probabil să vă uitați la istoricul comitetelor dvs. la un moment dat în timpul proiectului dvs. Acest lucru se poate face cu ușurință cu comanda log.

 git log 

Aceasta va afișa o listă a tuturor comitetelor pe care le-ați realizat într-un proiect, arătându-le în ordine inversă. Puteți obține o parte destul de ordonată de informații aici:

  • autorul comitetului
  • comitetul hash
  • data și ora
  • mesajul

Categoric informativ, dar destul de uscat, nu? Putem lumina lucrurile un pic cu opțiunea de grafic.

 git log --graf 

Acum vedem structura arborelui, ceva de genul. Deși nu le primim numele, putem vedea fiecare dintre ramuri și care s-au făcut comitete asupra lor. Dacă sunteți obișnuit să lucrați într-un terminal, s-ar putea să fiți bine cu asta. Cu toate acestea, dacă (înainte de această experiență) cuvântul Terminal te lovește mai întâi ca ceva morți, respira ușor: există o aplicație pentru asta. Incearca asta:

 gitk - toate 

Acesta este browserul de stocare grafic. Puteți să răsfoiți comitetele, să vedeți exact ceea ce sa schimbat în fiecare fișier în timpul unei comitete și multe altele. (Veți observa că am adăugat câteva comitete înainte de a fuziona, doar pentru a face structura arborescentă mai ușor de recunoscut.)

GitHub

Acum că aveți o cunoaștere rezonabilă a lui Git sub centură, să ne uităm la unele dintre părțile colaborative ale lui Git. Git este o modalitate foarte bună de a împărți codul cu alții și de a lucra împreună la proiecte. Există o serie de site-uri de găzduire ale Git repository. Ne vom uita la unul: GitHub.

Mergeți pe pagina de înscriere GitHub și creați un cont. Veți avea nevoie de o cheie publică SSH, așa că să o creăm chiar acum! (Notă: nu aveți nevoie de cheia în timp ce vă înscrieți, puteți adăuga ulterior.)

Deschideți terminalul și tastați acesta:

 ssh-keygen -t rsa-C "[email protected]" 

Opțiunea t atribuie un tip, iar opțiunea C adaugă un comentariu, în mod tradițional adresa dvs. de e-mail. Veți fi întrebat de unde să salvați cheia; doar lovirea enter va face (care salvează fișierul la locația implicită). Apoi, introduceți o expresie de pass, de două ori. Acum aveți o cheie; să-i dăm lui GitHub.

Mai întâi, obțineți cheia din fișier; terminalul vă va spune unde a fost stocată cheia; deschideți fișierul, copiați cheia (aveți grijă să nu adăugați nicio linie nouă sau spațiu alb). Deschideți pagina contului dvs. GitHub, defilați la SSH Public Keys și faceți clic pe "Adăugați o altă cheie publică". Lipiți cheia și salvați-o. Ești bine să pleci! Puteți testa autentificarea prin rularea acestei:

 ssh [email protected] 

Veți fi solicitat expresia dvs. de trecere; pentru a evita să introduceți acest tip de fiecare dată când vă conectați la GitHub, puteți să automatizați acest lucru. Aș putea să vă spun cum să faceți acest lucru, dar probabil aș fi plagiat din neatenție: ajutorul GitHub are un articol simplu despre limba engleză despre cum să o facă.

Git Clone

Așa că acum ești înființat cu GitHub; să luăm un proiect. Ce zici de jQuery? Dacă accesați proiectul jQuery GitHub, veți găsi URL-ul clonei git. Rulați acest lucru:

 git clone git: //github.com/jquery/jquery.git 

Acest lucru creează un dosar jquery și copiază întreaga repository jquery pe computer. Acum aveți o istorie completă a proiectului; verificați-l cu gitk - toate.

git push

Deci, să spunem că ați lucrat la un proiect, gestionându-l cu git la nivel local. Acum doriți să o împărtășiți cu un prieten sau cu lumea. Conectați-vă la GitHub și creați un depozit nou. GitHub vă va oferi o adresă URL a clonei publice (pentru alții care doresc să vă descarce proiectul) și o adresă URL clonă personală (pentru dvs.).

Apoi, întoarce-te la proiectul tău în terminal și dă-i un vârtej:

 git adăugați de la distanță [email protected]: andrew8088 / Shazam.git 

O telecomandă este un depozit de proiecte într-o locație îndepărtată. În acest caz, îi dăm acestei telecomenzi un nume de origine și o transmitem URL-ului clonei private. (Evident, va trebui să înlocuiți adresa URL proprie pentru dvs.) Acum, când proiectul știe unde se află ...

 git push master de origine 

Aceasta împinge ramura master la telecomanda de origine. Acum sunteți proiectul este disponibil pentru lume! Întoarceți-vă la pagina de proiect și vedeți proiectul.

git trageți

S-ar putea să vă aflați la celălalt capăt al unui proiect: sunteți contribuitor în locul proprietarului. Când proprietarul împinge o nouă comisie la depozit, puteți utiliza git trageți pentru a obține actualizările. Git trageți este de fapt un instrument combo: rulează git fetch (obținerea modificărilor) și git merge (îmbinarea acestora cu copia curentă).

 git trageți 

Sunteți Set!

Ei bine, există mult mai multe informații despre Git; sperăm că ați învățat suficiente comenzi pentru a vă ajuta să gestionați viitorul dvs. proiect mai inteligent. Dar nu te opri aici; verificați aceste resurse pentru a deveni un maestru Git!

  • Git, GitHub și codificarea socială (Teatrul YUI)
  • Centrul de instruire GitHub
  • Gitcasts.com: difuzări pe Git
  • Site-ul Git
  • Publicul meu public Git Evernote
  • Urmați-ne pe Twitter sau abonați la Nettuts + RSS Feed pentru cele mai bune tutoriale de dezvoltare web de pe web.


Cod