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 pracowaliśmy na pojedynczym pliku.
Tworzyliśmy i edytowaliśmy commity dotyczące naszego pliku.
Witaj txt w tej lekcji pójdziemy o krok dalej.
Jak tutaj widzisz nie tylko zmodyfikowałem plik txt ale także outworzyłem folder notatki i utworzyłem tutaj kilka
przykładowych plików z notatkami część z nich jest pusta.
Część z nich zawiera tekst i pokażę ci jak pracować z indeksem czyli jak przygotowywać sobie pliki do
scommitowania.
Korzystając właśnie z indeksu czyli tego miejsca pośredniego pomiędzy naszym aktualnym katalogiem roboczym
a naszą historią zawsze pracę zaczynam od git status.
Pozwala nam to się rozeznać w sytuacji git jasno informuje nas które pliki są niezmienione które pliki zostały
dodane i nie są śledzone oraz które pliki się zmieniły i tutaj dokładnie widzisz że plik witaj txt
jest zmiany nieprzygotowane do scommitowania.
Czyli jest to plik który nie jest nowy on istniał wcześniej git go obserwuje.
No i właśnie git wykrył że coś się w nim zmieniło.
Możemy więc zrobić dwie rzeczy możemy albo dodać ten plik do scommitowania albo możemy przywrócić poprzednią
wersję naszego pliku i cofnąć te zmiany.
Tutaj poniżej mamy informacje o nowych plikach które są jeszcze nie śledzone przez gita tutaj tych plików
nie możemy cofnąć do poprzedniej wersji bo poprzednia wersja po prostu nie istnieje.
Są to zupełnie nowe pliki i możemy jedynie je albo usunąć i stracić wszystkie zmiany albo dodać je do gita.
Więc zróbmy tak ja te wszystkie notatki ja dodam do gita po prostu git add i to na folder notatki
czyli jeszcze git status.
Jak widzisz tutaj wszystkie pliki w środku zostały dodane zwróć uwagę że jeśli mamy w nazwie pliku odstępy
a mamy specjalne tutaj takie litery jak np. polskie znaki tutaj to git zapisuje je w tej postaci znowu żeby
te pliki można było łatwo wysłać na serwer i pobrać je bez problemu na różnych systemach operacyjnych git
zapisuje je w takim właśnie formacie jest troszkę mniej czytelny ale dzięki temu będzie można łatwo takie
pliki właśnie wysłać komuś i będzie mógł to pobrać na zupełnie innym systemie operacyjnym niż my.
OK zostawmy na razie tutaj te pliki.
Bardzo ciekawą rzeczą jest że jeśli te pliki są w indeksie one tu są bezpieczne.
Co to znaczy?
To znaczy że ja teraz np. mogę przejść do edytora mogę któryś plik np. do usunięcia go usunąć zupełnie
z naszego edytora git status i zobacz co się stało.
Tutaj mamy że plik jest usunięty ale jego kopia cały czas jest bezpieczna w indeksie.
Czyli już samo dodanie git add sprawia że git nasze pliki trzyma na razie jeszcze nie trzyma ich w historii
bo nie daliśmy mu commitu nie daliśmy nazwy ale one są w tym bezpiecznym miejscu są indeksie i ja mogę przywrócić
taki plik z powrotem.
Polecenie git checkout służy generalnie do przywracania do ustawiania innych wersji plików do naszego
katalogu roboczego czyli git checkout.
Pozwala jakby wybrać z gita z różnych jego miejsc z historii lub z indeksu wybrać pliki i umieścić
je z powrotem w naszym katalogu roboczym.
Czyli jeśli ja usunąłem plik notatki do usunięcia txt to mogę go przywrócić.
I tak samo jak git add.
Nie muszę tutaj pisać pełnej nazwy plików mogę robić notatki i użyję powiedzmy do gwiazdka czyli dowolny
ciąg znaków kropka txt.
Czyli chciałbym te wszystkie pliki z tych wszystkich plików które mam tutaj zapamiętane przywrócić z
powrotem wszystkie pliki zaczynające się na litery do kończące się na kropka txt i zawierające w katalogu
notatki.
Czyli muszę tutaj podać wzorzec i wiele różnych plików które pasują do tego wzorca przywrócić.
Sprawdźmy teraz git może wyczyszczę git status i jak widzisz wrócił z powrotem nasz plik przejdę teraz
do edytora otworze do usunięcia i nasz plik jest z powrotem.
Czyli pamiętaj jeśli pracujesz nad jakimiś plikami i przygotowujesz commit twój plik jest już praktycznie
gotowy jest w takiej formie która ci się podoba.
Chcesz ją zapisać zapamiętać nie chcesz jej stracić to nie musisz od razu commitować.
Może po prostu taki plik dodać i możesz pracować dalej.
Jeśli popełnisz jakiś błąd coś stracisz coś usuniesz przypadkiem nie ma problemu.
Jeśli plik znajduje się w indeksie możesz poleceniem checkout go przywrócić z powrotem do miejsca roboczego.
I teraz jeśli np. ma plik do usunięcia napiszę jakieś nieistotne zmiany zapisze go to znowu on tutaj jest
w poprzedniej wersji ale jednocześnie jest tutaj w naszym katalogu i tutaj widzisz pokazuje ten plik
dwa razy dlatego że on się różni.
Mamy tutaj jego dwie wersje.
Teraz mogę znowu skorzystać z git checkout.
No i pozbyć się tych moich zmian i przywrócić oryginalny plik czyli przywrócić pusty plik.
Ja natomiast chciałbym te moje nieistotne zmiany na razie zachować.
Czyli zrobię git add.
I dodam podobnie notatki nie chcę przypisywać tutaj całej nazwy z tymi znakami specjalnymi więc robię
ponownie do gwiazdka txt i git status wyczyszczę jeszcze jeszcze raz status.
Jak widzisz mamy teraz najnowszą wersję tych plików zapamiętaną.
Czyli znowu jeśli go usunę mogę go przywrócić git status jest on usunięty.
Mogę go znowu przywrócić sobie czyli checkout.
Zwróć uwagę jeśli zrobię add to już całkowicie stracę zmiany bo mam tylko jedną wersję pamiętaj w tym
indeksie jest tylko jedna wersja ostatnia ale mogę z powrotem przywrócić i mam z powrotem moje nieistotne
zmiany.
Ok.
Status czyli jak widzisz nasze wszystkie notatki są tutaj przygotowane do scommitowania.
Są na zielono tutaj changes to be commited.
Natomiast witaj txt.
Tutaj leży sobie z boku jako nieprzygotowane do scommitowania.
I to jest bardzo fajna rzecz która też wyróżnia gita że nie muszę scommitować wszystkiego jednocześnie
ja mogę moją pracę scommitować w kilku różnych etapach mogę po kilka plików wybrać przygotować tutaj
umieścić je w indeksie scommitować następne pliki przygotować scommitować i w ten sposób mogę mieć historię
bardzo czystych commitów w jednym commicie są tylko pliki które faktycznie dotyczą.
I każdy commit jest dokładnie opisany co zrobiłem nim jednak to zrobimy.
Chciałbym ci pokazać jeszcze jedno polecenie.
Powiedzmy że chciałbym najpierw scommitować witaj a notatki chciałbym scommitować dopiero potem.
Nie ma problemu ja mogę w tej sytuacji wycofać to co umieściłem tutaj w indeksie czyli git reset head
i podać tutaj nazwy plików podam notatki.
Gdybym chciał wszystko wyczyścić po prostu podałbym git reset.
Chcę wyczyścić cały folder notatki więc podam to tak.
Czy reset git status jak widzisz z powrotem.
Notatki są nieprzygotowane do scommitowania i indeks witaj txt też jest nieprzygotowany czyli w indeksie nie
mamy teraz żadnych zmian.
Przywróciłem wszystko co było.
Cofnąłem wszystkie zmiany z indeksu.
Tutaj mam z powrotem moje niezmienione pliki przejdę do edytora i mój plik do usunięcia jak widzisz tutaj jest w
takim formacie w takiej formie jak był przed chwilą ale w tym momencie nic nie trafi naszego commita więc możemy
zrobić odwrotnie.
Mogę tym razem zrobić git
add
witaj i mogę w ten sposób umieścić plik witaj txt do scommitowania w indeksie wykonać commit witaj
w następnym kroku znowu same notatki w indeksie i scommitować notatki jako osobny commit pokażę
jeszcze jedną przydatną rzecz jeśli chcesz scommitować wszystkie pliki które już masz zapamiętane pliki
które już commitowałeś wcześniej to jest do tego fajny skrót mogę zrobić git commit.
Zwrócił uwagę że żadne pliki nie są przygotowane do scommitowania opcją a lub opcją all.
W skrócie tutaj a mogę wszystkie pliki które są nieprzygotowane do scommitowania automatycznie dodać do indeksu
i scommitować.
Dodatkowo opcja m pozwala dodać wiadomość od razu tutaj bez otwierania edytora vim.
Czyli mogę np. commitując plik witaj txt bo tylko on jest tutaj w tej sekcji plików zmodyfikowanych.
Zobaczmy tu jest witaj txt Witaj świecie czyli zmieniono witaj txt.
Witaj świecie.
Te zmiany opisuje troszeczkę zbyt dokładnie jeśli by był to większy plik.
No to nie podam całej jego treści ale chodzi o to żebyś później łatwo mógł znaleźć mogła znaleźć informację
co właściwie kiedy zostało zmienione w którym pliku.
Ok.
Czyli git commit all message zmieniono witaj i wszystko zrobię.
Teraz jednym poleceniem sprawdźmy
mamy tylko notatki i git log.
Mamy tutaj witaj txt.
Jak widzisz tylko jeden plik został zmieniony i jedno dodane jedno usunięte.
Oznacza to po prostu że jedna linia została zmieniona.
Git śledził zmiany nie pojedynczymi literami tylko tutaj całymi wierszami.
Ok.
Czyli udało się scommitować witaj txt.
Pozostały nam notatki więc mogę zrobić git add.
Notatki.
Status jest na zielono wszystkie są wszystkie pliki są przygotowane do scommitowania więc git commit
i już bez otwierania edytora tylko message podam od razu tutaj.
Dodano notatki może dodano folder notatki folder notatki.
Ok.
I tutaj widzisz mamy cztery pliki zmienione ale tylko dwie linie dodane a wynika to z tego że po prostu tutaj
dwa pliki są puste a dwa pliki mają po jednej linii.
Sprawdźmy git log i mamy trzy commity nasz commit z poprzednich lekcji nasz commit witaj który daliśmy
pierwszy i tutaj nasz cały folder notatki czyli podsumowując jeśli masz jakieś zmiany w katalogu twoim roboczym
git status pokaże Ci jakie pliki są zmienione jakie pliki są nowe no a pliki który on nie pokaże to znaczy
że one się nie zmieniły że są w takiej samej wersji jak były poprzednio i tutaj git nie ma nic jakby do
zrobienia jeśli chcesz pliki scommitować musisz najpierw skorzystać z polecenia git add żeby umieścić
tutaj odpowiednie pliki w tak zwanym indeksie czyli w specjalnym miejscu gdzie git przechowuje kopie twoich
plików przygotowane do scommitowania.
I teraz bardzo fajną rzeczą jest właśnie to że indeks jest kopią czyli jeśli przypadkiem lub specjalnie
wprowadzisz zmiany do plików które już dodałeś do indeksu to zawsze możesz przywrócić te pliki i usunąć
twoje lokalne zmiany poleceniem git checkout.
I tutaj nazwa pliku lub wzorzec.
Możesz te zapamiętane przygotowane do scommitowania pliki ich wersje zapamiętaną z powrotem przywrócić
do twojego katalogu roboczego na przykład popełnisz błąd.
Coś skasujesz.
Spróbujesz podać jakąś zmianę okaże się że to jednak był błąd.
Nim jeszcze scommitowałeś.
Wszystkie pliki dodane możesz w każdej chwili przywrócić.
Dlatego nawet jeśli nie commitujesz to warto każdy taki moment gdy Twój plik jest we właściwym formacie.
Nie chcesz stracić tych zmian wykonać polecenie git.
Add.
I możesz w każdej chwili git checkout.
Przywrócić sobie ten plik poleceniem natomiast git reset możesz usunąć rzeczy z indeksu np. jeśli dodałeś
do indeksu zbyt dużo plików dodałeś przypadkiem pliki których jednak nie chcesz scommitować to możesz
wpisać git reset.
I tutaj wpisać jeszcze hard i podać tutaj jakie pliki chcesz usunąć po prostu z indeksu.
I wtedy nie skasujesz sobie lokalnych zmian skasujesz je te pliki tylko z indeksu nie będziesz mógł.
Po wykonaniu polecenia reset przywrócić już tych plików bo nie będzie ich w indeksie ale właśnie możesz
dzięki temu scommitować tylko część plików.
Tak więc jak widzisz indeks jest bardzo fajnym miejscem jest takim miejscem które możesz przygotować
twoje pliki do scommitowania a jednocześnie jest takim miejscem gdzie możesz tymczasowo zapisać w wersji
pliku bez jeszcze commitowania czyli bez podawania message bez zapisywania autora daty.
Możesz po prostu na chwilkę zrobić sobie kopię.
To na tyle jeśli chodzi o przygotowywanie i edycję commitów w kolejnych lekcjach zobaczysz jak w indeksie
możesz także pracować z plikami których chcesz usunąć lub plikami których chcesz zmienić nazwę lub przenieść
je do innego katalogu a także poznasz wiele przydatnych narzędzi które pomogą ci usprawnią jeszcze bardziej
twoją pracę z przygotowywaniem commita lub określaniem informacji.
Co się zmieniło w których plikach i które pliki chcesz faktycznie scommitować które pliki chcesz przywrócić
do poprzedniej wersji a które możesz spokojnie usunąć.
Ale to już w kolejnych lekcjach.
Do zobaczenia.