Nu-i chiar tutorial, dar eu mi-aș fi dorit să găsesc un asemenea text atunci când eram la început cu Version Control sau cu Git
Prima dată am „gustat” din beneficiile versionării când am dat de E-text editor. Ăsta a fost primul meu editor de suflet, ca să zic așa, iar una dintre funcționalități era că știa să facă undo între sesiuni. Adică închideai editorul (sau fișierul), îl redeschideai și puteai da undo ca și cum ai fi avut tot timpul fișierul în față.
A doua chestie făcută de E-text a fost să-mi introducă în flow conceptul de „branched undo”. Adică puteai da undo până la punctul X, făceai ceva, te apucai să dai undo până la punctul X-1, iar la redo apărea un popup care te întreba în ce direcție vrei să o apuci.
Aceste două funcționalități m-au făcut să ezit în a adopta un sistem de versionare, iar când am făcut-o, m-a dezamăgit din plin. Și nu pentru că era SVN, ci pentru că aveam cu totul alte așteptări de la un astfel de sistem.
Am zis că ar fi util să pun în scris toate „problemele” pe care mi le amintesc că le-am întâmpinat în acel moment.
Cum fac să fie totul real time?
Pentru că așa eram învățat, așteptările mele erau destul de… sus, ca să zic așa: voiam ca versionarea să se facă automat, la fiecare save. Ba chiar căutasem soluții pentru această „problemă”. Cum aș putea face commit la fișiere în timp real?
Evident, acum pare ridicolă această idee, dar la momentul respectiv era un blocker absolut.
Între timp am aflat că vrei să ai o anume versiune a codului, de preferat funcțională, nu TOATE versiunile…
Când faci commit?
Adițional la problema de mai sus, după ce am înțeles că nu e nevoie de commit-uri real time, am avut un alt blocaj: dacă nu e așa, atunci când fac commit? La fiecare 30 minute? Mai des? Mai rar?
Răspunsul găsit nu a fost chiar pe placul meu, ce părea a fi mai mult un koan: you make a commit every time you need one.
Oh, wow, păi și de unde știi? Nu știi, dar înveți. O să-ți dai seama că faci prea rar atunci când ai modificat 50 fișiere de la ultimul commit sau când ai lucrat toată ziua și faci commit când pleci acasă. O să-ți dai seama că faci prea des atunci când fiecare diff are una-două linii schimbate iar log-ul tău arată 84 commit-uri în ultimele 40 minute…
Atunci nu știam, dar acum aș putea spune că un commit trebuie să „îndeplinească” SRP, care în original zice așa:
A class should have only one reason to change.
adaptat ar suna:
A commit should have only one reason to be made.
Altfel spus, ai de rezolvat o problemă ce ține de autentificare, una de căutare și una de generare QR? În cazul în care nu se rezolvă toate cu o singură modificare în cod (și NU ar trebui!), ar trebui să ai cel puțin un commit pentru fiecare dintre aceste probleme.
Branching
Când am descoperit branch-urile în Git am avut alte nelămuriri absolut vitale (nu chiar…).
Cum pun toate branch-urile online?
Pentru că aveam vreo doi ani de SVN în spate, rămăsesem cu impresia că branch-urile ar trebui să stea pe server. TOATE branch-urile. Prin urmare, căutam tot felul de soluții și la această problemă (am impresia că Git a introdus de curând posibilitatea de a face push la toate branch-urile dintr-un foc)
Explicația este logică și evidentă ACUM: nu ai nevoie de asta! Branch-urile locale NU trebuie să existe și pe server decât dacă lucrează mai mulți pe acel branch (sau face parte dintr-un pull request). Altfel? Rămâne doar pe local!
Cred că am mai avut nelămuriri, dar acum zău că nu-mi aduc aminte… Voi cum ați adoptat versionarea? Ce non-probleme ați avut la început?