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!
We wcześniejszych sekcjach tego kursu pracowaliśmy lokalnie czyli wszystkie zmiany wszystkie operacje
wykonywaliśmy na plikach który znajdował się wyłącznie na naszym komputerze.
Nawet gdy wykonywaliśmy pracę równoległą gdy na pracowaliśmy na kilku wersjach naszej strony i przełączaliśmy się pomiędzy
wersjami łączyliśmy.
Dzieliliśmy różne historie to wszystko odbywało się na naszym komputerze w ramach jednego repozytorium.
I tutaj nasza pierwsza strona jeśli podejrzymy sobie listę plików.
W ten sposób to jak widzisz oprócz naszych plików które stworzyliśmy mamy jeszcze katalog kropka git w którym
zawierają się wszystkie informacje na temat repozytorium razem git oraz tutaj nasz cały katalog roboczy
tworzą repozytorium właśnie zbiór zmian oraz plików oraz wszystkich informacji o naszym projekcie.
I teraz takie całe repozytorium może być współdzielone takie repozytorium możemy udostępnić bo ktoś je sobie
skopiował.
Inaczej w terminologii gita będzie to sklonowanie repozytorium.
I właśnie w tej lekcji o poleceniu git klon które pozwoli nam na różne sposoby stworzyć kopię lub takie
klony repozytorium dzięki czemu np. kilka osób będzie mogło równolegle pracować każdy na swoim komputerze
na osobnej wersji repozytorium a następnie w kolejnych lekcjach pokażę ci jak łączyć pobierać wysyłać
zmiany.
Ale tym razem już nie w ramach jednego repozytorium nie w ramach jednego komputera ale pracując zespołowo
czy to po sieci lokalnej czy to po sieci Internet.
I teraz najprostszym sposobem wykorzystania polecenia git clone będzie klonowanie lokalne czyli tylko
na naszym komputerze nasze istniejące repozytorium znajduje się w katalogu pierwsza strona natomiast żeby je sklonować
przejdę poziom wyżej i powiedzmy że ten klon naszej pierwszej strony będzie się nazywał moja strona
i teraz z poleceniem git klon stworzymy takiego klona.
Pierwszy argument dla tego polecenia to właśnie ścieżka do naszego repozytorium czyli pierwsza pierwsza
strona jako drugi argument tutaj podajemy nazwę katalogu w którym właśnie git clone ma utworzyć tego
naszego klona czyli będzie to moja strona.
Mam tutaj informację o klonie git clone i done czyli wszystko się udało.
Przejdźmy do tej naszej mojej strony naszej mojej.
Zobaczmy teraz git ls.
I tu jak widzisz są normalnie wszystkie nasze pliki katalogi z katalogu roboczego.
Jeśli zrobię znowu ls all to mamy także katalog kropka git który zawiera wszystkie informacje.
I co więcej jak zrobię git status to zobaczysz jest to w pełni sprawne repozytorium gita.
A jeśli sprawdzimy git log no to jak widzisz jest cała nasza historia dokładnie wszystko to samo co zrobiliśmy te same
commity z tymi samymi id.
Praktycznie jest to kopia.
Czyli mógłbyś mogłabyś pomyśleć że ok polecenie git clone po prostu kopiuje katalog i faktycznie kopiuje
katalog ale to nie wszystko.
Nie jest to git copy.
Jest to git clone dlatego że git clone robi jeszcze jedną bardzo ważną rzecz.
Wróćmy na chwilę do poprzedniego katalogu naszego oryginalnego repozytorium czyli do pierwsza strona.
Wpiszę polecenie git config list i zobaczymy wszystkie opcje konfiguracjyjne.
Jak widzisz mamy różne tutaj opcje gita i na końcu to co konfigurowaliśmy czyli mam opcję username Mateusz
Kulesza i mam eduweb git gmail czyli adres który konfigurowaliśmy aby tutaj nasze wszystkie commity były prawidłowo
podpisane i teraz przejdziemy znowu katalog wyżej.
Przejdę do mojej strony i tutaj zrobię to samo polecenie czyli git config list.
I zwróć uwagę na różnice.
Mamy też wszystkie opcje konfiguracyjne działania gita.
A zwróć uwagę że nie ma tu informacji o autorze za to pojawiła nam się tu informacja remote origin i branch
master mode.
Taka różnica w konfiguracji wynika z tego że każde sklonowanie repozytorium docelowo służy temu aby nowa
osoba mogła pracować na tych samych plikach mieć tą samą historię.
Ale żeby wszystkie teraz zmiany która będzie tworzyła żeby podpisywała już swoim imieniem nazwiskiem swoim
emailem a dodatkowo aby te zmiany które stworzy mogła z powrotem wysłać wypchnąć lub zintegrować z
oryginalnym repozytorium.
I po pierwsze tutaj będziemy musieli dodać jeszcze raz name i jeszcze raz będziemy musieli podać email żeby
móc podpisywać commity stworzone w tym repozytorium ale dodatkowo dzięki tutaj wskazaniu remote origin url
nowe sklonowane repozytorium pamięta w którym miejscu znajduje się nasze oryginalne repozytorium dzięki czemu jak
zobaczysz w przyszłych lekcjach będziemy mogli wszystkie zmiany wprowadzone w tym repozytorium wysyłać
do oryginalnego repozytorium a także wszystkie zmiany które się pojawią w normalnym repozytorium będziemy mogli pobierać tutaj.
Jak widzisz mamy już zaczątki współpracy kilka osób może pracować na plikach.
Tu akurat mieliśmy wszystkie w jednym komputerze ale zwróć uwagę że nic nie stoi na przeszkodzie
aby takie właśnie nasze repozytorium główne znajdowało się np. na serwerze sieciowym czy to po sieci Windows
czy to np. po sieci ssh czy jakimś innym serwerze linuxowym do którego mamy dostęp i w ten sposób tutaj.
Jeśli to repozytorium sklonowane ma prawidłowo ustalony adres URL oraz prawidłowo ustawione fetch czy informację
z jakiej gałęzi na tym oryginalnym serwerze pobierać informacje no to mamy dwustronną komunikację.
I te oba repozytorium będą mogły wymieniać się commitami wymieniać się gałęziami oraz innymi informacjami
spróbujemy przetestować to w praktyce.
Ja wrócę z powrotem do naszego głównego repozytorium czyli to pierwsza strona.
Zobaczmy.
Git log ok i powiedzmy że tutaj dodamy jakąś jeszcze zmianę zróbmy coś prostego przejdę do naszego edytora
i tu dodamy jeszcze spis treści ul ul.
Dodam tu jeszcze jedno li ale będzie to o autorach
ok mała prosta zmiana.
Zobaczmy w kodzie git status pliki zmienione oczywiście
spis treści dodano pozycje o autorach.
Mam tutaj kolejną zmianę zobaczymy jeszcze raz.
Mam tutaj najnowszą zmianę spis treści dodano pozycje o autorach czyli tutaj.
Zwróć uwagę że jest nowy commit.
Przejdę teraz do naszego drugiego repozytorium.
Moja strona.
Jeszcze raz zróbmy sobie log i widzisz.
Ostatnim commitem jest praca równoległa tutaj praca równoległa.
Mamy jeszcze najnowszą zmianę.
Teraz wyobraź sobie właśnie że to drugie repozytorium jest to albo repozytorium twojego kolegi z pracy z projektu albo np.
jest to repozytorium które masz na innym komputerze np. na laptopie a główne repozytorium masz w domu pierwsze
odpracowałeś w domu i chciałbyś te wszystkie zmiany zabrać ze sobą w podróż bo być może będziesz chciał
w trakcie podróży pracować na tym laptopie to teraz będąc w tym naszym.
Moja strona czyli w tym drugim repozytorium ja mogę wydać polecenie git pull.
Do tego polecenia jeszcze wrócimy ale zwróć uwagę git pull połączyło się ze zdalnym tutaj zasobem akurat oba te repozytoria są
lokalne ale tu nie ma różnicy bo mógł być w sieci mógł być na serwerze mógł być zupełnie indziej.
Chodzi o to że jest to inne repozytorium czyli git połączył się z tym repozytorium.
Policzył ile trzeba pobrać różnych zmian różnych obiektów skompresował je żeby szybciej właśnie przesłać
pobrać akurat znowu lokalnie.
Nie ma tu różnicy przy przesłaniu przez internet jest to dość istotne.
Tutaj też informacja ile jest wykorzystanych przesłanych rozpakowanych tu pokazuje skąd z gałęzi master w naszym
oryginalnym repozytorium do naszej gałęzi śledzącej origin master o tym też sobie powiemy.
No i udało się znowu fast forward o którym już wiesz.
Czyli udało się połączyć takie zmiany bez żadnych konfliktów.
I teraz zobaczmy jak teraz wygląda sytuacja w naszym drugim repozytorium.
Zmiany z pierwszego zostały tutaj elegancko pobrane zsynchronizowane z tym repozytorium.
Będziemy mogli w ten sposób także zmiany wypychać z tego repozytorium do głównego o tym już w kolejnych lekcjach.
A tymczasem chciałbym ci pokazać jeszcze inne sposoby klonowania projektów.
Robiliśmy to wszystko lokalnie.
Ja przejdę do katalogu wyżej i tym razem zrobimy także git clone ale sklonujemy repozytorium jakieś istniejące
z internetu z serwera i tutaj powinienem mieć otwarty właśnie git hub z którym będziemy pracować i tak
się składa że na git hubie znajduje się wiele wiele projektów.
Wiele z nich jest typu open source tu można założyć konto w kolejnych lekcjach właśnie zajme się tworzeniem
własnych repozytoriów i pobieraniem zmian wysyłaniem zmian ale w tej lekcji pokażę ci jak można skorzystać
z już istniejących projektów i pobrać jakieś gotowe korzystając właśnie z polecenia git klon spróbujmy zrobić coś takiego jak git book książka
o gicie ok i wybiorę jakąś wersję git book i właśnie jest np. przechowywana w wersji open source w
plikach źródłowych książka na temat gita tutaj na stronie book git scm można ją sobie pobrać gotową
a tu mamy wszystkie pliki źródłowe nie będziemy wchodzili szczegóły bo tu jest różne różne dziwne rzeczy
ja skupię się żeby po prostu pobrać ten cały projekt do naszego naszego repozytorium.
I tutaj mamy clone lub download i moglibyśmy pobrać paczkę zip tylko jeśli podam paczkę zip i później coś by się
zmieniło doszłyby nowe zmiany commity doszły nowe zmiany musimy za każdym razem wchodzić pobierać całą paczkę zip.
Dlatego zamiast tego zrobimy to troszkę lepiej tutaj jak widzisz jest opcja sklonowania ale przy użyciu
protokołu HTTPS czyli tak jak przed chwilą kopiowaliśmy pliki na dysku lokalnym lub moglibyśmy kopiować
pliki po sieci.
Tak tutaj mamy także możliwość skopiowania z internetu ze strony internetowej czy przy użyciu protokołu
HTTPs protokołu który wykorzystują strony internetowe.
Jest jeszcze jedna możliwość.
Moglibyśmy połączyć się przy użyciu protokołu ssh czyli protokołu którego używają do łączenia się z serwerem.
Tam jednak wymagane byłoby użycie użytkownika hasła lub jakiejś innej metody autentykacji z HTTPS
tak jak ze zwykłą stroną internetową.
Nie mogę nie muszę się logować znaczy że znam adres i tak samo jak na stronę internetową tak samo mogę
tutaj połączyć się z repozytorium git i pobrać np. najnowsze zmiany lub pobrać całe repozytorium.
Czyli tutaj jak widzisz wchodzę na git hub.
Wybieram sobie jakiś projekt wybieram zakładkę klon.
Wystarczy że skopiuje adres tu tą ikonką także mogę skopiować do schowka i wracając do naszego projektu po prostu
wklejam ten adres.
I jeśli teraz zrobię Enter to on po prostu utworzy nam katalog git book i do tego katalogu nam ściągnie te wszystkie
zmiany więc ja mam tutaj podać oczywiście nazwę książka git.
I w takim przypadku on pobierze te zmiany do katalogu książka git.
Tutaj chwilkę to potrwa bo tu jest jak widzisz pobieranie z Internetu 1 2 MB o skończył.
Czyli tym razem pobrał 1200 obiektów jest to większe repozytorium dużo większe niż nasze.
Przejdźmy do tego katalogu książka git.
Tutaj mamy wiele różnych plików git status oczywiście pokaże nam stan naszego projektu i git log pokaże jak
widzisz historię wszystkich zmian które działy się w projekcie i ponownie jeśli ktoś wprowadzi tam nowe
zmiany do tego repozytorium.
My chcąc mieć najnowsze informacje najnowsze zmiany jedyne co musimy zrobić to git pull i git pull pociągnie pobierze
nam wszystkie najnowsze zmiany w tym przypadku jest already up to date bo dosłownie przed chwilą pobraliśmy repozytorium
więc na pewno w tym czasie nic się tam nie zmieniło.
W kolejnych lekcjach dowiesz się już jak pracować z gitem i jak pracować z git hubem właściwie utworzymy
sobie tutaj konto na którym będziemy mogli dodawać nasze własne repozytoria.
Tym razem repozytoria w internecie na serwerze i właśnie ta praca z gitem będzie teraz polegała jednocześnie
na pracy zdalnej pracy z innymi użytkownikami też próbujemy zasymulować współpracę kilku takich deweloperów.
Kilku programistów gdzie każdy z nich będzie wrzucał sobie zmiany każdy będzie mógł pobrać najnowsze
informacje ale także pokaże jak korzystając z społecznościowych części git huba będzie można planować projektować
zarządzać naszym projektem np. komunikując się zostawiać komentarze czy opinie lub akceptując i odrzucając
zmiany.
Zobaczysz więc bardzo fajny taki work flow czyli sposób pracy współpracy na który pozwala git hub.
Ale oczywiście to wszystko nie byłoby możliwe gdyby nie to potężne narzędzie którym jest git które pozwala
właśnie pracować na wielu wersjach plików w wielu wersjach różnych zmian aktualizować łączyć dzielić
je ze sobą wymieniać.
No i właśnie git hub w kolejnych lekcjach zobaczysz jak pozwoli nam wszystko robić w internecie nawet
jeśli nie mamy tego samego komputera.
Nawet jeśli nie jesteśmy w wspólnej sieci wystarczy że każdy ma połączenie z internetem i możemy razem
pracować na projekcie.
Takim razie do zobaczenia w kolejnej lekcji.