Dlaczego warto tworzyć niewielkie commity?
Kilka powodów, dlaczego warto tworzyć niewielkie commity:
- Tworzy się je szybciej.
- Czyta się je szybciej.
- Poprawia się je szybciej.
- Łatwiej przechodzą rewizję kodu.
- Szybciej lądują w trunku/masterze.
- Jeśli duży commit utknął w rewizji kodu, zmergowanie go potem do mastera to koszmar.
- Łatwiej napisać do nich jasny komentarz.
- Łatwiej skończyć małego commita, oderwać się od pracy i pójść na kawę albo zakupy przedświąteczne.
- Nie trzeba nikomu mówić „poczekaj do poniedziałku, skończę commit i wyślę”.
- Jeżeli duży commit wprowadza coś bez sensu, zostaje zatrzymany. Jeśli zamiast niego są 3 małe commity, zostaje zatrzymany (w najlepszym wypadku) tylko jeden.
Uwaga: Łatwo się nabrać, że punkty 1-3 dla dwóch commitów i jednego dwa razy większego commita zajmą tyle samo czasu. Nie jest to prawda.
W przypadku dwóch commitów czas wyniesie mniej więcej sumę czasów wynikających z skomplikowania commitów. Jeśli te dwa commity zostaną połączone w jeden, czas wyniesie w przybliżeniu maximum ze skomplikowania razy dwa. Czyli dla commitów „o skomplikowaniu” 2 i 3, odpowiednio 5 i 6.
PS. Wszystkie powyżej opisane problemy wystąpiły w moim zespole programistycznym w ciągu ostatniego miesiąca (-:
Mógłbyś to rozszerzyć o „Dlaczego warto nauczyć się pracować progresywnie” tak aby każdy commit/etap pracy stanowił coś co da się pokazać klientowi/współpracownikom z zarysem kierunku w którym idziesz. Na początku pracy w zawodzie wiele osób ma z tym problem.
Chyba 4 i 6, skoro x2. ;] Popieram tworzenie małych commitów, chociaż bardziej przemawia do mnie wrzucanie całościowych rozwiązań, np. „dodawanie rekordu”, albo „widok edycji treści”. Wszystko zależy od projektu i poziomu skomplikowania takiego skrawka – jeśli da się wydzielić z czegoś stanowiącego całość mniejsze części dalej będące oddzielnymi bytami, to powinniśmy je właśnie po kolei wrzucać do repozytorium.
Kiedyś próbowałem „na siłę” wdrożyć się w reguły, które opisywałeś – problem polegał na tym, że małe commity == częste commity, a mnie to bardzo istotnie rozpraszało. Bardzo często mam taką „wenę twórczą”, gdzie masa naprawdę dobrego kodu powstaje z palca, a o samym repozytorium przypominam sobie dopiero, jak się nad czymś zatrzymam na dłużej.
Chyba 4 i 6, skoro x2. ;] Popieram tworzenie małych commitów, chociaż bardziej przemawia do mnie wrzucanie całościowych rozwiązań, np. „dodawanie rekordu”, albo „widok edycji treści”. Wszystko zależy od projektu i poziomu skomplikowania takiego skrawka – jeśli da się wydzielić z czegoś stanowiącego całość mniejsze części dalej będące oddzielnymi bytami, to powinniśmy je właśnie po kolei wrzucać do repozytorium.
+1
+1
Jeżeli chodzi o małe commity to TDD na pewno pomaga. Poza tym jeżeli ktoś używa gita, warto spojrzeć na http://nvie.com/posts/a-successful-git-branching-model/. Małe commity doskonale grają z tym, co pokazali w tym modelu branchowania.