Użycie GITa w czasie laboratorium

Schemat użycia GITa na laboratorium #

Tą sekcję należy wykonać w sali na pierwszym laboratorium (W1). Przed przejściem przez tą sekcję trzeba zapoznać się z opisem użycia GITa Wymaga ona dostępu do serwera działającego tylko w trakcie trwania laboratorium. Zachęcam jednak do przeczytania jej i przygotowania się do wykonania poniższych kroków.

Konfiguracja ssh #

Na laboratorium każde zadanie będzie rozwiązywane w takim repozytorium. Twoim celem jest śledzenie zmian w repozytorium w trakcie trwania laboratorium i ich synchronizacja z serwerem. Jeżeli jakiś kod nie znajdzie się na serwerze, nie będzie oceniany.

Zanim przejdziemy do pobierania kodu, trzeba uzyskać swój osobisty klucz SSH z platformy LeON. W dziale klucze ssh należy pobrać dwa pliki: id_ed25519 oraz id_ed25519.pub oraz przekopiować je do folderu ~/.ssh. Plik id_ed25519 jest kluczem prywatnym - to znaczy że może być użyty do uwierzytelnienia wobec serwera znającego klucz publiczny (oraz do wielu innych rzeczy, jak szyfrowanie, podpisy cyfrowe i inne). Każdy klucz jest unikatowy i - zgodnie z nazwą - prywatny, tzn. działa jak hasło. Nie powinno się go udostępniać, ponieważ, podobnie jak z hasłem - jeżeli inna osoba wejdzie w jego posiadanie jest w stanie się pod nas podszyć i np. skasować nasze rozwiązanie z serwera. Zmień uprawnienia poleceniem:

chmod 600 ~/.ssh/id_ed25519

Wiele różnych kluczy #

Może zdarzyć się tak, że w folderze ~/.ssh znajdują się już inne klucze (np. na potrzeby innego przedmiotu). W takiej sytuacji najlepszy rozwiązaniem, jest powiedzenie programowi ssh, jakich kluczy ma używać przy połączeniu z danym serwerem. Zmień nazwę pobranych kluczy na inną, np. id_ed25519_sop oraz id_ed25519_sop.pub i umieść w katalogu ~/.ssh/ (pamiętaj o uprawnieniach, chmod 600). Następnie utwórz plik ~/.ssh/config z zawartością postaci:

IdentityFile ~/.ssh/id_ed25519
Host vl01
  IdentityFile ~/.ssh/id_ed25519_sop

Tak skonstruowany plik konfiguracyjny mówi programowi ssh, żeby zawsze patrzył na domyślny klucz id_ed25519 (jak wcześniej), a jeżeli łączymy się do servera vl01 (serwer używany na SOPach) żeby użył klucza id_ed25519_sop. W ten sposób możesz dodawać kolejne klucze do różnych serwerów.

Praca z repozytorium #

Pierwszym krokiem będzie wykonanie kopii zdalnego repozytorium na swoją stację roboczą poleceniem

$ git clone ssh://gitolite@vl01/w1pl/imię_nazwisko w1

Polecenie stworzy folder o nazwie w1 i wykona do niego kopie plików. Ostatni parametr polecenia określa nazwę folderu, który zostanie stworzony dla repozytorium - tak więc na kolejnych laboratoriach może to być l1, l2 etc. Jeżeli nie podamy żadnej nazwy git domyślnie utworzy folder o takiej samej nazwie jak nazwa repozytorium - w tym wypadku imię_nazwisko.

W przypadku gdyby polecenie zakończyło się niepowodzeniem należy sprawdzić, czy dobrze wpisaliśmy w adresie repozytorium nasz login postaci imię_nazwisko - powinien być bez polskich znaków, taki sam jak we wspomnianych plikach na LeONie - najlepiej przekopiować stamtąd. W przypadku gdy mimo to pobieranie repozytorium nie działa należy zgłosić to prowadzącemu.

Zadanie składa się z etapów. Po zakończeniu etapu należy wykonać commita do repozytorium (polecenia git add i git commit). Commit powinien mieć nazwę mówiącą, którego etapu dotyczy oraz co dodaje/naprawia, w rodzaju “Etap 2 - poprawka zwalniania pamięci” Aby zsynchronizować lokalne zmiany do serwera, należy wykonać polecenie

$ git push

Proszę pamiętać, że za etap można uzyskać punkty dopiero, gdy jego kod znajdzie się na zdalnym repozytorium. Możliwość synchronizacji z serwerem zostaje utracona punktualnie z końcem czasu przeznaczonego na zadanie.

Aby rozwiązanie zostało przyjęte przez serwer musi spełniać następujące warunki:

  • Jedynie pliki rozwiązania (.c) zostały zmodyfikowane - modyfikacja jakichkolwiek innych plików, np. makefile spowoduje odrzucenie rozwiązania
  • Pliki rozwiązania są poprawne sformatowane. W folderze repozytorium znajduje się plik .clang-format będący konfiguracją dla programu clang-format zainstalowanego na komputerach laboratorium. Umożliwia on ładne sformatowanie kodu poprzez polecenie clang-format -i <nazwapliku>.c . Wiele edytorów pozwala na integrację z clang-format i automatyczne formatowanie pliku podczas pisania albo przy zapisie.
  • Rozwiązanie nie jest zbyt długie - domyślnie 600 linii (zadania laboratoryjne powinny być zwykle możliwe do rozwiązania w mniej niż 300 liniach)
  • Rozwiązanie powinno się kompilować bez błędów przy użyciu makefile zawartego w repozytorium

W przypadku niespełnienia którego z warunków serwer odrzuci rozwiązanie z odpowiednim komunikatem. Należy poprawić swój kod, zrobić commit i ponownie wykonać push. Serwer pozwala wykonać jeden push na minutę.