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 z indeksem w gicie który pozwalał przygotować nam pliki do umieszczenia
w commicie a także w sytuacji gdy coś poszło nie tak jak pamiętasz.
Dzięki indeksowi można było bardzo łatwo przywrócić ostatnią wersję pliku dodawaliśmy poszczególne pliki.
Dodawaliśmy katalog a także dodawaliśmy wiele plików przy użyciu wzorca w tej lekcji pokażę ci jak pliki
usuwać a właściwie jak dodawać do indeksu.
Polecenia usunięcia lub zmiany nazwy pliku sprawdźmy tutaj git status mamy tutaj czysty nasz katalog żadnych
zmian do scommitowania i jeśli przyłączy się do edytora mamy nasz witaj txt i nasze notatki i w notatkach.
Jak zauważyłeś w poprzednich lekcjach utworzyłem notatkę do usunięcia i utworzyłem notatkę o złej nazwie
i chciałbym właśnie w tym commicie poprawić te dwie rzeczy.
Chciałbym usunąć ten plik i chciałbym zmienić tutaj ten plik.
Zła nazwa na bardziej poprawną nazwę ok czyli wrócę teraz do terminalu i pierwszą rzecz którą możemy
zrobić jest polecenie git rm czyli git teamów i mógłbym np. od razu usunąć całe notatki i tutaj jeśli próbujesz
usunąć folder przy użyciu git rm to widzisz git wyrzuca błąd znaczy żeby przez przypadek nie usunął folderu muszę potwierdzić
że chcę rekurencyjnie usunąć czy chcę usunąć foldery w nich pliki w nich foldery foldery i pliki itd.
Chcę wszystkie usunąć zrobimy tutaj r.
Minus r git status i zwróć uwagę co się stało.
Mam tutaj na zielono zmianę do scommitowania czyli mam przygotowane w moim indeksie do usunięcia cztery
pliki i tak naprawdę jeśli przełączę do edytora cały folder notatki znikną.
Czyli polecenie git rm usunie pliki z twojego systemu plików naszego katalogu roboczego i przygotuje
w indeksie do usunięcia czyli przygotuje do scommitowania operację usunięcia plików nie zapisujemy tutaj
plików zapisujemy w commicie informacje ze pliki są od tego momentu usunięte z naszego repozytorium
i tak naprawdę te pliki pozostaną w historii po prostu od tego commita i następnych commitach te pliki
już nie będą widoczne w naszym projekcie.
Ale pamiętaj zawsze będzie można je przywrócić nawet w tym momencie.
Jeśli muszę cofnąć tę operację bo np. ze zbyt dużo usunąłem chciałem usunąć jeden plik a usunąłem
wszystko.
Nic nie szkodzi mogę to zresetować.
Czyli git reset moge tutaj podać jeden plik i np. notatki
notatka txt
i przywróciłem plik ale zobacz przywróciłem operację czyli tak naprawdę ten plik dalej nie istnieje.
Ja po prostu wycofałem się z aktualnego commita operacji usunięcia tego pliku plik został usunięty czyli
git rm usunął plik a później dodał operację do indeksu czyli git reset wycofał operacje z indeksu ale
nie przywrócił pliku i chcesz przywrócić plik.
No to musisz korzystać tak jak poprzednio z polecenia git checkout.
Notatki notatka txt git status i mamy tylko trzy pliki przygotowane do usunięcia a nasz plik notatka
txt został przywrócony.
Jak pamiętasz polecenie git checkout.
Pozwalało nam wydobyć ostatnią wersję z naszej historii i przywrócić nam do katalogu roboczego ok czyli
teraz przywrócę z powrotem status.
Wszystkie notatki dlatego że zbyt dużo.
Chciałem usunąć czyli git reset.
Teraz mam pliki usunięte więc git checkout notatki.
Przywróce z historii całą ostatnią zawartość tego folderu sprawdźmy w edytorze.
Wszystko się zgadza mamy z powrotem wszystkie moje notatki.
Ok.
Czyli tym razem
chciałbym usunąć tylko plik do usunięcia txt.
Jednak przed tym chciałbym się jeszcze pokazać jedną rzecz.
Jeśli w tym pliku ja wprowadzę jeszcze jakieś zmiany
git status to plik w tym momencie jest oznaczony jako zmodyfikowany.
Jeśli spróbuję plik który jest zmodyfikowany ale nie scommitowany usunąć czyli git rm jeszcze raz notatki
do usunięcia to ma ponownie błąd.
Zwróć uwagę jeśli ja zmodyfikowałem jakiś plik i nie ma go w historii a następnie chcę powiedzieć gitowi
dodaj tylko i wyłącznie do naszej historii operację usunięcia tego pliku.
No to jest to troszeczkę niebezpieczne bo jeśli w tym pliku przed jego usunięciem były jakieś istotne informacje
zostaną one stracone.
Tutaj bardzo ostrożny jest z usuwaniem rzeczy żebyś przypadkiem nie stracił jakichś zmian.
Mam w tym momencie kilka różnych możliwości mógłbym przywrócić git checkout cały plik do usunięcia do
jego poprzedniej wersji.
W ten sposób stracę tutaj tą ostatnią linię.
Mógłbym po prostu usunąć ten plik całkowicie u nas z projektu po prostu tutaj i usuń i wtedy scommitować już
usunięcie plików tak by go tu nigdy nie było jakby on się nigdy nie zmienił.
Ale jeśli mam tutaj polecenie use cashe i to robi bardzo fajną rzecz bo to scommituje tutaj nam przygotuje do scommitowania
usunięcie ale plik nam zostawi spróbujmy git
rm cached
notatki do usunięcia.
I tu zobacz plik dalej nam pozostał ale w git status plik jest.
Zobacz jednocześnie plik jest przygotowany do usunięcia i jednocześnie plik nam pozostał.
Może też taka sytuacja że chcesz np. wysłać wszystkim nowy commit gdzie plik usunąłeś bo nie jest on potrzebny
i wysyłasz wszystkim taki commit taką zmianę.
Ale jednocześnie w tym samym czasie zostawiasz sobie ten plik dlatego że pracujesz już nad nowszą wersją
której jeszcze nie możesz pokazać wszystkim.
No ale nie chciałbyś stracić tego co już robiłeś.
Więc możesz sobie robić to w ten sposób czyli możesz tylko zaplanować usunięcie a plik w tej wersji zostawić
sobie tutaj do zrobienia.
Coś jeszcze.
Oczywiście najprostszym rozwiązaniem kiedy nie zależy nam na tych plików chcemy po prostu usunąć te wszystkie
zmiany chcemy żeby historii żeby pozostała tylko poprzednia wersja a od kolejnych commitów chcemy żeby ona
się nie pojawiała w projekcie.
Po prostu muszę ją usunąć stąd do usunięcia git rm.
Notatki do usunięcia już nam nie pokazuje tego tutaj nie ma jest przygotowany status deleted.
Jeszcze raz robię git reset.
Jak widzisz git wykrywa że plik po prostu został usunięty więc teraz obojętnie mogę zrobić git
rm i go jeszcze raz usunąć mimo że już go naprawdę nie ma.
Albo mogę zrobic robić git add.
Czyli dodać do indeksu operację usunięcia czyli dodać tą operację którą wykonałem na systemie plików
w katalogu czyli usunięcie pliku zaplanować do commita dodać tą operację do przyszłego commita
czyli get add.
Notatki bo tylko jedną zmianę mam więc mogę sobie wszystkie notatki po prostu oznaczyć.
Sprawdźmy.
Mam tutaj przygotowane do usunięcia notatki txt nim scommitujemy tą operację usunięcia.
Chciałem się zająć jeszcze jedną rzeczą w folderze notatki mam tu jeszcze zła nazwa txt czyli plik którego nazwę
chciałbym zmienić i oczywiście mógłbym zrobić po prostu move.
Czyli zmienić nazwę pliku także w edytorze kliknąć prawym zmień nazwę pliku tutaj rename.
Ale git posiada bardzo fajne polecenie git move.
I to polecenie pozwala przenieść plik z jednego miejsca w inne miejsce lub po prostu przenieść go w
to samo miejsce w którym jest ale pod inną nazwą czyli zmienić nazwę.
Spróbujmy notatki.
Zła nazwa notatki dobra nazwa txt git status i zwróć uwagę w jaki sposób tutaj git oznacza taką operację
mamy to jako zmiana pliku i mam tutaj taką strzałkę która mówi który plik został przeniesiony i jest to bardzo
ważne szczególnie przy dość dużych plikach dlatego że jeśli plik powiedzmy przeniesiesz ręcznie i
zmienisz coś w tym pliku no to dla gita są to dwa osobne pliki.
I taką operacją będzie usunięciem pliku.
Zła nazwa i stworzeniem zupełnie nowego pliku.
Dobra nazwa.
Natomiast w ramach jednego commita przeniesiesz plik nie zmieniając go.
To git robi dwie bardzo ważne rzeczy.
Po pierwsze nie utworzy kopii całego tego pliku w naszej historii czyli nie zajmie więcej miejsca na
dysku tylko po prostu wskaże w naszym drzewie że po prostu ten plik teraz inaczej się nazywa.
Natomiast jego zawartość będzie cały czas przechowywał w tym samym miejscu bo zawartość się nie zmieniła.
Drugą bardzo ważną rzeczą jaką zobaczysz w przyszłych lekcjach gdy będziemy przeglądać historię i szukać zmian
szukać commitów.
Jeśli w ten sposób zacommitujesz zmiany pliku będzie można na podstawie nowej nazwy odnaleźć starą nazwę
np. jeśli powiedzmy będziemy szukać jakichś starych danych które już tam zginęły nie ma ich to taki
zapis pozwala nam będzie nam pozwalał znaleźć starą nazwę pliku i znaleźć tę wersję tego pliku.
Natomiast jeśli zmienisz nazwę pliku i zmienisz tą treść no to będą to dla gita dwa osobne pliki.
I w momencie gdy usuwaliśmy ten plik i tworzyliśmy nowy trzeba będzie wtedy ręcznie poszukać który
to był plik i jak on się wcześniej nazywał git nie zrobi tego automatycznie bo jak wspomniałem przed
chwilą będą to dla niego po prostu dwa różne pliki.
Tak więc scommitujemy nasze zmiany git commit m czyli opis tego commita i powiedzmy porządki w katalogu notatki
git status mamy czysto i git log mamy tutaj cztery commity ostatni to jest porządki w katalogu notatki
tak więc w tej lekcji dowiedziałeś się jak usuwać pliki w gicie a właściwie jak przygotowywać do scommitowania
operacji usunięcia tak żeby git zapamiętał że od tego momentu plik ma być usunięty i służy do tego polecenie
git rm po git rm mogłeś zawsze zrobić reset ale nie przywracało to plików wymagało to git checkout
aby z powrotem wybrać w historii ostatnią wersję pliku i przywrócić do katalogu roboczego.
Git rm ma też opcję cache
która pozwalała zrobić dwie rzeczy pozwalała plik przygotować do usunięcia ale jednocześnie pozwalała
jego zmienioną wersję pozostawić w naszym katalogu roboczym do dalszej pracy nad nim.
Polecenie git move natomiast pozwala oznaczyć plik jako przesunięty do innego katalogu przemieszczony lub
po prostu zmieniono jego nazwę.
Jeśli katalog jest ten sam i to polecenie move jest o tyle fajniejsze niż ręczne zmienianie przenoszenie
plików.
Dzięki niemu git po prostu zapamiętuje że ten plik w tym commicie zmienił nazwę i gdy będziemy przeglądać
historię będzie można prześledzić w jaki sposób plik zmieniał się w poszczególnych wersjach.
To tyle jeśli chodzi o pracę z indeksem.
Do zobaczenia w kolejnej lekcji.