2020-12-09
Wszystkie zadania są reprezentowane przez pliki ex-*.cast, które są nagraniami wykonanymi przy pomocy programu asciinema.
Zapisy te mogą zostać odtworzone przy pomocy komendy
asciinema play <recording>.castprzy zainstalowanym programie asciinema w systemie.
Każdy student (który dostarczył poprawny klucz publiczny) ma dostęp do repozytoriów GIT na serwerze:
156.17.7.16przez system Gitolite.Podobnie jak w zadaniu 1. listy 3., studenci są podzieleni na grupy ze względu na dwie ostatnie cyfry numeru indeksu i mają dostęp do jednej z piaskownic:
git@156.17.7.16:sandbox-20-21_00 git@156.17.7.16:sandbox-20-21_25 git@156.17.7.16:sandbox-20-21_50 git@156.17.7.16:sandbox-20-21_75Repozytorium można sobie sklonować jak w poniższym przykładzie:
$ git clone git@156.17.7.16:sandbox-20-21_00Należy wykonać w GIT zadanie analogiczne do zadania 1 z listy 3, wykorzystując mechanizmy tworzenia rozgałęzień i etykietowania (branching, tagging) typowe dla GITa.
Podobnie jak poprzednio, student
999wykonał już swoje zadanie. Należy uważnie prześledzić historię:$ git log --all --graph --decorateoraz przejrzeć utworzonego tag-a:
$ git show s999Następnie wykonać analogiczne czynności na tej piaskownicy. (Nie zapomnieć o wypchnięciu na serwer również swoich tag-ów:
git push --tags).Sprawozdanie
asciinemaz wykonanych czynności należy wrzucić do swojego repozytorium SVN. Powinno ono zawierać na końcu:
- sklonowanie z serwera piaskownicy (zawierającej już własne rozwiązanie) do nowego katalogu,
checkoutwłasnego tag-a,git show <własny tag>, sprawdzenie: kompilacjamakei uruchomienie programu,git log --all --graph --decorate
Odpowiednie nagranie wykonane przy pomocy programu asciinema znajduje się w pliku ex-1.cast.
Napisz skrypt, który dla danych dwóch numerów rewizji i , gdzie , oraz adresu URL katalogu w repozytorium SVN (istniejącego w rewizjach od do ), generuje repozytorium GIT, które zawiera zawiera jedną gałąź master jako ciąg commit-ów odpowiadających tym rewizjom z repozytorium SVN, które zmieniały dany katalog. Każdy commit w repozytorium GIT ma zawierać taki sam stan katalogu i „commit message” jak stan katalogu i „log message” odpowiedniej rewizji z repozytorium SVN. (Daty i autor nie muszą być kopiowane.).
Zakładamy, że wersjonowaniu nie podlegają pliki ani katalogi o nazwach:
.git .svn .gitignorePrzyjmijmy, że skrypt ma nazwę
l4z2.bash. W sprawozdaniuasciinemazademonstruj działanie wywołania skryptu:l4z2.bash 15 21 https://repo.cs.pwr.edu.pl/info/SP-20-21/l3/W bieżącym katalogu powinno zostać utworzone repozytorium GIT o nazwie
l3zawierające odpowiednie commit-y. Sprawozdanie na końcu ma zawierać wyświetlenie w tym repozytorium polecenia:git log --statoraz:
git log --stat | grep -v '^commit ' | grep -v '^Author: ' | grep -v '^Date: '
Plik wykonywalny l4z2.bash jest rozwiązaniem tego zadania. Jego działanie można zobaczyć na nagraniu ex-2.cast.