3 comenzi Git pe care nu ar trebui sa le folositi NICIODATA

Fotografie de Goh Rhy Yan pe Unsplash

Git este un instrument puternic. Si, in opinia mea, singurul dezvoltator de software pentru sistemul de control al versiunilor ar trebui sa-l foloseasca in 2020. Poate ca va exista un nou rege in oras intr-o zi. Dar in 2020, Git este singura solutie cu care merita sa va investiti timpul. De ce? Pentru ca toata lumea il foloseste! Literal, toata lumea. my porno

Cu toate acestea, nu toata lumea este un expert in git! Acestea sunt trei comenzi git pe care cred ca nu ar trebui sa le folositi NICIODATA daca nu intelegeti cu adevarat ce faceti!

Actualizare 11/26/2020: Acest articol a primit WAY mai mult de tractiune decat ma asteptam si exista o multime de comentarii cu critici valide care sunt mai usor de a aborda in fata decat in mod individual. In primul rand, scuzele mele pentru titlul si tonul articolului. Prin „NICIODATA” nu vreau sa spun cu adevarat niciodata. Desi sunt un fan al hiperbolei, ideea pe care incerc sa o transmit aici este ca aceste comenzi au potentialul de a creste complexitatea suficient incat sa fie mai usor sa nu le folositi si sa va rezolvati problema mai simplu. De exemplu – exista de obicei modalitati mai usoare de gestionare a dependentelor pure decat submodulul git. big booty porno De asemenea, daca nu aveti o supraabundenta de ramuri active paralele, cred ca fuziunea git este, in general, mai usor de utilizat si de inteles decat git rebase.

Totusi, recunosc ca sunt partinitor, deoarece lucrez aproape exclusiv la proiecte relativ mici, care rezolva probleme relativ evidente cu echipe mici de 1-7 ingineri. Nu sunt tipul care dezvolta urmatorul Google (inca!). Eu sunt tipul care rezolva probleme specifice pentru fiecare dintre clientii nostri. Daca lucrati in echipe mai mari cu proiecte extrem de complexe, git rebase si submodulul git pot fi necesare pentru a permite istoricul proiectului sau a componentelor dvs. porno cousine sa fie navigabil in mod rezonabil. Daca va aflati in aceasta tabara, speram ca un articol scris pe un capriciu de o persoana aleatorie pe internet nu ar trebui sa va razgandeasca daca utilizarea sau nu a git rebase sau a submodulului git este raspunsul corect. Lasati documentatia oficiala git sa va ghideze. https://git-scm.com/doc

Pur si simplu, comanda git submodule va permite sa adaugati un depozit git in depozitul dvs. flm porno git! Cu toate acestea, gestionarea unui proiect in care sunt utilizate mai multe submodule poate fi greoaie.

git submodule add <locatia depozitului>

Comanda de mai sus adauga depozitul specificat ca director in depozitul dvs. git curent. Acest director este el insusi un depozit git complet. Daca schimbati directorul in noul submodul, veti observa ca TOATE comenzile dvs. tiktok porno git se comporta ca si cum ati fi mutat intr-un depozit complet nou. Pentru ca ai!

Prin prezenta vom face referire la depozitul de nivel superior ca depozit „parinte” si submodulul ca „copil”. In cadrul depozitului parinte, directorul care este submodulul copil este tratat mai mult sau mai putin exact cum ar fi tratat orice alt fisier din git. Cand depozitul copil este modificat, veti vedea in starea gitparintelui ca submodulul are noi comisii sau are continut modificat. Sub capota, din perspectiva parintelui, un submodul git poate fi gandit ca nimic mai mult decat un singur fisier care contine o locatie la distanta si un ID de confirmare! Singura modalitate de actualizare a acestui fisier si, prin urmare, referinta parintelui la submodul, este urmarirea unui alt ID de comitere. vido porno Numai cand cel mai recent commit (aka HEAD) al modificarilor din depozitul copil poate depozitul parinte git add / git sa submiteze submodulul actualizat.

Acest lucru inseamna intuitiv ca, daca lucrati activ in cadrul submodulului copil, fluxul dvs. de lucru trebuie sa includa si gestionarea referintei parintelui la copil. De exemplu, atunci cand faceti un nou commit in copil, trebuie sa comiteti si referinta parintelui cu copilul pentru a mentine proiectul complet actualizat. Acest lucru poate deveni clar dureros. cosplay porno Mai ales daca aveti multe submodule sau mai multe niveluri de submoduli imbricate. Fiecare confirmare din orice depozit secundar necesita in mod egal actualizari la toate referintele la depozitul respectiv. Acesta este motivul pentru care, in opinia mea, submodulele ar trebui utilizate numai daca echipa de dezvoltare a depozitului parinte este diferitade la echipa de dezvoltare a copilului. Submodulele functioneaza bine pentru a tine evidenta referintelor la dependente de cod sursa externe. Cu toate acestea, cred ca submodulele nu functioneaza bine pentru a segmenta proiectul unei singure echipe de dezvoltare in mai multe sub-componente. film porno francais streaming Cresterea complexitatii rezultata nu merita efortul suplimentar necesar pentru a mentine relatia parinte / copil.

