Git Sfaturi de la profesioniști

Utilizați deja controlul sursei pentru gestionarea codului, nu? S-ar putea să vă folosiți chiar și SCM ca piesă centrală a fluxului dvs. de lucru, așa cum facem la New Relic.

În acest articol, nu vom examina elementele de bază ale gestionării controlului sursei, indiferent de cea pe care o utilizați. Să presupunem că deja știți cum să obțineți. Ceea ce vom acoperi este modul în care profesioniștii folosesc git. Vom arunca o privire la unele dintre caracteristicile avansate și fluxurile de lucru pe care probabil că nu le cunoașteți deja. Sperăm că veți pleca cu gura voastră la toate posibilitățile oferite de GIT!

Dacă sunteți ceva ca mine, vă place să explorați modul în care alți dezvoltatori lucrează.

Pentru cei neinițiați sau cei care vin dintr-un alt CSM, Git este un sistem de control al versiunilor distribuite. Este gratuit și open source, are o amprentă minusculă și se poate încadra în fluxul de lucru care vă convine cel mai bine. În general, nu vă forțează să lucrați într-un anumit mod, ceea ce înseamnă că există multe metodologii diferite în ceea ce privește modul de utilizare a funcțiilor sale, cum ar fi zonele de staționare, lansarea de ramificații și etichetarea. Dacă sunteți ceva ca mine, vă place să explorați modul în care alți dezvoltatori lucrează. Așa că pregătește-te să începi să te modifici .gitconfig, pentru că ești pentru un tratament. Să vedem cum profii folosesc git.


Efectuați schimbările în hunuri

Probabil sunteți familiarizați cu modificarea accidentală a unui singur fișier din două motive diferite, fără a se angaja între ele.

Cu siguranță sunteți familiarizați cu adăugarea fișierelor în zona de așteptare cu numele corespunzător adăuga comanda. Și probabil sunteți familiarizați cu modificarea accidentală a unui singur fișier din două motive diferite, fără a se angaja între ele. Așa că veți avea siguranța git log umplute cu mesaje precum "Editați X și modificați Y". Dacă aceasta pare a fi fluxul dvs. de lucru, atunci adăugarea interactivă este noul dvs. cel mai bun prieten.

Adăugarea interactivă sau adăugarea unui patch vă ajută să vă schimbați câte o schimbare la un moment dat. Când adăugați un fișier cu -p comandă, vi se va solicita la fiecare schimbare logică (adică liniile editate succesiv vor fi grupate împreună). Există o serie de opțiuni pe care le puteți face pe fiecare bucată, de la împărțirea cântecului curent la cele mai mici, sărind peste o bucată sau chiar manual editare. Folosește ? opțiune pentru a vedea o listă completă de comenzi.

Noțiuni de bază cu melodii de staționare este la fel de simplu ca:

git adăugați -p 

Verificați ultima dvs. ramură

Ca un cetățean bun de codificare, atunci când întâlniți ceva care are nevoie de o reparație rapidă sau de curățare, ar trebui probabil să faceți o clipă pentru ao schimba. Dar, dacă utilizați un flux de lucru de tip feature-branch, atunci nu doriți ca această remediere necorelată în ramura dvs. de caracteristici. Asta înseamnă că va trebui ascunde modificările curente, schimbați-vă în filiala principală și apoi faceți remedierea acolo. Vărsarea între ramuri poate fi obositoare, dar, din fericire, există o comandă rapidă pentru trecerea la ultima dvs. ramură. (prin Zach Holman)

Git checkout -

Această sintaxă ar trebui să pară destul de familiară utilizatorilor * NIX. CD comandă are o scurtătură similară (CD -), care va sari la ultimul director in care ati intrat. Nu veti mai fi nevoit sa va amintiti ce ati numit acea ramura de functii cand trebuie sa reveniti; doar Git checkout -.


Arătați care sunt sucursalele (sau nu)

Atunci când lucrați cu ramuri de caracteristici, puteți crea rapid atât de mulți care să deruleze ieșirea din git ramură - listă. Acum, din când în când, vrei să scapi de ramurile care au transformat-o în maestru. Dar probabil că aveți o pauză rapidă în fața dvs. git branch -d , dar cu comenzile de mai jos le puteți șterge cu încredere fără un al doilea gând. (prin Zach Holman)

Dacă doriți să vedeți care sucursale locale pe care le aveți, care sunt fuzionate în sucursala în care vă aflați în prezent, atunci tot ce aveți nevoie este:

 git ramură - mișcare

Reversul este, de asemenea, disponibil. Arătați care ramuri nu au fost fuzionate în sucursala selectată în prezent cu:

git branch - nu a fuzionat

Mash acest lucru cu un cuplu de instrumente UNIX ușor și puteți șterge rapid tot ceea ce a fost deja fuzionat:

git sucursala - xargs git branch -d

Luați un fișier dintr-o altă filială, fără a efectua modificări

