W tym ćwiczeniu zapoznamy się z jednym z najbardziej popularnych systemów do zarządzania kodem źródłowym - Gitem oraz hostingiem do projektów GitHub. Git będzie nam towarzyszyć przez cały semestr (a także i pewnie poza zajęciami), dlatego warto poświęcić mu odpowiednio dużo uwagi.
Git jest rozproszonym systemem pracy z kodem źródłowym. Jego najważniejsze cechy to:
- możliwość zapisywania stanu kodu źródłowego w określonym momencie
- możliwość przywracania starych wersji kodu źródłowego
- możliwość pracy w gałęziach ("branchach")
- brak centralnego repozytorium kodu (repozytorium rozproszone)
Do wykonania wszystkich ćwiczeń na tym laboratorium potrzebna będzie jedynie zainstalowany Git oraz terminal. Jeśli nie jesteś fanem pracy z samą konsolą warto zaopatrzyć się też w aplikację z GUI do obsługi Git:
- GitKraken - najbardziej zaawansowane narzędzie tego typu, wersja Pro jest darmowa dla studentów korzystających z GitHub Student Developer Pack (bardzo polecam go sobie aktywować niezależnie od samego Gita!)
- SourceTree - popularny darmowy klient z podstawowymi funkcjami i wizualizacją repozytorium.
- Otwórz stronę https://gitexercises.fracz.com
- Postępuj zgodnie z instrukcjami na stronie i zrealizuj pierwsze 8 ćwiczeń z zestawu (do change-branch-history włącznie).
-
Zarejestruj się na GitHubie.
-
Stwórz nowe repozytorium i nazwij je odpowiednio (schemat nazywania poniżej) - będziesz w nim przechowywać rozwiązania zadań z kolejnych laboratoriów.
- nazwa repozytorium to PO_2023_[dzień][godzina]_[nazwisko studenta] - np. PO_2023_PON1500_BRZECZYSZCZYKIEWICZ lub PO_2023_WTO1820_PAPADOPOULOS.
- repozytorium może być prywatne lub publiczne. Na potrzeby naszych zajęć repozytoria powinny być prywatne.
- możesz na tym etapie zaznaczyć opcję Add a README file - zainicjujesz w ten sposób repozytorium plikiem, którego zawartość będzie domyślna na głównej stronie repozytorium.
-
Nadaj uprawnienia dostępu do repozytorium prowadzącemu zajęcia (Settings --> Collaborators --> Add people).
-
Sklonuj repozytorium na lokalny komputer.
-
Utwórz branch o nazwie lab0 i przełącz się na niego.
-
Zmodyfikuj plik README.MD dodając do niego następujące informacje:
- Imię i nazwisko
- Grupę i godzinę zajęć
- Nazwę swojego zwierzaka
- Link do swojego profilu na https://gitexercises.fracz.com
- Możesz też dodać dowolny dodatkowy tekst, to Twoje repo. ;)
-
Dodaj plik .gitignore i przygotuj go do pracy z środowiskiem IntelliJ - możesz skorzystać z gotowego szablonu.
-
Zrób commit i push swoich zmian na zdalny branch o tej samej nazwie (origin/lab0).
-
Na stronie swojego repozytorium na GitHubie przejdź do sekcji Pull requests. Utwórz nowy Pull Request lab0 --> main. Możesz go nazwać np. "Lab0 do oceny".
W ten sposób prowadzący będzie mógł zobaczyć i ocenić Twoje zmiany (np. dodać komentarze w PR). Po sprawdzeniu i ocenieniu Lab PR-a należy scalić z główną gałęzią (przycisk Merge pull request w widoku PR).
Podobną procedurę będziemy stosować na wszystkich kolejnych laboratoriach. Pamiętaj by zawsze na początku pracy tworzyć branch z głównej gałęzi, commitować zmiany (liczba commitów nie ma znaczenia), a na koniec przygotować PR do sprawdzenia.
W celu przygotowania kodu źródłowego do bracy z gitem należy wykonać następujące polecenia
-
git init
(zainicjowanie plików Gita, w głównym katalogu naszej aplikacji, tworzony jest katalog.git
, który zawiera repozytorium kodu źródłowego) -
echo 'out' > .gitignore
(dodanie kataloguout
do listy ingorowanych plików/katalogów)Uwaga: Powyższe polecenie w PowerShellu powoduje problemy. W tej sytuacji zalecane jest po prostu utworzenie pliku
.gitignore
w edytorze tekstu i wpisanie do niego linii o treściout
. -
git add .
(dodanie wszystkich plików, poza ignorowanymi, do indeksu Gita) -
git status
(sprawdzenie aktualnego statusu kodu źródłowego, polecenie wykonywane bardzo często) -
git commit -m 'Initial commit'
(zatwierdzenie (zacommitowanie) zmian w historii Gita) -
git remote add origin https://github.com/<login>/<repozytorium>.git
(dodanie zdalnego repozytorium z Githuba) -
git push origin master
(wysłanie zmian do zdalnego repozytorium)
git clone https://github.com/<login>/<repozytorium>.git
- sklonowanie zdalnego repozytorium
Alternatywnie
- IntelliJ -> Import from Git
W poniższych poleceniach fragment ujęty w nawiasy ostre, np. <file-name>
należy zastąpić innym łańcuchem znaków.
git add <file-name>
(dodanie zmian w pliku<file-name>
do indeksu - operację powtórzyć dla każdego modyfikowanego i nowego pliku)git commit -m '<Meaningful description of change>'
(zatwierdzenie zmian znajdujących się w indeksie)git push origin <branch-name>
(wysłanie zmian do zdalnego repozytorium na gałąź<branch-name>
)
git remote add <remote-repo-name> <remote-repo-address>
(dodanie zdalnego repozytorium).git checkout master
(przełączenie się do lokalnej gałęzi master).git pull <remote-repo-name> master
(pobranie do lokalnej gałęzimaster
zmian z oficjalnej gałęzimaster
)git checkout <feature-branch>
(przełączenie się do gałęzi na której pracowaliśmy).git rebase master
(przepięcie commitów z obecnej gałęzi tak by poprzedzał je ostatni commit zmaster
).- Rozwiązanie konfliktów, ewentualne wprowadzenie zmian.
git push origin <feature-branch> -f
(wysłanie zaktualizowanej wersji do zdalnej gałęzi<feature-branch>
w naszym repozytorium).
- https://git-scm.com/book/pl/v2 - oficjalny podręcznik Gita, częściowo przetłumaczony na język polski
- https://guides.github.com/introduction/git-handbook/ - wprowadzenie do Gita, wyjaśnienie najważniejszych koncepcji
- https://www.atlassian.com/git/tutorials/learn-git-with-bitbucket-cloud - inne wprowadzenie do Gita, zawiera dużo ilustracji