Zarządzanie projektami informatycznymi Tworzenie repozytorium Repozytorium w programie git możemy stworzyć na dwa sposoby: git init albo git clone. git init git init inicjalizuje katalog jako repozytorium git'a. Jeśli katalog nie istnieje to zostanie utworzony. Tworzone jest puste repozytorium git'a albo ponownie inicjalizowane już istniejące. Do katalogu roboczego dodawane jest repozytorium (specjalny podkatalog.git). git init lab01/przyklad Utworzy katalog przyklad wewnątrz lab01 jako repozytorium mkdir lab01; cd lab01; mkdir przyklad; cd przyklad; git init; To samo co wyżej ale "ręcznie". cd projekty/gry/statki; git init; albo git init projekty/gry/statki Inicjalizuje (na dwa różne sposoby) istniejący projekt (gry w statki). 1. W pustym katalogu lab01 utworzyć repozytorium. Przejrzeć zawartość katalogu.git. Ile tam jest podkatalogów? Dwa przydatne pliki, często edytowane przez programistę to info/exclude oraz config. 2. Utworzyć (na dwa sposoby) repozytorium w podanej ścieżce: ~/zpi/nauka/hello. Można użyć mkdir z opcja -p. git clone git clone kopiuje repozytorium git'a tworząc nowy katalog zawierający pliki źródłowe i repozytorium z całą historią projektu. Mamy swoją lokalną kopię projektu. git clone https://github.com/mimi1971/hello-world.git albo git clone git://github.com/mimi1971/hello-world.git witaj-swiecie Tworzy lokalną kopię repozytorium hello-world z podanej lokalizacji tworząc dwa różne repozytoria: hello-world oraz witaj-swiecie. Używamy tutaj dwóch różnych protokołów, wspierane protokoły to: ssh, git, http, https, ftp, ftps, rsync. Domyślnym protokołem jest systemu plików, tak jak poniżej: git clone projekty/gry/statki lab_inne/statki_kopia Tworzy kopię repozytorium statki pod nazwą statki_kopia.
3. Utworzyć kopię repozytorium hello-world z powyższego przykładu pod nazwą hello-git. Jak wygląda kod programu Hello-world w języku D? 4. Utworzyć kopię repozytorium hello z punktu 2 poprzednich ćwiczeń pod nazwą zpi-hello. Jakie git wyświetla ostrzeżenie i dlaczego? Wstępna konfiguracja git Podstawowe informacje o użytkowniku Na początek ustawiamy na komputerze nazwę użytkownika i jego e-mail: git config --global user.name "Imię Nazwisko" git config --global user.email email@domena.org Te dane będą zapisywane przy każdym zatwierdzeniu. Jeśli tego nie podamy będziemy anonimowi dla systemu i dla prowadzącego podczas kolokwium i później. Domyślny edytor, kolorowy terminal, aliasy Aby uprościć sobie pracę z systemem git można ustawić na początku jeszcze kilka informacji: ustalenie domyślnego edytora, np. gedit: git config --global core.editor gedit kolorowy terminal (przydaje się) git config --global color.ui auto git config --global color.diff auto git config --global color.status auto git config --global color.branch auto dla wygody - tworzenie aliasów: git config --global alias.st "status -s", git config --global alias.ci "commit" git config --global alias.ll "log --oneline --decorate graph" git config --global alias.ls "log --oneline --decorate --graph -7"
Zwykła praca z systemem git Mamy już nasze lokalne repozytorium. Czas na zmiany. Tworzymy i edytujemy pliki, dodajemy pliki do przechowalni albo inaczej na scenę (git add), przeglądamy stan naszych plików (git status) oraz co dokładnie się zmieniło (git diff). Na koniec zatwierdzamy zmiany (git commit). git add, status, diff, commit git add dodaje nowo utworzone pliki do przechowalni (zaczyna się śledzenie ich zmian) ale także umieszcza w przechowalni śledzone już pliki, które zmieniły się od ostatniego zatwierdzenia. pokazuje status plików w katalogu roboczym i w przechowalni. git add main.cpp Przenosi main.cpp do przechowalni jeśli nie był wcześniej śledzony albo były w nim zmiany. git add. Przenosi wszystkie nie śledzone pliki i te, w których były zmiany, do przechowalni. Pokazuje status wszystkich zmienionych plików w katalogu roboczym i w przechowalni. -s hello-world.c Opcja -s (ang. short) pokazuje status pliku hello-world.c w skróconej formie. W pustym repozytorium lab01 z ćwiczenia 1 patrzymy na status (na dwa sposoby): -s Następnie tworzymy plik Ala. touch Ala I patrzymy co się zmieniło: -s Co oznacza "?? Ala"?
Przenosimy plik do przechowalni i znowu patrzymy co się zmieniło: git add Ala -s Co oznacza "A Ala"? Zatwierdzamy zmiany poleceniem commit. Dla każdego zatwierdzenia trzeba podać wiadomość. Można to zrobić tak: git commit -m "Dodałem plik tekstowy Ala" Jeśli nie podamy opcji -m system otworzy nam domyślny edytor tekstowy, w którym mamy wpisać odpowiednią wiadomość. Bez tego zatwierdzenie się nie uda. Sprawdzamy status jeszcze raz: -s Jaki jest stan repozytorium. Katalog roboczy jest czysty co oznacza, że wszystkie pliki zgadzają się z ostatnim zatwierdzeniem. 5. Edytujemy plik Ala, zapisujemy zmiany i sprawdzamy status plików. Co oznacza " M Ala"? Dlaczego nie jest "M Ala"? 6. Dodajemy aktualną wersję pliku do przechowalni. Jaki teraz jest status? 7. Znowu edytujemy plik Ala, zapisujemy i sprawdzamy status? Co oznacza "MM Ala"? Która wersja pliku będzie zapisana w repozytorium po zatwierdzeniu? 8. Zatwierdzamy zmiany i znowu patrzymy na status. Czy można od razu, bez dodawania plików do przechowalni, zapisać ich stan w repozytorium? Jakim poleceniem? git diff pokazuje zmiany w plikach w katalogu roboczym i w przechowalni. Pokazuje zmiany w pliku Ala: git diff Ala między wersją pliku z katalogu roboczego, a tym co jest w przechowalni lub zostało zatwierdzone; inaczej mówiąc pokazuje zmiany plików nie będących w przechowalni, git diff --cached Ala między wersją pliku w przechowalni a tym co zostało zatwierdzone, czyli pokazuje zmiany plików będących w przechowalni, git diff HEAD Ala pokazuje wszystkie zmiany czyli zmiany między tym co zarówno w katalogu roboczym jak i w przechowalni w stosunku do zmian zatwierdzonych. git diff HEAD Pokazuje wszystkie zmiany we wszystkich plikach. Git diff --stat Pokazuje podsumowanie (statystyki) zmian zamiast nich samych.
W repozytorium lab01 z punktu 8, przenieś zmiany do przechowalni, dodaj do pliku Ala jeszcze jedną linię, zapisz zmiany. Polecenie -s powinno wyświetlać "MM Ala". Przetestować wszystkie polecenia git diff z powyższych przykładów. Można użyć opcji --color.