Să spunem că experimentați unele refactorizări și aveți câteva sucursale care au diverse modificări pe care le-ați făcut. Dacă aveți modificări într-un fișier dintr-o sucursală îndepărtată pe care doriți să o aduceți în ramura dvs. de lucru curentă, puteți efectua orice număr de pași. Fără sfaturile de mai jos, probabil că vă veți stoca modificările curente, veți schimba sucursalele și veți apuca conținutul fișierului pe care doriți să-l schimbați, comutați înapoi (cu Git checkout - desigur) și să faceți editările. Sau puteți verifica doar acel fișier care îl va îmbina în sucursala dvs. curentă (prin Zach Holman):

Git checkout  -- calea / catre / file.rb

Situri Git clasificate după ultimul angajament

Așa că ai lista de ramuri aglomerate despre care am vorbit înainte; unele dintre cele pe care le-ați curățat cu --fuzionat steag. Dar ce zici de toate celelalte ramuri? De unde știi care sunt cele utile sau în întregime depășite? pentru-fiecare-ref comanda va afișa o listă pentru fiecare ramură și va afișa informațiile de referință pentru ultima comitere. Putem personaliza rezultatul pentru a include unele informații utile, dar, mai important, putem sorta lista după dată. Această comandă ne va oferi o listă de ramuri cu ultimul mesaj de comitere și comitere, sortate în ordinea descrescătoare a datei. (prin Rein Henrichs)

git for-each-ref -sort = -committerdate -format = '% (committerdate: short)% (refname: short)

În timp ce ați putea să tastați această comandă de fiecare dată, vă recomand să faceți un alias și să vă salvați câteva dureri de cap grave.

git config -global alias.latest "for-each-ref -sort = -committerdate -format = '% (comemorare: scurt)%

Oamenii din casele de sticlă nu ar trebui să utilizeze vina Git

Sau cel puțin nu ar trebui să le folosească git vina fără una dintre opțiunile de mai jos. Vina lui Git este puternică; este practic utilizarea științei pentru a dovedi că ai dreptate. Dar fii atent, multe schimbări sunt superficiale și pentru a găsi adevărata sursă a codului în discuție necesită o vânătoare mai mult. Lucrurile precum eliminarea spațiului alb, mutarea textului în linii noi sau chiar mutarea textului dintr-un alt fișier pot fi ignorate pentru a ajunge la autorul original al codului mult mai ușor.

Înainte să vă dați vina pe cineva, asigurați-vă că verificați una dintre următoarele:

git blame -w # ignoră spațiul alb git blame -M # ignoră textul în mișcare git blame -C # ignoră textul în mișcare în alte fișiere

Găsiți o coardă în întregul istoric Git (și eliminați-o)

Din când în când, trebuie să căutați o linie de cod pe care știți că ați scris-o, dar nu o puteți găsi. Ar putea fi blocat într-o ramură îndepărtată, șters mult timp în urmă, sau ascuns pe un loc simplu; dar în orice fel puteți găsi orice șir în întreaga istorie a git-ului prin împrăștierea câtorva comenzi. Mai întâi, vom obține o listă cu toate comitetele, apoi vom grefa fiecare dintre ele pentru șirul nostru.

git rev-list - toate | xargs git grep -F ''

Probabil că aveți un prieten care a comis accidental date sensibile la un repo: chei de acces, parole, rețeta secretă a bunicii dvs. marinara. Primul lucru pe care ar trebui să-l facă este schimbarea parolelor și revocarea accesului cu acele chei (și scuze pentru bunica ta). Apoi, veți dori să vânați dosarul delict și să îl eliminați din întreaga istorie a gitului, ceea ce pare mult mai ușor decât este de fapt. După terminarea acestui proces, oricine va trage modificările curățate va elimina și datele sensibile. Forkurile repo-ului dvs. care nu îmbinã modificãrile din amonte vor conþine în continuare fiºierele compromise (deci nu treceþi prin schimbarea parolelor ºi revocarea cheilor de acces).

În primul rând, vom rescrie istoria git pentru fiecare ramură, eliminând fișierul cu datele sensibile.

git filtru-ramura - index-filter 'git rm - cached --ignore-unmatch '--prune-gol - tag-name-filter cat - - toate

Adăugați fișierul la .gitignore și se angajează să se actualizeze .gitignore.

ecou  >> .gitignore git adăugați .gitignore git commit -m "Adăugați sensibil  fișier la gitignore "

Deoarece noi rescriem istoria, va trebui să forțezi să împingi modificările la telecomandă.

git push origine master - forță

Fișierele compromise încă există în repo-ul dvs. local, deci va trebui să faceți câteva sarcini de curățare pentru a le elimina complet.

rm -rf .git / refs / original / git reflog expiră --expire = acum - tot git gc --prune = acum git gc --agresive --prune = acum

Reputația prietenului tău ar trebui să fie lipsită de date sensibile și vei fi eroul pentru a-i ajuta cu cunoștințele tale. (prin StackOverflow și GitHub)


