Git i kontrola wersji — tak programiści współpracują nad kodem
Commity, gałęzie i dlaczego nigdy nie tracimy wcześniejszej wersji
Wstęp
Jeśli kilka osób pisze kod w tym samym projekcie bez wspólnego systemu, szybko powstaje chaos: kto ma najnowszą wersję, co zostało zmienione i kiedy, i jak znaleźć wersję, która działała, jeśli nowa zmiana wprowadzi błąd? Kontrola wersji rozwiązuje dokładnie ten problem, zachowując całą historię zmian, dzięki czemu żadna praca naprawdę nie zostaje stracona.
Czym jest kontrola wersji?
Git to rozproszony system kontroli wersji, co oznacza, że każda kopia programisty zawiera całą historię projektu, a nie tylko najnowsze pliki. Umożliwia to pracę i przeglądanie historii, nawet bez połączenia z serwerem centralnym, i czyni system odpornym — jeśli utraci się serwer centralny, historia projektu nadal istnieje u wszystkich, którzy ją pobrali.
Pojęcia podstawowe w Git
- 01Zatwierdzenie: zapisany obraz projektu w danym momencie z opisową wiadomością o tym, co zostało zmienione
- 02Branch (gałąź): niezależna linia rozwoju, w której można pracować bez wpływu na główną gałąź
- 03Merge: scalenie zmian dwóch gałęzi ponownie
- 04Repozytorium: sam projekt ze całą jego historią
- 05Remote: centralna, podzielona wersja repozytorium, na przykład hostowana na usłudze, z której wszyscy mogą pobierać i wysyłać
Branże i współpraca
W praktyce rzadko pracujesz bezpośrednio na głównej gałęzi. Zamiast tego tworzysz nową gałąź dla konkretnego zadania lub poprawy, pracujesz tam do końca i prosisz o przejrzenie zmian i scalenie ich z główną gałęzią — to się nazywa pull request lub merge request. Daje to kolegom możliwość przeczytania i skomentowania, zanim kod stanie się częścią tego, na czym wszyscy inni budują dalej — formę kontroli jakości, która przypomina tę, jaką nauczyciel zawodu dałby zadaniu przed jego zatwierdzeniem.
Konflikty
Jeśli dwie osoby zmieniły tę samą linię w tym samym pliku na własnej gałęzi, Git nie może automatycznie zdecydować, która zmiana powinna wygrać - to się nazywa konflikt scalania. System oznacza, gdzie dwie wersje się nie zgadzają, a osoba musi ręcznie wybrać, jak je połączyć. Częste, mniejsze commity i dobra komunikacja w zespole zmniejszają częstość tego zdarzenia.
“Git pamięta wszystko, co go prosisz zapamiętać. Chodzi nie o unikanie błędów, ale o możliwość powrotu do stanu przed błędem.”
— Reguła praktyczna ze rozwoju oprogramowania