O nota suplimentara de interes: atunci cand utilizati submodule git, trebuie sa recunoasteti ca depozitul parinte nu va stoca nicio copie de rezerva a continutului submodulului. Doar o referinta. Daca nu detineti locatia la care se refera submodulul, nu exista nicio garantie ca ceea ce faceti referire va continua sa existe in acea locatie pentru totdeauna. Daca nu detineti locatia la distanta, va sugeram sa creati propria locatie la distanta, care este o clona a locatiei initiale, spre deosebire de a depinde de o terta parte pentru a-si mentine depozitul in locatia exacta pentru totdeauna. porno mature anal

git filter-branch este o comanda fascinant de periculoasa care are un caz de utilizare de nisa extrem de util.

git filter-branch –tree-filter ‘<terminal command>’ HEAD

Comanda de mai sus va executa <comanda terminal> pentru fiecare comitere din arbore incepand de la si functionand inapoi de la HEAD. Comanda va crea un nou commit cu noul continut pentru fiecare commit. De exemplu, spuneti ca ati confirmat accidental acreditarile dvs. de utilizator privat ca fisier in depozitul dvs. absolu porno git. Ati observat brusc ca acesta a fost cazul mai multor comiteri mai tarziu. Puteti rula urmatoarea comanda pentru a rescrie toate validarile anterioare, eliminand fisierul din fiecare validare.

git filter-branch –tree-filter ‘rm -f nume de fisier’ HEAD

Perfect! Fisierul respectiv nu mai exista nicaieri in istoricul dvs.

De ce ati dori sa faceti acest lucru in loc sa creati doar un nou commit care elimina acel fisier? Pentru ca cineva rau intentionat ar putea merge mereu inapoi pentru a comite anterior si de a vedea datele de conectare private , daca nu eliminati fisierul din toate trecut commit, de asemenea. porno prof

Grozav! Am realizat ceea ce am vrut sa facem. Aceasta comanda pare minunata! Care este problema?!

Problema este ca acum ati creat in esenta un depozit complet nou, cu un istoric complet nou.



  • porno paris
  • porno comique
  • porno jeune
  • porno complet
  • porno minet
  • porno ronde
  • porno pere et fille
  • porno moche
  • kim kardashian porno
  • porno anal vintage
  • russian porno
  • porno sado maso
  • hotesse de l’air porno
  • serie porno
  • porno doeda
  • porno couple
  • devenir acteur porno
  • x video porno
  • tournage porno
  • porno rebeu





Daca lucrati intr-o echipa cu un depozit la distanta partajat, tocmai v-ati distrus capacitatea de a impinge sau trage catre / din depozitul la distanta. Pentru a atenua acest lucru, ati putea forta impingerea la depozitul de la distanta, dar apoi puteti distruge permanent modificari valoroase.

Deoarece nu mai exista un istoric comun, compararea depozitului dvs. porno rapide local cu depozitul la distanta ar trebui sa fie facuta manual sau ar fi fost facuta inainte de filiala git. In plus , dupa impingerea fortei, veti fi distrus capacitatea echipei dvs. de a impinge / trage catre / din depozitul de la distanta. Acest lucru face ca echipa dvs. sa aiba nevoie sa-si stearga filiala sau depozitul local pentru a clona / extrage noul istoric. porno pub

De asemenea, nu va exista nici un istoric stocat al modificarilor create de comanda git filter-branch . Ar fi bine sa fiti absolut siguri ca modificarile pe care le introduceti cu git filter-branch sunt modificarile pe care le doriti, deoarece nu se mai poate intoarce!

In general, rescrierea istoricului nu este recomandata din toate motivele mentionate anterior.

git rebase este poate cea mai controversata comanda git care exista. Exista multe echipe de dezvoltare care mandateaza git rebase peste git merge. Personal, sunt un fan al abordarii git merge . parodie porno Dintr-un singur motiv. git rebase rescrie istoria, iar istoria rescrierii este inerent periculoasa.

