Praca w GIT tylko na Masterze

TS
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 2 godziny
  • Postów:853
3

Z tego co wywnioskowałem to git branchless charakteryzuje się następującymi cechami:

  1. Każdy commit powinien reprezentować jakąś logiczną jednostkę kodu,
  2. Commity lokalnie składają się z mniejszych lokalnych commitów, które można dowolnie sobie modyfikować i zmieniać kolejność,
  3. Po spushowaniu na mastera tworzony jest pull request na mastera przy pomocy takich narzędzi jak Gerrit gdzie można sobie robić code review zanim commit finalnie trafi na mastera,
  4. Całe flow jest uproszczonym gitlab/github flow gdzie kroki, które można zrobić za pomocą amend lub stash oraz przy użyciu feature branchy są tak naprawdę robione pod spodem,
  5. Jest jeszcze mało tooli dla gita, które to wspierają taki workflow lub nie są one jeszcze zbyt popularne.

Czy dobrze to rozumiem?

Obstawiam, że w fangach ktoś pomyślał sobie, że każdy programista na gita zużywa np. 2 godziny dziennie i dzięki temu, że uproszczą te komendy to zaoszczędzą ten czas razy 20000 programistów, ale osobiście ciężko mi uwierzyć w ten zysk. U mnie flow wygląda z reguły tak, że robię sobie feature brancha i pierwszego commita, później z 10 razy git commit --amend --no-edit. A później jak dostanę approve w moim PR to zaznaczam squash i wychodzi mi na to samo.

edytowany 1x, ostatnio: twoj_stary_pijany
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 11 godzin
  • Lokalizacja:Wrocław
4
Charles_Ray napisał(a):

Jeżeli ten brancheless https://github.com/arxanas/git-branchless

odzwierciedla to co jest w Googlu, to code review jest robione na poziomie commita, który trafia bezpośrednio do mastera - pisałem o tym podejściu w innym wątku. Oczywiście pod spodem tworzy się kopia robocza plików, które się modyfikuje - bez tego nie dałoby się pracować :) Zakładam, że w Insta może być podobnie.

Dobrze, ale tak właściwie, to po co?
Czemu odbierać ludziom wolność twórczą, którą daje git? Czemu odbierana jest lokalna historia, jaki jest zysk z cofnięcia się o blisko 20 lat w rozwoju?
Skoro nakładka niszczy bazową koncepcję jakiegoś narzędzia, to czemu po prostu nie napisać swojego narzędzia dostosowanego do potrzeb?

Na pewno radziłbym zachować otwartą głowę, bo większość wypowiadających się tutaj prezentuje tzw. fixed mindset - ja wiem najlepiej, a OP to tam pewnie zmywał w tym Instagramie i w ogóle nie wie jak działa git. Wstydźcie się :)

Więcej powodów do wstydu powinni mieć raczej ci, którzy twierdzą, że "wszyscy pracują na jednej gałęzi". Bo jakby to dosłownie interpretować, to znaczy, że cała firma ma jeden komputer z jedną instancją repozytorium. Bida w tych faangach. ;)

edytowany 1x, ostatnio: somekind
robertwadowski
robertwadowski
rzekłbym rozpacz :/
viader
  • Rejestracja:około 12 lat
  • Ostatnio:około miesiąc
  • Postów:167
0

Gerrit daje swobodę. To jest narzędzie głównie do CodeReview gdzie postawili na poprawę pojedyńczego commita, zamiast dodawanie kolejnych commitów w procesie CR kończąc na końcu dużym squashem. Można tu mieć i git flow, oraz takiego trunka.

Co do trunka, imo najlepszy system jaki istnieje, jeżeli:

  • ma się możliwość bardzo szybkiego deploymentu, z tym jest związany też szybki proces QA
  • można wypuszczać aplikację do procenta użytkowników i nie informować ich o zmianach
  • ma się możliwość back rolloutu
  • ma się zaawansowane systemy raportujące błędy
  • błąd na produkcji nie niesie poważnych konsekwencji dla firmy, bo wtedy QA nie musi byc mega dokladne i mozna testowac na % użytkowników
  • dużo łatwiej wprowadzić to w działającej aplikacji od dłuższego czasu, niż w takiej tworzonej od zera

@anonimowy z ciekawości, jak sobie radzicie z podbiciem zależności. Często jest tak, że jakaś zewnętrzna biblioteka nawala i wychodzi to dopiero na jakiś specyficznych urządzeniach. Robicie rollback wtedy i czekacie, aż naprawi owner biblioteki? A co z podbiciem Android 12 np i gdy okazuje się, że jest problem i trzeba jednak poczekać z tym, utrzymujecie feature branche na jakieś specjalne okazje (gdy was przyciśnie potrzeba?)

