GIT approach - continuous dev

,

Fairly new to GIT here (previously on SVN), am o problema de abordare cred. Situatia sta asa: fac dev si mentenanta pe un proiect marisor. Ei, imi vin bugs, enhancements, new features, eu lucrez pe un branch, fac deploy pe un server de staging spre testare si dupa aia fac merge pe master, trimit in productie.

Problema e ca se aduna taskurile in partea de testare (di cauza ca sunt foarte rapid si eficient si rezolv chestiile mai repede decat pot astia sa testeze) si se trezesc ca au un bugfix in mijlocul unei liste de taskuri si il testeaza pe ala si il vor in productie.

O solutie ar fi ca fiecare task sa fie pe branch-ul lui, care sa faca merge in branch-ul de dev, pe care il trimit in staging, dupa testare sa fac merge in master. Pare overkill insa, ca sunt o groaza de chestii mici si rapide, schimbari de texte… Si n-as mai vrea sa stau sa caut si nume de branch-uri.

Cum ar trebui abordata chestia asta?

Also, daca stiti cum sa fac rost de fisierele modificate intre doua commit-uri as mai putea face si manual niste manarii…

Dacă ai reparat un bug într-un commit, și vor să dai sus cu fix-ul ăla, poți să faci merge doar la acel commit, nu e nevoie să faci merge la tot branch-ul. Vezi git-cherry-pick, și răspunsurile de aici, în special ăsta.

1 Like

Un branch per task (unde task foarte fi orice de la pus o virgula, la modificat functionalitate majora in proiect).
In situatia descrisa de tine, as lucra cu mai multe branch-uri in functie de complexitatea si tipul task-ului, adica as avea un branch special pentru bugfixes, unul pentru enhancements (presupunand ca sunt mici) si cate un branch pentru fiecare feature nou.

git diff --name-status 9a9e886 b715a34 // hash-urile commit-urilor între care vrei lista

1 Like

Este genul de situație în care se pretează ori git flow ori github flow. Ambele metode se învârt în jurul ideii de un branch pentru orice modificare (indiferent că-i feature sau bugfix).

Branch-ul master este producția, branch-ul dev este staging-ul, prin urmare, tot ce faci aici este ori merge ori accepți PR-uri (practic tot merge-uri).

Eu aș alege Gitflow pentru că mi se pare mai intuitiv: toate branch-urile au nume de genul feature/foo hotfix/bar șamd și e destul de greu să nu îți dai seama care-i care.

Nu știu cum aș aborda situația în care tu vrei merge pe dev după ce se testează pe server…

sa vad daca am inteles: sunt pe master, fac ‘git-cherry-pick id.commit.alt.branch’ si-mi face merge cu fiserele modificate la commit-ul ala in master?

Daca stau bine si ma gandesc, un branch special pt bugfixing si branch diferit pentru fiecare feature / enhancement ar cam rezolva problemele.

lista de fisiere m-am priceput s-o scot, fisierele efective zic. probabil pot sa-i dau parametru la copy o lista de fisiere luata cu git diff?

Da.

Poți să exporți o arhivă cu ele:

git archive -o /cale/catre/arhiva.zip HEAD $(git diff --name-only 9a9e886 b715a34)
1 Like

neat. asta imi rezolva problemele curente, urmand ca pe viitor sa fac multe branch-uri. sa vezi distractie cand le-oi incurca :smiley:

Subscriu!

Pe mine articolul ăla m-a ajutat să fiu mult mai ordonat. Este și o unealtă scrisă de același tip, nvie/gitflow, dar nu am folosit-o pentru că nu am adoptat modelul de acolo în mod religios, ci am adaptat puțin la modul meu de lucru și prefer să am flexibilitatea asta. De asemenea, git merge --no-ff feature/whatever (important e --no-ff ăla) e grozav pentru că poți vedea mai ușor istoricul proiectului iar în cazul în care sunt probleme și trebuie să îți dai seama ce funcționalitate a introdus-o, poți sări ușor la punctele de merge.

Dacă folosești un sistem de administrare a funcționalităților, bug-urilor, etc, ai putea folosi ID-ul lor în numirea branch-urilor; asta ar evita, cred, confuziile între branch-uri. Eu așa am început să fac în ideea unor integrări cu alte unelte care știu de ID-urile alea.

1 Like

use case:

  • am 2 branch-uri pe care se lucreaza in paralel.
  • fac merge la B1 in dev, fac deploy la dev pe serverul de staging pentru test. S-a testat, mai e de lucru.
  • acum as vrea sa testez B2, tot pe serverul de staging, dar nu vreau sa amestec ciorba cu un B1 nefunctional.

fac rollback pe dev si pe B1 la versiunile anterioare merge-ului? ce se intampla daca pe B1 am mai dat deja un commit?

cum pot testa pe rand diverse branch-uri fara sa le amestec?

Faci diff între B2 și branch-ul care e acum pe server (B1, la commit-ul X) și dai sus cu modificările.

Ideal, și pe server ai tot repo git, și doar dai git checkout [branch name] și acolo (precedat de git pull, bineînțeles). Altfel, tot faci diff-uri între diversele branch-uri, la diversele commit-uri la care sunt fiecare, și aplici modificările.

1 Like

da. daca ai acces si git pe server. probabil e mai usor insa sa obtii acces si git pe server decat sa dai sus cu niste diff-uri :slight_smile:

Iti zic cum as face eu. Dar asta presupune git si pe server si pe dev

Dev
work done, urcam modificarile pe repo.
[branch1] - git push origin branch1

Server
[master] - git fetch origin
[master] - git checkout branch1
[branch1] - git pull origin branch1

Same story si cu branch2.

In cazul asta nu as face merge deloc.

1 Like

Sunt mai multe modalitati. Am observat ca nedumerirea e mai larga, asa ca am inceput o serie de articole pe tema asta.
Primul dintre ele va arata gitworkflows in actiune: http://www.tekkie.ro/revision-control/software-branching-strategies-a-git-overview-part-1-gitworkflows/
Sper sa va fie util.

Urmatorul va fi legat de git flow, mentionat mai sus de @andreimic

2 Likes

I moved 6 posts to a new topic: Modificările nu apar pe server

I moved 2 posts to a new topic: Nelămuriri în privința graph-ului generat de branch-uri