Permiteti-mi sa explic diferenta dintre git merge si git rebase inainte de a explica in continuare de ce prefer git merge .

Atat git merge cat si git rebase rezolva aceeasi problema. Ei rezolva problema combinarii a doua ramuri cu modificari paralele intr-o singura ramura cu o singura istorie. jordi porno Sa examinam cazul in care avem o ramura principala si o ramura caracteristica asa cum este descris in imaginea urmatoare.

Credit de imagine catre Academind

Ramura caracteristica a fost creata din ramura principala la comiterea „m2”. Ramura de caracteristici a facut apoi modificari in depozit in comitetele „f1” si „f2”. In timp ce modificarile „f1” si „f2” erau in curs de dezvoltare, ramura principala a fost actualizata cu validarea „m3”. Cum actualizam filiala principala cu modificarile create in filiala caracteristica?

git merge face acest lucru pastrand toate comitetele ramurii de caracteristici. porno attaché Pe ramura master, va fi creat un nou commit care are o relatie istorica atat cu HEAD-ul ramurii master, cat si cu HEAD-ul ramurii de caracteristici. Acest commit de imbinare exista pentru a rezolva starile finale ale celor doua ramuri. Daca modificarile introduse intre cele doua ramuri nu pot fi rezolvate automat, apare un conflict de imbinare si utilizatorul trebuie sa rezolve conflictul decidand ce modificari trebuie pastrate inainte de crearea comitetului de imbinare. Directia de fuzionare a ramurii principale in ramura caracteristica sau fuzionarea ramurii caracteristice in ramura principala nu afecteaza in general rezolutia rezultata. Tot ce se schimba este pe ce ramura va fi initial creata comisia de imbinare. film porno entier

git rebase , totusi, reuseste rezolvarea celor doua ramuri intr-o singura istorie prin mutarea comisioanelor in istorie. De exemplu, in loc sa se aplice modificarile „f1” pentru „m2”. git rebase va stoca modificarile facute in „f1” si „f2”, va muta ramura caracteristica pentru a se baza pe „m3”, apoi va aplica „f1” si „f2” pe „m3”. Daca exista un conflict, trebuie sa rezolvati conflictul unul cate unul pentru fiecare commit care va fi aplicat noii commit de baza (in exemplul nostru, conflictele de imbinare pot aparea atunci cand se aplica atat „f1”, cat si „f2” pe „m3”) .

git rebase este excelent, deoarece istoricul git rezultat este o linie dreapta. video porno gay francais Nu exista nici o comitere care sa aiba mai mult de un parinte. Cu toate acestea, dupa rebase, comiterile „f1” si „f2” nu mai sunt adevarate conservari ale comitetelor originale „f1” si „f2”. ID-ul lor de comitere va fi diferit. Continutul lor poate fi diferit. Si, ca rezultat, cadeti in aceeasi problema pe care a creat -o git filter-branch . escort porno Daca lucrati cu un depozit la distanta partajat si ati efectuat rebase-ul local. Va trebui sa fortati sa impingeti modificarile rebazate in depozitul la distanta. O forta de forta risca sa elimine definitiv modificarile valoroase care ar fi putut fi in depozitul de la distanta. In plus, o forta de impingere distruge capacitatea colaboratorilor dvs. de a impinge / trage catre / din acea ramura din depozitul de la distanta. art porno

In general, echipele retrogradeaza utilizarea rabatului git pentru a avea loc numai in timpul cererilor de extragere catre ramura principala. Astfel, evitarea potentialului pentru probleme de colaborare. Totusi, prefer sa nu rescriu istoria niciodata.

Cand lucrati cu o echipa de dezvoltatori, este important ca git sa nu impiedice colaborarea perfecta. In general vorbind, trebuie evitat comportamentul din git care rescrie istoria sau modifica conventia privind modul in care cei mai multi oameni interactioneaza cu git. Submodulele Git modifica conventia generala git provocand urmarirea modificarilor pe mai multe niveluri, spre deosebire de o singura data pentru intregul proiect. git filter-branch si git rebase ambele va rescrie istoricul git. Si am discutat ca exista complicatii care apar atunci cand istoricul git este schimbat. In opinia mea, git rebase are un avantaj mic fata de git merge si ar trebui aproape intotdeauna evitat. Cu toate acestea, git filter-branchare utilizarile sale in situatii cumplite. Este un buton „Oh $ #! &” Mai mult decat este un instrument util. Bine de stiut ca exista, dar speram ca nu va fi nevoie sa-l folositi niciodata.

Inginer cercetator – Bored Millennial

Inginer cercetator – Bored Millennial

Descarcati aplicatia Medium