edytowany 5x, ostatnio: viader
Zobacz pozostałe 9 komentarzy
SL
nie do końca. Każdy release to osobny branch. Założenie jest takie, że w pewnym momencie z master HEAD robisz branch. Jak wyjdą jakieś błędy to naprawiasz jest na masterze a potem przenosisz na release branch (happy path to cherry pick). Jak mam 50 releasów to mam 50 branchy, ale poza bug fixami to nic tam się nie dzieje
viader
hmm, rozumiem, że autor tego wątku ma w pracy zupełnie odmienną strategię, bo to co mówisz nie wydaje mi się w żaden sposób jakieś nowe, ot zwyczajny development to co autor opisywał wyglądało tak, jakby tam był faktycznie 1 branch i nikt nie puszczał fixów jakimś bocznym kanałem, ze starego brancha itd
SL
wydaje mi się, że autor tego wątku za bardzo nie potrafi wytłumaczyć jak pracował. W przypadku dużej dynamiki i dobrych testów faktycznie release branch nie ma sensu. Lepiej naprawić mastera i tyle.
viader
nom, jedyny minus to podbijanie zaleznosci, bo to zawsze ryzyko i zastanawia mnie jak tam do tego podchodzili, ale pewnie reverty, to tak jakby developowac wszystko jako bugfixy produkcyjne, z odpowiednio ustawionym procesem i sytuacja moze nawet dobrze dac rade
SL
@viader: dobre pytanie, nie wiem jak w wypadku instagrama, ale firmy takie jak np. google rozwiązują problem podbijania zależności poprzez brak zależności. Jak coś jest potrzebne to jest robiony fork do monorepo a tam już wszystko jest traktowane jako biblioteka, którą trzeba utrzymywać jak każdą inną
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 15 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10053
1

@anonimowy Lokalnie też miałbym nie mieć żadnych branchy? Tylko master i origin/master? Czy widziałbyś to tak że mogę mieć wiele lokalnych branczy, ale tylko jeden remote branch?

edytowany 2x, ostatnio: Riddle
robertwadowski
robertwadowski
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Płock
  • Postów:106
0

Ja znam takie podejście, wiem jak nawet się nazywa pier***nik :D

edytowany 1x, ostatnio: robertwadowski
heyyou
  • Rejestracja:ponad 6 lat
  • Ostatnio:minuta
  • Postów:182
1

troche mnie zdziwilo, jak napisales (OP) ze konfilktow nie macie :D
ja to miewalem konfilkty miedzy dwoma branchami na ktorych tylko ja cokolwiek robiłem i się głowiłem z 15 minut :D

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 15 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10053
2
anonimowy napisał(a):

Idea polega na tym, że nie masz długich gałęzi, które na wiele dni/tygodni są tworzone równolegle.

Pozwala to uniknąć:

  • dużych mergy
  • nagłego dostarczenie całej funkonalności do mastera, która nie była testowana na serwerach produkyjnch
  • rozjazdu modułu, który byl np. modyfikowany na różne sposoby w dwóch dużych feature branach. Ale to można podpiać pod problem z mergami bardziej ogólnie

Gościu, strzeliłeś sobie w stopę.

To o czym mówisz istnieje, i nazywa się Continuous Integration z Extreme Programming. Większość ludzi osiąga to robiąc częste rebase'y swojego feature brancha na mastera, inni robiąc częste merge.

Wiadomo że każdy chce mieć mały rozjazd feature brancha z masterem, i dla małych feature'ów które można zmieścić w jednym comicie, faktycznie feature branch jest niepotrzebny, ale jak masz ilość commitow większą niż jeden to nie ominiesz feature branchy. I oczywiście nie chodzi o to żeby squashować cały feature, tylko że jeśli masz duży feature to siłą rzeczy musisz go developować chwilę osobno.

edytowany 3x, ostatnio: Riddle
Waleed Khan
  • Rejestracja:ponad 3 lata
  • Ostatnio:11 miesięcy
  • Lokalizacja:Seattle, WA, USA
  • Postów:1
6

Jestem autorem tego urządzenia git-branchless. Możesz mnie pytać szczególne pytania. Przepraszam za niedobry polski.

Polecam, żeby ktoś chcąc więcej się uczyć czytał więcej na tej stronie: trunkbaseddevelopment.com. Moim zdaniem, najważniejszy jest nie utrzymywanie długożyjących gałęzi.

A jak ktoś sam chce używać tego workflow, można używać tego urządzenia: graphite.dev . (Bardzo lubię, ale niestety jeszcze jest w beta...) Ma też tę dokumentację na stacked changes, który jest ważną częścią dania sobie radę tego workflow: docs.graphite.dev/getting-started/why-use-stacked-changes

Oczywiście, jeśli nie wykorzystasz* tego workflow, to nie używaj. Nie jest dla każdego.

Na temat konfliktów, często po prostu się nie dzieje, bo duża jest baza kodu, i większość osób nie pracuje nad tym samym rzeczą. W takim przypadku, nie pojawi się konfliktu. Jednak, deweloper nadal powinien często rebase nad master gałęzią i naprawić wtedy swoje konflikty, aby zmniejszyć ich ciężkość (wspomniano poprzednio w tym wątek jako Continuous Integration).

* znaczy "benefit from"?


Nie mowię po polsku w ojczystym języku. Jak zobaczysz coś złego, niezależnie od tego, czy chodzi o pisownię, gramatykę, czy dobór słow, skomentuj to!
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:dzień
  • Lokalizacja:Poznań
  • Postów:8759
1

Ja tak tylko dodam, że po sprawdzeniu kolegi @Waleed Khan wygląda na to, że to naprawdę on, a nie jakiś troll podszywający się pod kogoś i robiący zamieszanie ;)


FS
  • Rejestracja:ponad 3 lata
  • Ostatnio:około 3 lata
  • Postów:46
0

tylko na masterze jak robisz branche jak ci pozwole ,gdzie na allow push mozesz nie liczyc

edytowany 1x, ostatnio: FullSnack
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)