Jeg har brukt GitHub i ganske lang tid nå, og jeg pleide å presse funksjonsgrenene mine og deretter starte en Pull Request som jeg selv slo sammen. Jeg fant det hjalp meg med å holde rede på hvor jeg slo sammen filialer.
Men nylig har jeg lest mer og mer om hvordan Git fungerer, og jeg innså at jeg kan bruke fusjonsforpliktelsene til å referere til da jeg slo sammen grener.
Så hva skal jeg gjøre når jeg slår sammen en funksjonsgren til master:
Utfør en merge-commit på master og skyv den deretter oppstrøms ELLER Skyv den lokale grenen og start en Pull Request?
Jeg har lest Vi presenterer Pull Requests for et 2-personers team – slå sammen mine egne forespørsler? og Hva er arbeidsflyten med 2 personer i et prosjekt og Skal jeg åpne trekkforespørsler fra en filial på den offisielle repoen eller gaffelen min? men ingen av dem ser ut til å svare på det jeg leter etter.
Kommentarer
- Hva synes du egentlig mangler fra svarene?
- Den første snakker om det fra den forstand at pull-forespørsler er ment å være fagfellevurdert. Den andre tilbyr en arbeidsflyt. Den tredje er ikke ' t engang relatert.
- Jeg ser på dette fra en beste praksis eller Hvordan vedlikeholde en god git-historie synspunkt.
- Når jeg slår sammen en PR, gjør jeg det ved å slå sammen filialen lokalt. Dette lar meg sørge for at sammenslåingen gjelder rent, og å kjøre tester på nytt før jeg publiserer resultatet. GitHub ' s Pull Requests er bare en formalisering av denne arbeidsflyten, Git selv har ikke et begrep om PRs.
- Når en PR blir slått sammen, produserer den en sammenslåing forplikte seg til mester, så jeg tror ikke ' t dette gjør noen forskjell i git-historien. Dermed tror jeg ikke ' det er noen grunn til å bruke den ene eller den andre bortsett fra din personlige preferanse mellom kommandolinjen og Github UI.
Svar
git-flette mekanisme:
Ved å bruke git merge feature
mens du er på master, flettes grenen feature
til master
og produserer en merge-commit
(hvis grenen ikke kan spoles frem) i git-historikken. For å tvinge en merge-commit
til å bli laget, bruk --no-ff
alternativet med merge
.
Merge Pull Request-mekanisme:
Når vi starter en Pull Request på GitHub, skaper det en GitHub Issue
der folk kan snakke og diskutere forpliktelsene i PR før de slås sammen. Når en PR slås sammen på GitHub, gjør den nøyaktig det samme som git merge feature
.
Hva skal jeg gjøre ?
Så hva historien angår, er det ingen forskjell mellom de to.
Og når det gjelder bidrag, vil ikke bidragsyterne ha å gjøre noe annerledes for de to situasjonene. De er de samme (minus den hyggelige lille praten).
Beste fremgangsmåter:
Og jeg klarte ikke å finne noen gode fremgangsmåter, men logikken sier at PR-er ikke er veldig nyttige hvis det bare er en enkelt bidragsyter til et depot.
@lxrec og @amon hjalp meg med å nå denne konklusjonen.
Kommentarer
- Tips:
git merge
registrerer kanskje ikke en fusjonsforpliktelse hvis den kan gjøre et «spol fremover». For å tvinge et sammenslåingsforpliktelse, kan du legge til alternativet--no-ff
. - Jeg foretrekker å gjøre git-merge på lokalt i stedet for å gjøre det på githuib.com, hvis jeg ville ha noe slikt på github.com. Jeg foretrekker ikke å gjøre direkte på hovedgrenen. Jeg vil heller ta en ikke-hovedfilial som først kan settes på iscenesettingsmodus før den blir tilgjengelig for produksjon.
Svar
Som Ashhar sa, teknisk og historisk sett er det ingen forskjell. For prosjekter med en lite team, jeg foretrekker å slå sammen direkte i stedet for det ekstra trinnet med å opprette en PR. Men når en funksjon trenger gjennomgang / tilbakemelding eller når den er en WIP og mer enn én person vil jobbe med den, har jeg en tendens til å åpne en PR og legge til en liste over oppgaver til PRs beskrivelse.
Merk at git merge
kan bruke spoling fremover hvis det ikke er noen endringer å mestre, så det kan være lurt å bruke git merge --no-ff
. Jeg pleier ikke å gjøre det.
Så i sammendraget, bruk bare PR s når du trenger diskusjon. Ellers er det bare å slå sammen direkte.
Kommentarer
- Det ' er også verdt å nevne at diskusjonen og tilbakemeldingen på en pull-forespørsel kan kommer fra automatiserte kilder så vel som teammedlemmer. Hvis du har konfigurert en CI-server, kan den gi build- og testresultater, slik at du aldri slår sammen noe som bryter build on master.