- A hozzászóláshoz be kell jelentkezni
- 1385 megtekintés
Hozzászólások
Van olyan gitet használó SCM, ami ebbe helyezi el a code reviewkat: https://github.com/google/git-appraise
- A hozzászóláshoz be kell jelentkezni
Én néha használom, szerintem hasznos a metaadatoknak. Csak lehetne felhasználóbarátabb a kezelése.
A magyar ember jelképe a hátrafelé nyilazás. Vakon rohanunk a semmibe, miközben a múltunkat támadjuk.
- A hozzászóláshoz be kell jelentkezni
Arra szavaztam, hogy Sose használom. Bár, nagyüzemi szoftvergyártásnál, vagy csak simán webes felületben elrejtve előfordulhat, hogy mégis csak használtam, tudtomon kívül.
Még nincs aláírásom.
- A hozzászóláshoz be kell jelentkezni
Elég gyakran csinálok értelmes commit message-et, ritkábban értelmes PR/MR leírást, notes-ot még az életben soha.
- A hozzászóláshoz be kell jelentkezni
A notes azért jó, mert utólag tudod csatolni egy commithoz anélkül, hogy a hash vagy bármi megváltozna.
A magyar ember jelképe a hátrafelé nyilazás. Vakon rohanunk a semmibe, miközben a múltunkat támadjuk.
- A hozzászóláshoz be kell jelentkezni
Csak utána semmilyen tool nincs, ami támogatja, legalábbis az ismertebben közül (Github, Gitlab, stb)
- A hozzászóláshoz be kell jelentkezni
Igen, ezen kellene fejleszteni, meg a könnyebb használhatóságán.
A magyar ember jelképe a hátrafelé nyilazás. Vakon rohanunk a semmibe, miközben a múltunkat támadjuk.
- A hozzászóláshoz be kell jelentkezni
Nem így van; a `git-notes` briliáns eszköz levlista-alapú fejlesztéshez. (Az más kérdés, hogy levlistákkal egyre ritkábban találkozni, de ettől még a use case létezik.)
Tipikusan akkor használjuk, amikor egy patch set-ből v1, v2, v3, ... vn változatot küldünk be, a bírálatokra reagálva. A beküldő a git-range-diff paranccsal összehasonlítja a legutóbbi (v(n-1)) és a legfrisebb (v(n)) verzióját a patch set-nek (development branch-nek), amely kijelzi mind a patch set szerkezeti változásait (patch-ek sorrendjének megváltoztatása, új patch-ek beszúrása, régi patch-ek kiesése), mind az egyes patch-eken belüli változásokat (interdiff formátumban, amit meg kell tanulni olvasni). A fejlesztő pedig ennek megfelelően patch-enkénti changelog-ot tart naprakészen, git-notes-szal. A git-rebase támogatja a git-notes-t, tehát új patch set version összeállításakor az egyes patch changelog-ját csak ki kell terjeszteni a tetején. A git-format-patch szintén támogatja a git-notes-t; a levlistán megjelenő patch email-eknek van egy dedikált szekciója, amelyben ez a changelog megjelenik. Rendkívüli mértékben támogatja az inkrementális review-t, úgyhogy az egyik legjobb eszköz.
A fenti interakcióban mind a bírálók, mind a beküldők jellemzően a patch set összes változatát megőrzik, külön branch-eken; a bíráló is a git-range-diff-et futtatja inkrementális review-hoz, lokálisan, és ehhez használja támogatásnak a levlistán olvasható, patch-enkénti "notes" szekciót. A git-am parancs (amellyel lementett email-ekből tudjuk az új verziójú branch-et felépíteni) szintén ismeri a "notes" szekciót, és átugorja.
Ezeket a patch-enkénti changelog-okat kifejezetten nem a commit message részeként akarjuk megtartani; amikor a végső változatot beolvasztjuk, akkor ez a changelog nem kerül a commit history-ba. A levlista archívumában megmarad, ha valakit érdekel (gyakran releváns tud lenni, igen).
A git-range-diff másik óriási előnye, hogy nagyon jól ellenáll ("reziliens") annak a helyzetnek, amikor egy rebase olyan master branch-ra történik, amelynek időközben elmászott a HEAD-je. Ilyenkor egy kumulatív git-diff szinte teljesen haszontalan, egy git-range-diff viszont zseniális.
A github-on és gitlab-on nevelkedett (vagy más szóval: satnyult) generációk ezt sajnos nem értik, nem is érthetik (nem az ő hibájuk), mert ezek a WebUI-k eleve nem támogatnak inkrementális review-t (tömören: olyan patch-enkénti összehasonlítását egy patch set két szomszédos verziójának, amelyet a git-range-diff végez). Így számukra értelmezhetetlen mind a patch-enkénti changelog, mind az interdiff formátum, mind (ennek folyományaként) a "notes" szekció, vagy maga a git-notes parancs.
A github egyik legnagyobb emberiség elleni bűntette a squash-on-merge bevezetése (mert arra neveli a fejlesztőket, hogy ne strukturálják a patch set-jeiket, miközben a patch set sorrendisége kritikus kommunikációs eszköz). A másik az inkrementális bírálat hiánya. A harmadik pedig az, hogy egy PR frissítéséhez ugyanazt a branch-et muszáj frissíteni (push vagy force-push), anélkül, hogy lenne automatizmus a branch korábbi változatainak megőrzésére, minimum addig, amíg a PR-t be nem olvasztják. Ez ugyanis azt jelenti, hogy aki pl. a harmadik vagy negyedik változatnál kapcsolódik be a review-ba, nem tudja áttekinteni a korábbi patch series változatok közötti strukturált változtatásokat, még akkor sem, ha hajlandó lenne a régi branch változatokat fetch-elni, és lokálisan git-range-diff-et futtani. Ugyanis nincs mit letölteni. Én már megtanultam, hogy minden branch változatot azonnal lehúzok lokálisba (amikor még friss -- akkor még le lehet), és ráragasztok egy verziózott lokális branch nevet. Így a patch set evolúciója legalább nálam megvan, amíg a review be nem fejeződik.
Egy szó mint száz, a github és tsai iszonyatos pusztítást végeztek a contribution/review workflow terén. Természetesen én sem tudom elkerülni a github-ot; bizton állíthatom, hogy olyan érzés a használata, a patch beküldős levlistákhoz képest, mintha a csukóim és a bokáim a hátam mögött gúzsba lennének kötve.
(Szerk. néhány typo/thinko javítása.)
End of rant.
- A hozzászóláshoz be kell jelentkezni
... Ha már belekezdtem a github kritizálásába, ne feledkezzünk meg arról sem, hogy teljesen rossz a bírálati / kommentálási adatmodellje is: a bírálói kommenteket nem adott patch set verzió adott patch-ének adott sorához fűzi, hanem a kumulatív diff adott sorához, és ezeket a kommenteket valamilyen nyomi heurisztika alapján a következő (vagyis git push (--force) utáni) patch set verziókra is igyekszik átvinni. Ez nyilván teljesen abszurd, a v1-re, v2-re adott kommentek többnyire teljesen értelmetlenek a v3, v4 stb tekintetében, ráadásul a kommentek megjelenítéséből nagyrészt lehetetlen kideríteni, hogy most akkor pontosan melyik patch-en is kellene javítani, a komment megoldásához (ez egyáltalán nem vicces, amikor tizen-huszon patch van egy sorozatban). Tökre látszik ebből is, hogy a github tervezői nem fogták fel (vagy ami rosszabb: elvetették) azt a koncepciót, hogy egy patch series-en belül a patch-ek tagolása, sorba rendezésbe kritikus fontosságú kommunikációs eszköz, és ha egy adott patch-ból legvégül fennmaradó (= a kumulatív diffben is látszó) sor problémás, akkor azt az érintett patch-en belül (tehát akár a series közepében is) javítjuk. Addig terjed a képzelőerejük, hogy "oké akkor itt a kumulatív diff, oszt ez a sora meg az a sora nem jó, taknyold át valahol".
- A hozzászóláshoz be kell jelentkezni
És persze mi sem természetesebb, hogy ez a probléma a levlista-alapú munkafolyamatnál nem létezik, ugyanis az egyes patch email-ek szépen be vannak tagolva (mintegy válaszokként) a cover letter alá (amit minden értelmes MUA jól mutat threaded view-ban); a review kommentek pedig ezekre a patch email-ekre vannak válaszként elküldve, megfelelő idézéssel és beszúrkodással. Ezek a kommentek tökéletesen verzióhoz és helyhez vannak kötve, és a következő változat review-jánál referenciaként használhatók; le lehet ellenőrizni, hogy a beküldő minden feltárt problémát kijavított-e.
A git toolkit és az email alapú patch-csere egy közel hibátlan rendszert, "ökoszisztémát" alkotott, amelyet a web 2.0 fostengere és apokalipszisa sajnos minden fronton egyszerre tett tönkre (gmail és általában webes email felületek, top posting, helytelen idézés, levlisták üzemeltetésének megnehezítése, github, etc etc etc).
- A hozzászóláshoz be kell jelentkezni
Hűha, belejöttem: a patch-ek sorba rendezésénél (mint említettem) az egyik elvárás (illetve haszon) az, hogy a reviewer számára logikusan, atomi lépésekben fel tudjuk építeni a bugfix-et vagy feature-t; a másik (vagy "egy másik") elvárás pedig az, hogy a projekt a branch-nak minden egyes patch-énél kicsekkolva lefordul, és kielégíti a teszteket. Ezt nyilván beküldés előtt a fejlesztőnek le kell ellenőriznie; többnyire valamilyen "git rebase --exec ..." paranccsal. Ennek a haszna pedig az, hogy amikor -- nem "ha", hanem "amikor" -- fél évvel később rájövünk, hogy valamit elcsesztünk, mert regresszió van, akkor a git-bisect parancs nem egy ötezer vagy hétezer soros commit-ot dob végül a fejünkre (amiben aztán kereshetjük a hibát vakulásig), hanem egy pár tíz, max. 1-2 száz soros commit-ot, amit célzottan átolvasva már jó eséllyel ki is ugrik a hiba. Ennek feltétele pedig az, hogy kicsi, atomi commit-okat írjunk, és minden commit forduljon. (A git-bisect nem tudja a fát olyan commit-nál tesztelni, amit nem tud lefordítani.) Na, ezért is gyalázat a squash-on-merge.
- A hozzászóláshoz be kell jelentkezni
anélkül, hogy lenne automatizmus a branch korábbi változatainak megőrzésére
A branch csak egy "alias", pontosabban egy pointer egy commitra. Minden commit megőrződik, bármikor mondhatod azt, hogy az x1 commit az az y branch v1 változata, az x2 commit meg az y branch v2 változata. Szóval a branch korábbi állapota mindig megőrződik, maximum nincs rá automatikusan alias, de erre csinálhatsz bármikor hookot és megcsinálja automatikusan.
- A hozzászóláshoz be kell jelentkezni
Az a git tag.
Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....
- A hozzászóláshoz be kell jelentkezni
A branch is alias egy commitra, csak nem fix, hanem mozog.
A magyar ember jelképe a hátrafelé nyilazás. Vakon rohanunk a semmibe, miközben a múltunkat támadjuk.
- A hozzászóláshoz be kell jelentkezni
A git tag is csak egy alias egy commitra.
https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell
A branch in Git is simply a lightweight movable pointer to one of these commits.
https://git-scm.com/book/en/v2/Git-Basics-Tagging
Git supports two types of tags: lightweight and annotated.
A lightweight tag is very much like a branch that doesn’t change — it’s just a pointer to a specific commit.
- A hozzászóláshoz be kell jelentkezni
A tag-eknek van még egy(-két) huncutsága, amelyekből a másodikra most nem emlékszem pontosan, de arra emlékszem, hogy korábban (többször is) belebotlottam.
Az első huncutság az, hogy a tag-ek nem repo- (= nem remote-) specifikusak, mint a branch-ek. Ha van két remote-ot egy local clone-ban, akkor mindegyik remote-nak lehet azonos B nevű branch-e, amelyek tudnak tök máshova mutatni. A tag-ekre ez -- tudtommal -- nem igaz; ott egyetlen közös névtér van. Ezért is szoktam nem-kanonikus remote-okat mindig a "--no-tags" opcióval klónozni, illetve (a "git remote add -f" paranccsal) létező helyi klónhoz hozzáadni -- nem akarom, hogy "beszennyezzék" a kanonikus repo tag-névterét. (Megfigyelhető, hogy azok a kanonikus repo-k / remote-ok, amelyeknél tervezett, hogy a fejlesztők egyazon helyi klón-on belül többet is használjanak belőlük, ügyelnek arra, hogy valamilyen tag-elnevezési konvencióval az ütközéseket elkerüljék. Pl. mainline és stable fák között a "git cherry-pick -x" nagyon hasznos, és mindegyik ilyen fa használ tag-eket; nekik muszáj figyelni arra, hogy a tag-ek ne ütközzenek.)
A második huncutság valahol a push vagy a pull környékén volt. Úgy rémlik, hogy klónoztam egy repo-t, amiben voltak olyan tag-ek, amelyek nem voltak egyúttal valamely branch-en is. A git clone csak a branch-eket hozta le (mint symbolic ref-eket), illetve (természetesen) a gráf mindazon részét, amely ezekből a branch-ekből elérhető volt; a tag-eket viszont (és a gráf azon részét, amely csak a tag-ekből volt elérhető) nem töltötte le. És ha jól emlékszem, ez nem a "--no-tags" következménye volt... de már homályos.
- A hozzászóláshoz be kell jelentkezni
en szemely szerint a git submodule-lal allok ilyen felemason.
Valahogy nem lehet ertelmesen adott git projekt branchere iranyitani, csak egy adott commitra vagy a main(?) branchre.
Szóval csinalsz egy hibajavitast egy olyan projektben ami submodulet hasznal, es le kell nyulni egyik submoduleba ott is hobajavitabi. Ezt normal esetben egy sajat branchben intezned, de ultraszopas a git submodul.
Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....
- A hozzászóláshoz be kell jelentkezni
A submodule-ok tényleg vérverítékesek, de azért valamivel jobb a helyzet. Meg lehet azt jelölni, hogy a superproject a submodule-nak egy adott branch-ét kövesse, és akkor a "git submodule update --remote" onnan fogja lehúzni az újdonságokat. Sőt, van arra is szintaxis, hogy ha a superproject-ben a B nevű branch-en vagy, akkor automatikusan az adott submodule-nak is a B nevű branch-ét fogyasszuk. gitmodules(5):
submodule.<name>.branch
A remote branch name for tracking updates in the upstream submodule. If the option is not specified, it defaults to the remote HEAD. A special value of . is used to indicate that the name of the branch in the submodule should be the same name as the current branch in the current repository. See the --remote documentation in git-submodule(1) for details.
Így azért kellemesebb (de azért így is nagyon kényelmetlen, valóban).
- A hozzászóláshoz be kell jelentkezni
Minden commit megőrződik
Ez nem így van. A git elvileg bármikor eldobhat minden olyan commit-ot, amely a commit gráfban egyetlen symbolic ref-ből (branch-ből, tag-ből) sem elérhető, parent pointer-ek mentén. Lásd "git gc [--prune]". Ha nem így lenne, akkor a repo-kban a hulladék mennyisége korlátlan lenne; a git-rebase és a non-fast-forward push rengeteg orphan commit-ot generálnak; ezeket időnként el kell takarítani. Természetesen a garbage collection nem azonnali; az nem lenne hasznos.
(Jó példa a késleltetett szemétgyűjtés hasznosságára a "git reflog --date=local BRANCH". Ha elrontasz egy rebase-t, de úgy, hogy be is fejezed (tehát a branch "át is áll"), akkor még egy ideig a branch-et "git reset --hard"-dal vissza tudod irányítani a branch egy korábbi változatára, amit a git-reflog-ból tudsz esetleg kinézni. De a szemétgyűjtés ritkasága nem garantált; elvileg semmi nem zárja ki, hogy egy cron job naponta futtasson a nagy repo-kon git-gc-t.)
A másik ellenvetésem az, hogy a commit hash-ek (az élettartamuktól függetlenül) nem beszédesek; sokkal beszédesebb, ha "feature-v1", "feature-v2" stb hivatkozásaink vannak.
erre csinálhatsz bármikor hookot és megcsinálja automatikusan
Ez mondjuk jó ötlet!; nem gondoltam rá.
- A hozzászóláshoz be kell jelentkezni
githubon ha rebase-elsz egy branchet, vagy barmi modosult akkor lesz egy ilyen sorod a PR-ben
tenstad force-pushed the sftp branch from 9b9a13d to 0828535 3 months ago
es a ket hash kattinthato marad. tehat a github ha nyom is gc-t akkor az ilyen hivatkozasok megmaradnak
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
- A hozzászóláshoz be kell jelentkezni
Ez ugyanis azt jelenti, hogy aki pl. a harmadik vagy negyedik változatnál kapcsolódik be a review-ba, nem tudja áttekinteni a korábbi patch series változatok közötti strukturált változtatásokat
Dehogynem. A Github felületén tök jól látszik az, hogy hogyan fejlődött egy branch.
Hogy egy példát mutassak: https://github.com/openjdk/jdk/pull/26504/files
Ez egy olyan PR, amihez négy kommit volt.
Itt baloldalt fent láthatsz egy lenyílót: Changes from all commits vagy éppen adott commit változásai. Külön eset a "Show changes since your last review", de commitonként is megnézheted a változásokat.
- A hozzászóláshoz be kell jelentkezni
Külön eset a "Show changes since your last review"
+1, reviewerként igazából 99%-ban csak ezt nézem, a többi csak zaj
- A hozzászóláshoz be kell jelentkezni
Mivel amúgy is ez fontos: mi változott, amit át kell nézned. Hogy ez a változat hogyan alakult ki, irreleváns.
- A hozzászóláshoz be kell jelentkezni
Hogy ez a változat hogyan alakult ki, irreleváns.
Abszolút nem értek veled egyet; a PR végterméke, végeredménye nem egy lenyomat (nem a fa állapota az utolsó commitnál), hanem a commit history-nak egy szakasza (esetleg részgráfja). A kódot (és a kommenteket és a commit message-eket) elsősorban emberek közötti kommunikációra írjuk; az mellékes, hogy a gép futtatni is tudja. (Sarkítok, de érted, mire gondolok.) A PR végterméke az, hogy az egész gondolatmenet, aprólékosan, fokozatosan felépítve, megmarad a commit history-ban. Ha van egy hiba a kódban, amely egy olyan téves elgondolásból származik, amely a patch set közepét érinti, akkor a javítás nem az, hogy a végére rádobjuk a fixet (azért, hogy te könnyen megnézhesd azt az 1 dolgot), hanem az, hogy a patch set közepén kijavítjuk a hibás patch-et, frissítjük hozzá a commit message-et (amelyben a téves elgondolás szerepel), kiegészítjük az adott patch changelog-ját. Ezután a reviewer megnézi az egész új patch set verziót inkrementálisan (git-range-diff-fel). Nemcsak azt fogja látni, hogy a végső kód, a végeredmény (ami futni fog) jó, hanem azt is látni fogja, hogy a patch set közepén, az eredeti helyén, a gondolati hibát kijavítottuk. Az adott patch előző és mostani változatát összehasonlítva (ami egy interdiff) a reviewer látni fogja a commit message, esetleg a commit subject (!) változását is -- a github képtelen commit message-eket összehasonlítani, ami pedig nagyon nagy hiba; szerk.: hasonlóan, nem enged a commit message-hez kommenteket fűzni --, és persze azt is, hogy a patchen belüli változás hogyan változott meg. Ha úgy tetszik: második deriváltat néz.
- A hozzászóláshoz be kell jelentkezni
Imho bármilyen dev workflow, ami arra épít, hogy megváltoztatjuk a múltat, az nem jó.
A hibajavítás egy külön change. Megváltozik a program működése. Nem tudod, hogy a hibás commitot már ki, hova használta fel.
- A hozzászóláshoz be kell jelentkezni
Igen, de (ld. a másik válaszomban) itt az a döntő, hogy az a másik honnan használta fel a hibás commit-ot. Ha a master branch-ről, akkor joga van elvárni, hogy csak fast-forwardable mozgást lásson a HEAD-en. Ha bárhonnan máshonnan vette a hibás commit-ot, akkor magára vessen. A projektben van egy megegyezés, hogy mi számít a fejlesztői gárda számára publikáltnak, "nyilvánosan közöltnek". A non-ff rebase ill. push olyan branch-eken lehetséges, amelyek nem számítanak közöltnek.
- A hozzászóláshoz be kell jelentkezni
az a másik honnan használta fel a hibás commit-ot.
Teljesen mindegy. Nem a commit hibás, hanem a kód. Az, hogy az a hiba melyik commitban került bele a kódba, a hibajavítás szempontjából teljesen mindegy, ki kell javítani. Abból a szempontból nem mindegy csak, hogy értesíteni kell a felhasználókat, hogy az X.Y.Z. verzió óta hiba van.
A projektben van egy megegyezés, hogy mi számít a fejlesztői gárda számára publikáltnak, "nyilvánosan közöltnek".
Ezt nem igazán értem. Minden commit nyilvánosan közölt azzal a repoval, ahova pusholod.
- A hozzászóláshoz be kell jelentkezni
A PR végterméke az, hogy az egész gondolatmenet, aprólékosan, fokozatosan felépítve, megmarad a commit history-ban.
De hát ez csak annyit jelent, hogy a PR egy külön branch, aminek ott a commit historyja. És merge után nem törlöd ki a branchet. Ennyi az egész, megmarad az egész gondolatmeneted.
Ha van egy hiba a kódban, amely egy olyan téves elgondolásból származik, amely a patch set közepét érinti,
Nincs ilyen, hogy a patch set közepe. Maximum az, hogy a PR-ban többféle funkcionalitás van, amelyek a PR-on belül külön életet élnek.
Csinálhatod azt, hogy van egy PR branched, és ebből a PR branchből te még ágaztatsz le "patch" brancheket, amiket a PR branchbe mergelsz be, amikor az a rész készen van és már nincs benne hiba.
Szóval valahogy így:
1. mastert leágaztatod a PR-odhoz, legyen a neve pr-foo
2. A PR-ban, mivel több patched is van (patch set), minden egyes patchhez létrehozol egy branchet. Azt a branchet reviewzod, commitolsz oda, hívhatod ezeket a brancheket úgy, hogy pr-foo-patch-bar
3. Ezeket a pr-foo-patch-x brancheket mergeled folyamatosan a pr-foo branchbe. Megmarad minden kommit a pr-foo-patch-x brancheken is.
4. Amint a PR branchbe minden patch branch bekerült, akkor a PR branch bekerülhet a masterbe.
A reviewerek mindig megnézhetik a pr-foo-patch-x brancheket, és reviewzhatják azt.
Az egész csak annyit jelent, hogy a fejlesztés során hány különálló életet kódrészed van, mindegyik megérdemel egy branchet. Az, hogy ez a branch miből származik (a masterből, PR branchből, vagy éppen a patch branchből is - ha esetleg szükség van rá), az a fejlesztői folyamat része.
De git szintjén csak branchek kellenek és kész. És semmilyen historyt nem kell újraírni, soha.
- A hozzászóláshoz be kell jelentkezni
Maximum az, hogy a PR-ban többféle funkcionalitás van
Na de ilyen inkább ne legyen. :)
- A hozzászóláshoz be kell jelentkezni
Az azért előfordulhat, hogy egy PR mondjuk több modult/alrendszert érint egy komplex kódbázisban, és a változásnak együtt van értelme.
Főleg egy monorepo stílusú fejlesztés esetén igaz ez. A monorepo sokszor kényelmes, de azért vannak kényelmetlen dolgai is.
Ott mondjuk egy PR-on belül lehet az, hogy module1 és module2 is módosul, akár pont azért, mert a teljes funkcionalitáshoz az kell, hogy mindkét modul funkcionalitása módosuljon.
Nincs annak értelme, hogy feladsz egy PR-t a module1 módosítására, meg egy másikat a module2 módosítására, hiába különálló modulok, a funkcionalitásnak együtt van értelme.
És akkor csinálsz egy PR-t a hozzá tartozó PR branch-csel, amiből még leágaztathatsz egy pr-patch-module1 meg egy pr-patch-module2 branchet, azt fejleszthetik a megfelelő module1 és module2 felelősök.
De ez az egész már inkább projektszervezési dolog és nem a git mint eszköz által diktált jellegzetesség.
A git egy technikai eszköz csak a fejlesztés támogatására, a feladata ezt a projektszervezést támogatni, és a git ezt kiválóan támogatja a branchekkel, másra nincs itt szükség, pláne nincs szükség a history módosítására soha.
- A hozzászóláshoz be kell jelentkezni
Jah, funkcionalitás alatt nem erre asszociáltam, hanem mondjuk hogy egy PR-ban fut mittudomén, valami olyan, hogy az AI support agent beépítése a webshopba, meg az, hogy lehessen díjbekérővel fizetni.
- A hozzászóláshoz be kell jelentkezni
Ez egy olyan PR, amihez négy kommit volt.
Igen, és már itt látszik a baj: a negyedik commit egy olyan hibát (missing EOF) javít, amit a harmadik commit vezetett be. Ilyenkor nem a tetejére dobunk rá egy fixupot, hanem megjavítjuk a harmadik patch-et, és az egész branch-et újra feltoljuk. (Az a tény, hogy itt ez az eljárás eleve a v1-en belül történt (vagyis hogy a "tetejére dobott fixup" már a legelső push-nak a része volt), számomra még inkább elfogadhatatlan. Ki a csuda tol fel úgy egy patch series-t, hogy saját maga is tudja, hogy egyes patch-ek a sorozatban félkészek, hibásak?)
Changes from all commits
Igen, ez a kumulatív diff; áttekinteni hasznos lehet, kommentáláshoz nagyrészt haszontalan, mert nem követi azt a vonulatot, evolúciót, ahogyan a végállapot kialakul.
Show changes since your last review
Ilyet még nem láttam, és (mivel ezen a PR-en nincs több, külön push / review) itt nem is tudom megnézni.
commitonként is megnézheted a változásokat
A fő kérdés az, hogy a legutolsó review óta és commit-onként láthatom-e a változásokat. Igazából engem nem a git diff érdekel, mert nem (csak) a kód változása érdekel. Engem az egyes patch-ek változása érdekel (diff-ek diff-je --> interdiff).
- A hozzászóláshoz be kell jelentkezni
Igen, és már itt látszik a baj: a negyedik commit egy olyan hibát (missing EOF) javít, amit a harmadik commit vezetett be.
De honnan tudod*, hogy a harmadik commitnál nem csinált valaki egy branch-ot, nem volt release (ha releasable branchen vetted észre a bugot, nyilván), stb.? Olvasva a kommentjeidet, (nyilván látatlanul) arra tippelnék, hogy túl hosszú életűek a feature branchek azokban a projektekben, amiben dolgozol.
* Értelemszerűen egy kis projektnél beleférhet, de ahol több ember dolgozik együtt, ott nem véletlenül tilos például a force push.
- A hozzászóláshoz be kell jelentkezni
De honnan tudod*, hogy a harmadik commitnál nem csinált valaki egy branch-ot, nem volt release (ha releasable branchen vetted észre a bugot, nyilván), stb.?
Onnan, hogy a feature branch-et még nem merge-elték a master branch-be. Nyilván a master branch csak előre megy! De amíg egy feature branch különféle verzióin dolgozik az ember (hogy úgy mondjam: egy egyszemélyes branch-en), addig annak a branch-nek a verziói között bármi előfordulhat.
Másként kifejezve: a history megváltoztatása addig járható út, amíg a bírálat folyamatban van (akár a feature branch több verzióján átívelve is). Onnantól, hogy a teljes sorozatot jóváhagyta mindenki, akinek kellett, onnantól jön a merge, és akkor véssük kőbe a commit-okat. Ha ezt követően veszünk észre hibát valamelyik patch-ben, akkor természetesen már külön patch kell a javításához. Lényegében a master branch-en való megjelenés az az aktus, amitől egy commit read-only-vá válik, mivel akkor már a "világ" fetch-elhette. A master branch a publikációs csatorna. Amíg csak egy személyes feature branch-ben van egy commit, addig nincsenek stabilitási garanciák.
hogy túl hosszú életűek a feature branchek azokban a projektekben, amiben dolgozol
Ezt nem mondanám; az viszont igaz, hogy a branch-ek, amelyekről beszélek, egyszemélyi kontroll alatt állnak.
ahol több ember dolgozik együtt, ott nem véletlenül tilos például a force push
Ezzel teljesen egyetértek; ahol már 2 ember dolgozik egy feature-ön, ott már kettejük között is kell koordinálni (erre valók pl. a linux tematikus / alrendszeri levlistái, sub-maintainer-ei). Az alrendszer központi branch-én / fájában játsszák azt, ami kisebb projekteknél a main branch.
... Érdekes; úgy látszik, hogy én feltételeztem egy olyan kontextust ebben a beszélgetésben, ami nem általános. Azok a branch-ek, amelyekre gondolok, pár hetes, kivételesen esetben pár hónapos kort érnek meg (beleértve az összes verziót), és univerzálisan egyszemélyi kontroll alatt állnak. Egy néhány tíz patch-ből álló branch már nagynak számít.
- A hozzászóláshoz be kell jelentkezni