System Kontroli Wersji
8 godz. 23 min · Git · Full-stack i Programowanie
Mateusz KuleszaSenior Software Developer, Konsultant, TrenerInne systemy wersjonowania wymagają konfiguracji specjalnych serwerów - a z GIT wystarczy do tego twój komputer. GIT pozwoli Ci zapisywać kolejne wersje twojej pracy lub eksperymentować z różnymi zmianami. Jeśli chcesz tworzyć kopie zapasowe - w kursie zobaczysz jak tworzyć klony twojego projektu oraz jak wysyłać i pobierać aktualne zmiany pomiędzy klonami.Pierwsza sekcja pozwoli Ci zyskać pewność w samodzielnej pracy z GITem nim podejmiesz się pracy w zespole. Dowiesz się jak przygotować zestaw zmian, ignorować pliki tymczasowe, jak tworzyć migawki z opisami zmian, a następnie przeglądać i porównywać zmiany dokonane nawet miesiące temu. W kolejnej części kursu dowiesz się jak wycofywać zmiany, przywracać wcześniejsze wersje i edytować historię zmian. Zobaczysz, że w GIT “nic nie ginie”. Pokażę Ci jak możesz odzyskać pozornie utracone zmiany oraz jak naprawić historię zmian łącząc, dzieląc, a nawet zmieniając kolejność dokonanych wcześniej zmian.
Jesteś w trakcie pracy nad ważnym projektem, i nagle musisz oderwać się od pracy, by wykonać jedną, szybką poprawkę? W GIT możesz błyskawicznie przełączyć się na inną wersje projektu, lub po prostu “odłożyć na później” pliki nad którymi pracujesz i wrócić do nich kiedy tylko tego potrzebujesz. W tej części kursu zobaczysz jak pracować na gałęziach, dodawać etykiety oraz przełączać różne wersje plików. Dowiesz się jak porównywać oraz eksperymentować z plikami bez ryzyka utraty danych. Co najważniejsze - nauczysz się łączyć i dzielić wiele różnych wersji twojej pracy. Zobaczysz, jak praca na gałęziach nie tylko zwiększy Twoją swobodę i elastyczność w codziennej pracy, ale również jak gałęzie pozwalają wielu osobom na równoległą pracę na tych samych plikach bez martwienia się o utratę danych lub niespójne wersje.
W kursie dowiesz się nie tylko jak zapamiętywać zmiany, ale także jak je opisywać i oznaczać, tak, by nawet miesiące później móc łatwo odnaleźć odpowiednią wersję pliku, lub by dowiedzieć się kiedy, kto i dlaczego zmieniał dany plik. Zobaczysz jak dobre praktyki w opisywaniu zmian wspomagają pracę grupową. Dowiesz się jak pobrać lub wysłać zestaw zmian na serwer oraz jak połączyć zmiany swoje, lub zmiany otrzymane od współpracownika. Dodatkowo, zobaczysz jak bezpiecznie rozwiązać problem konfllktujących zmian w plikach lub jak przenieść zmiany z wersji do wersji. W kursie dowiesz się także jak w bardzo prosty sposób korzystać z pozornie najtrudniejszej funkcji GITa, jaką jest polecenie “rebase”. Zobaczysz jak usprawni się Twoja praca, gdy będziesz mógł w jednym kroku zbudować historię zmian. Jeśli źle zapisałeś zmiany, nie podoba Ci się historia zmian, lub po prostu chciałbyś łatwo uniknąć konfliktów - git rebase będzie Twoim nowym ulubionym narzędziem.
…zmieniło ten sam plik, trzeba jakoś te zmiany połączyć. Zobaczysz jak GIT pozwala wysłać zestaw zmian na serwer, pobrać zmiany innych osób i automatycznie dołączyć te zmiany w odpowiednich miejscach. Co jednak jeśli dwie osoby zmienią tę samą linię w pliku? W kursie dowiesz się nie tylko jakie są różne sposoby i strategie łączenia zmian, ale także jak dzięki historii będziesz wiedział dlaczego zmiana w pliku została wprowadzona. Dzięki narzędziu rebase będziesz mógł zaaplikować wszystkie zmiany w odpowiedniej kolejności i w odpowiednim miejscu.
W kursie poznasz także usługę GitHub. GitHub to nie tylko usługa udostępniająca repozytoria dla GIT - umożliwia również tzw. społecznościowe podejście do tworzenia… I to nie tylko kodu. Zobaczysz, że dzięki GitHub praca nad kodem aplikacji czy nową książką może odbywać się zespołowo. Pokażemy Ci jak publikować swoje zmiany oraz jak zgłaszać je innym do przejrzenia i połączenia z ich wersją. Poznasz także sposoby planowania pracy, przydzielania zadań i zarządzania postępem ich wykonania - wszystko na twoim koncie na portalu GitHub. Oprócz poleceń i funkcji GIT w tym kursie pokażemy Ci również, na prostych, praktycznych przykładach, typowe techniki i praktyki pracy z GIT. Podczas kursu symulujemy zespół budujący prostą stronę internetową. Co ważne, nie musisz znać HTML by skorzystać z tej części kursu! Zobaczysz jak wygląda praca z perspektywy jednej osoby, co zrobić gdy musisz przerwać pracę i przełączyć się na inne zadanie oraz jak przygotować Twoją pracę do podzielenia się nią z zespołem. Pokażemy kilka przykładów organizacji pracy. Zobaczysz prace z małym, centralnym repozytorium, a także modele pracy rozproszonej, z której korzystają duże projekty typu open-source. GIT to branżowy standard, który obowiązuje praktycznie we wszystkich firmach zajmujących się tworzeniem aplikacji lub stron internetowych. Sprawia to, że wiedza, którą zdobędziesz po przerobieniu tego kursu, bezpośrednio przełoży się na efektywność Twojej pracy oraz projekty, które tworzysz.
Kurs przygotowany został z myślą o wszystkich, którzy chcą nauczyć się najbardziej popularnego i elastycznego systemu kontroli wersji i wykorzystać go do efektywnej pracy w zespole, jak i na potrzeby indywidualnych projektów. Jest również przeznaczony dla każdego, kto pracuje z kodem źródłowym i chciałby nie tylko tego, by jego zmiany były bezpieczne, ale by jednocześnie mieć swobodę pracy na kilku równoległych wersjach kodu oraz móc swobodnie eksperymentować nie bojąc się o utratę danych. Jeśli chciałbyś dowiedzieć się jak sprawnie korzystać z Githuba oraz zrozumieć, czemu ten system jest tak chętnie stosowany przez programistów na całym świecie - to najlepsza metoda!
W poprzednich lekcjach dowiedziałeś się jak tworzyć nowe gałęzie jak przeglądać je zmieniać ich nazwę
usuwać generalnie podstawy pracy z gałęziami.
W tej lekcji chciałbym ci pokazać jedną jeszcze bardzo przydatną funkcjonalność mianowicie detached head czyli
gałąź odciętą lub gałąź tymczasową.
Jeśli pamiętasz poleceniem git branch mogłem utworzyć nową gałąź i takie polecenie tworzyło nową gałąź
z miejsca w którym teraz jestem czyli z head.
Ja w tym momencie jestem na branchu nowy nagłówek.
Początek tego brancha znajduje się na commicie 9C6 czyli zmieniono nagłówek commit na który teraz wskazuje
na ten sam dokładnie commit będzie wskazywała moja nowa gałąź chyba że podam tu inny commit np. ten podam
jako początek tej mojej nowej gałęzi czyli widzisz rozgałęziam się nie na samym końcu na najnowszym commicie
tylko mogę także mój kod rozgałęzić na jakimś wcześniejszym punkcie ale dodatkowo tutaj nie muszę od
razu tworzyć nowego brancha mogę zrobić to inaczej mogę poleceniem git checkout w ten sposób zamiast
przełączać się na jakąś istniejącą gałąź na jakiś istniejący branch.
Ja mogę także tutaj wybrać po prostu commit i jeśli przyłączę się na commit to zwróć uwagę że mam
tu informacje że jestem w trybie detached head czyli nasz wskaźnik head head wskazujący na najnowszy na bieżący
commit na którym jesteśmy wskazuje na commit ale nie wskazuje na żaden inny branch na żadną inną gałąź.
Co to oznacza.
To znaczy że mogę spokojnie sobie pracować będę mógł zrobić zmiany dodawać usuwać nawet nawet scommitować.
Ale uwaga te wszystkie zmiany zostają utracone.
Jeśli nie przypiszę tego mojego heada aktualnego tego punktu w którym jestem nie zapisze na jakimś innej gałęzi
nie stworzę brancha nie zrobię nic tutaj nie przypiszę referencji żeby zapamiętać ten commit powrócę do jakiegoś
innego brancha do mastera bo nowy nagłówek to te zmiany utracone i to jest bardzo przydatne jeśli
właśnie to i tak jak napisane jest chcesz stworzyć jakieś eksperymentalne zmiany możesz dodawać commity zmieniać
itd itd.
Ale bardzo ważne jest że jeśli wprowadzę takie zmiany muszę pamiętać o tym żeby zrobić git checkout
minus b i podać nazwę brancha.
Tak jak w poprzedniej lekcji poleceniem git checkout minus branch przełączałem się na nowy branch ale pozostając
na tym commicie na którym jestem tak samo jak w tym momencie zobacz że jestem na commicie który nie jest
przypięty w tym momencie jako początek żadnej gałęzi i to polecenie git checkout b ponownie tak jak tu wcześniej
utworzył nowy branch z wybranego z bieżącego comimta na którym jestem i właśnie na tym odpiętym odpiętej gałęzi
jestem więc nowa gałąź po prostu zastąpi tą i zapamiętamy tutaj to miejsce.
Czyli ja jestem teraz na 34 dodano logo git mogę stworzyć branch przed stylami.
Tylko uwaga.
Zobacz taka nazwa sugeruje że jest to punkt w czasie a punkty w czasie lepiej etykietować.
Ja tu tylko zrobię to dla ćwiczenia i w tym momencie jak widzisz jestem na krawędzi przed stylami
i ta gałąź przedstawia mi jak widzisz wskazuje na zupełnie inny commit niż pozostałe gałęzie czyli
możesz wybrać sobie dowolny punkt we wcześniejszej historii i w każdej chwili po prostu stworzyć osobną
wersję stworzyć gałąź na której możesz od razu zacząć pracować i dopiero gdy chcesz faktycznie zapamiętać
gdzieś te zmiany to znaczy żeby te commity nie zginęły.
Wystarczy że stworzysz nowy branch poleceniem git checkout minus b i nazwa brancha i mamy wtedy jakąś referencje
do tego ostatniego commita najnowszego którego dodaliśmy.
Jeśli nie stworzymy takiej referencji i przełączysz na inny branch to oczywiście mógłbym odszukać te branche które tu
zostawiłem korzystając z polecenia git reflog.
Jak pamiętasz tylko to bardzo niewygodne i ryzykujemy że te commity gdzieś zaginą.
Jeśli przypiszesz konkretną etykietę lub konkretną gałąź z jakąś nazwą no to zawsze bym mógł do niej wrócić
ale to już git będzie pilnował trzymał za nas te referencje.
To tyle jeśli chodzi o detached head jak widzisz jest to bardzo przydatna funkcjonalność która pozwala szybko przełączyć
się na jakiś inny fragment naszej aplikacji jakąś wcześniejszą wersję.
I zacząć jakąś pracę jakieś eksperymenty nie ryzykując że wprowadzimy sobie bałagan na
naszym naszej aktualnej gałęzi w kolejnych lekcjach pójdziemy dalej w pracy z gałęziami z branchami będziemy
zajmować się właśnie pracą na kilku gałęziach na przenoszeniu pracy pomiędzy różnymi gałęziami itd.
Ale to już w kolejnych lekcjach.
Do zobaczenia.