Ignoră modificările într-un fișier urmărit

Lucrul cu codul altcuiva în mediul dvs. poate însemna că trebuie să efectuați orice număr de modificări config pentru ca aplicația să ruleze. Este prea ușor să comiteți accidental o schimbare la acele config-uri care au fost destinate exclusiv pentru mediul dvs. Deci, în loc să vă uitați întotdeauna pentru acele fișiere și să le lăsați în zona "modificată", puteți să spuneți indicele git să ignore modificările acelui fișier. Vă puteți gândi la acest lucru într-un fel ca un fișier ignorat, care rămâne cu repo. (prin Arnaud Coomans)

git update-index -assume-neschimbat 

Eliminați istoricul unei ramuri

Uneori pornind de la zero este exact ceea ce trebuie să faceți, din diverse motive. Poate că ați moștenit o bază de coduri pe care nu o puteți asigura că este sigură pentru a deschide sursa, poate că veți încerca ceva cu totul nou sau poate adăugați o ramură care servește un scop separat pe care doriți să îl întrețineți repo (cum ar fi paginile GitHub). În acest caz, există o modalitate foarte simplă de a crea o nouă ramură în repo, care în esență nu are istorie. (prin Nicola Paolucci)

git checkout - orfan 

Aliasuri pe care nu le poți trăi fără

Nu mai pierdeți timpul introducând comenzi lungi și faceți niște aliasuri utile.

Nici o discuție despre git nu ar fi completă fără a vorbi despre diverse pseudonime, care vă vor salva literalmente minute pe an în intrări de taste salvate. Nu mai pierdeți timpul introducând comenzi lungi și faceți niște aliasuri utile. Aliasurile pot fi făcute adăugându-le în fișierul .gitconfig sau utilizând linia de comandă git config - alias globală. "". Mai jos este doar un eșantion de alias pe care îl puteți folosi ca o rampă de lansare pentru idei.

co: cu un flux de lucru cu ramificație, veți fi în mișcare regulată între ramuri. Salvează-ți șase caractere de fiecare dată.

co = checkout

ds: este întotdeauna cea mai bună practică să examinați modificările pe care le veți angaja înainte de a efectua comiterea efectivă. Aceasta vă permite să prindeți greșeli, includerea accidentală a datelor sensibile și codificarea grupurilor în grupuri logice. Efectuați modificările și apoi utilizați-le git ds pentru a vedea diferența acestor modificări.

ds = diff - staged

Sf: ar trebui să fii destul de familiarizat cu ieșirea verbală a stării git. La un moment dat, veți dori să renunțați la toate formalitățile și să faceți afaceri. Acest alias prezintă forma scurtă a stării și include detaliile filialei.

st = status -sb

modifică: ați uitat să includeți un fișier cu ultimul dvs. comitet, sau poate ați avut un tweak aveți nevoie pentru a face? Modificați modificările în etape la ultimul dvs. comitet.

amend = commit - amend -C HEAD

Anula: uneori, modificarea ultimei dvs. comitete nu este suficientă și va trebui să o anulați în schimb. Acest pseudonim va retrage un angajament și va lăsa modificările de la acea comisie înscrise. Acum puteți efectua modificări suplimentare sau puteți reîncepe cu un nou mesaj.

undo = resetare - HEAD

ls: lucrul la o bază de date cu un grup de dezvoltatori înseamnă să încerci să ții pasul cu ceea ce lucrează oamenii. Acest alias va furniza un jurnal de o singură linie, incluzând data și numele angajatului.

ls = log --pretty = format: "% C (galben)% h% C (albastru)% ad% C (roșu)% d% decorate --date = scurt

ridica-te: acest alias este grozav pentru revizuirea a ceea ce ați lucrat ieri pentru orice tip de standup zilnic sau doar pentru a vă reîmprospăta memoria dimineața.

standup = log - de acum 1 zi'online --author 

grafic: o istorie git complexă poate fi dificil de revizuit într-o linie dreaptă. Folosind pictograma grafic vă arată cum și când s-au adăugat comitete în ramura curentă.

graf = log --graph --pretty = format ':% C (galben)% h% Cblue% d% Creset% s% C (alb)

În încheiere

Git poate fi atât de uimitor de simplă și de complexitate minunată. Puteți începe cu elementele de bază și lucrați în manipularea grafurilor mai complexă în timp. Nu este nevoie să vă grotești totul înainte de ao folosi. Comanda care va fi cea mai puternică pe măsură ce învățați este om git--. Încearcă să o folosești înainte de a te referi la Google pentru un răspuns.

Puteți afla mai multe despre modul în care compania pe care o lucrez pentru dvs., New Relic, folosește git pe blogul nostru sau dați gratuit la New Relic Pro. Vă mulțumim pentru lectură! Dacă aveți întrebări, anunțați-ne mai jos!

Cod