Zarządzanie projektami informatycznymi
Transkrypt
Zarządzanie projektami informatycznymi
Zarządzanie projektami informatycznymi Zdalne repozytoriami, obsługa wielu gałęzi, ignorowanie plików Zdalne gałęzie są gałęziami z lokalnego repozytorium mającymi odniesienie do stanu gałęzi w zdalnym repozytorium. Są to gałęzie w lokalnym repozytorium, na które nie możemy się przełączyć poleceniem git checkout. Są one modyfikowane automatycznie za każdym razem, kiedy wykonujemy jakieś operacje zdalne (fetch, pull, push). Zdalne gałęzie zachowują się jak zakładki, przypominają, gdzie znajdowały się gałęzie w twoim zdalnym repozytorium ostatnim razem kiedy się z nim łączyłeś. Nazwy gałęzi zdalnych mają format: nazwa_zdalnego_repozytorium/nazwa_gałęzi Przykładowe nazwy gałęzi zdalnych: origin/master – gałąź master w zdalnym repozytorium o aliasie origin progit/rozdzial5 – gałąź rozdzial5 w repozytorium progit git push Polecenia git push używamy do tworzenia nowych gałęzi na serwerze, a także do ich usuwania. Pełna składnia tego polecenia: git push [zdalne_repozytorium] [lokalna_gałąź]:[zdalna_gałąź] Można podać inne nazwy gałęzi lokalnej i zdalnej oddzielone dwukropkiem. Aby usunąć gałąź na serwerze trzeba wysłać brak gałęzi! W miejscu nazwy gałęzi lokalnej pozostawiamy puste miejsce: git push [zdalne_repozytorium] :[zdalna_gałąź] Jest to dość nietypowa składnia polecenia usuwania gałęzi zdalnych. Przykłady użycia polecenia git push: git push origin zpi Wysyła lokalną gałąź zpi na zdalne repozytorium origin pod taką samą nazwą. git push origin master:inna Tworzy/uaktualnia w zdalnym repozytorium origin gałąź o nazwie inna z gałęzi lokalnej master. Czyli wypycha nam na serwer gałąź master pod nazwą inna. git push origin :inna Wysyła na serwer brak gałęzi w miejsce gałęzi inna, czyli usuwa gałąź inna ze zdalnego repozytorium origin. Przykłady innych poleceń pracujących na gałęziach zdalnych: git log origin/zpi --oneline --decorate Pokazuje log zdalnej gałęzi zpi, pobranej z repozytorium origin. git remote show origin Pokazuje więcej informacji o konkretnym zdalnym repozytorium, tutaj origin. git merge origin/master Dodaje/łączy zmiany z gałęzi zdalnej origin/master do gałęzi, w której jesteśmy. Jeśli nie jesteśmy lokalnie w gałęzi master to zmiany zostaną scalone do innej gałęzi. git checkout -b problem237 origin/blad237 Tworzy nową gałąź lokalną problem237 ze zdalnej gałęzi blad237, na której będzie można teraz pracować i automatycznie przełącza nas do niej. Nie ma możliwości pracować bezpośrednio na gałęziach zdalnych, choć są one już w naszym lokalnym repozytorium. Lokalna gałąź problem237 będzie śledzić zdalną gałąź origin/blad237. Ignorowanie plików Nie wszystkie pliki znajdujące się w katalogu roboczym projektu będziemy chcieli śledzić i zachowywać w repozytorium. Niektóre z nich trzeba ignorować. Wśród takich plików można wymienić: • skompilowanie pliki binarne lub obiektowe (*.o, *.obj), skompilowane pliki języka java z rozszerzeniem *.class, • pliki dokumentacji wygenerowane automatycznie z plików źródłowych (*.html, *.pdf, ...), np. za pomocą programu doxygen, • inne automatycznie generowane pliki z plików źródłowych, • pliki tymczasowe i zapasowe kopie plików generowane przez edytory tekstowe czy inne narzędzia programistyczne, których używamy, • ... Wszystkie te pliki nie są potrzebne innym programistom do pracy nad projektem. Jednak dla naszej wygody, czy przyzwyczajeń dobrze jest mieć je w katalogu roboczym. Co robimy? Ignorowanie plików w systemie git (git help gitignore) Określamy wzorce plików, co do których chcemy, żeby specjalnie nie były śledzone. Takie określenie plików, które mają być ignorowane nie działa na pliki już poddane śledzeniu. Oczywiście można zawsze przestać śledzić plik znanym już poleceniem git rm --cached. Ignorowanie plików stosujemy, żeby mieć pewność, że pewne pliki, które nie mają być śledzone, takimi do końca pozostaną. Pliki, które mają być ignorowane, podajemy za pomocą wzorców. System git ma cztery źródła wzorców, ułożone hierarchicznie, według których szuka plików, które nie będą śledzone. I tak od najważniejszych: 1. wzorce przekazane w linii poleceń, tych oczywiście, które takie wzorce dopuszczają, 2. wzorce w pliku .gitignore będącego w tym samym katalogu co plik albo w katalogu nadrzędnym dla tego pliku (który to jednak katalog powinien być częścią repozytorium); jeśli jest kilka plików .gitignore w kilku katalogach i są w nich wzorce dotyczące tych samych plików to stosowany ostatecznie jest ten wzorzec będący najniżej w hierarchii katalogów, czyli taki, który jest najbliżej pliku, którego dotyczy; zwykle projekt posiada jeden plik .gitignore; 3. wzorce zapisane w pliku $GIT_DIR/info/exclude 4. wzorce przeczytane z pliku określonego w zmiennej core.excludesfile. Kiedy stosujemy każde z tych rozwiązań? Plik .gitignore Jest to chyba najważniejszy plik. Zapisujemy w nim wzorce, które będą przenosić się wraz z całym repozytorium, np. poleceniem git clone. Są to więc wzorce dotyczące plików, które wszyscy programiści będą mieli i wszyscy będą chcieli je ignorować. Przykładem mogą być pliki binarne skompilowanych programów, pliki obiektowe (*.o), inne. Plik exclude Stosujemy ten plik, kiedy chcemy wykluczyć pliki, które są nie potrzebne tylko nam, tylko w tym konkretnym repozytorium. Inni ludzie pracujący nad tym projektem mogą tych plików w ogóle nie mieć. Zmienna programu git core.excludesfile Zmienna ta zawiera nazwę pliku, w którym mamy wzorce określające jakie pliki mają być wyłączone ze śledzenia. To rozwiązanie wykorzystujemy zwykle kiedy chcemy wykluczyć ze śledzenia pliki, które my sobie za każdym razem wykluczamy. Nie dotyczy to jakiegoś konkretnego projektu ale bardziej naszych własnych indywidualnych upodobań. Na przykład jeśli jakiś nasz ulubiony edytor tworzy pliki zapasowe czy tymczasowe to oczywiście nie będziemy ich śledzić, ale nikt inny takiego edytora może nie używać więc odpowiednie wzorce umieszczamy w własnym pliku, którego nazwę ustalamy w zmiennej core.excludesfile. Dla przykładu stworzyłem sobie w katalogu domowym plik nie_sledzic i umieściłem w nim wzorzec *.swp (pliki tymczasowe edytora vim). Ustawiłem wartość zmiennej poleceniem: git config core.excludesfile "~/nie_sledzic". No i działa. Format wzorców Pusta linia nie dopasowuje żadnego pliku, może służyć jako separator dla poprawy czytelności. Linia zaczynająca się od znaku # służy jako komentarz. Znak ! neguje wzorzec. Jeśli jakiś plik zostanie dopasowany tym wzorcem a wcześniej był przez inny wzorzec wyłączony ze śledzenia to będzie ponownie śledzony. Wystąpienie znaku / we wzorcu oznacza, że musi być dopasowana odpowiednia ścieżka, odpowiednia struktura katalogów, a nie tylko nazwa pliku. Przykłady: foo/ Dopasuje katalog foo i pliki w nim zawarte ale nie dopasuje zwykłego pliku foo czy linku o takiej nazwie. Documentation/*.html Dopasuje plik Documentation/git.html ale nie dopasuje pliku Documentation/ppc/ppc.html albo tools/perf/Documentation/perf.html. /*.c Dopasuje plik cat-file.c, ale nie plik src/main.c. Więcej w pomocy: git help ignore Przykładowa zawartość pliku .gitignore: # # # # # # git ls-files --others --exclude-from=.git/info/exclude Linie zaczynające się znakiem '#' stanowią komentarz. Dla projektów napisanych w języku C przydatnymi wzorcami plików, które mają być ignorowane mogą być (usuń komentarz w celu użycia ich): *.[oa] *~ # pliki obiektowe z katalogu obj i plik wykonywalny obj/*.o bin/SGP # dokumentacja html wygenerowana przez program doxygen # czyli zawartość katalogu doc/html doc/html/* # wszystkie pliki graficzne z rozszerzeniem *.jpeg i *.png # z wyjątkiem plików *.png w katalogu /doc/graph/PB/ *.jpeg *.png !/doc/graph/PB/*.png Ćwiczenia: Praca ze zdalnym repozytorium: 1. W celu przetestowania powyższej teorii tworzymy własne repozytorium na serwerze github (można zamieścić na serwerze dowolny własny projekt). 2. Zdalne repozytorium modyfikujemy lokalnie i wysyłamy modyfikacje na serwer. 3. W sprawozdaniu należy umieścić kilka screen'ów z własnych działań wraz z nazwą swojego konta na serwerze. Praca z wieloma gałęziami (https://github.com/student-zpi/historyjka) 1. Kopiujemy projekt (na swoje konto na github – przycisk FORK) [email protected]:student-zpi/historyjka.git 2. W pliku README jest instrukcja co robić dalej. 3. Wykonujemy zadania z pliku. 4. Wszystkie pytania i odpowiedzi na github zamieszczamy w sprawozdaniu. Wspólna praca na jednej gałęzi (https://github.com/sabina1986/git-pytania.git) 1. Kopiujemy projekt (na swoje konto na github – przycisk FORK) https://github.com/sabina1986/git-pytania.git 2. W pliku README jest instrukcja co robić dalej. 3. Wykonujemy zadania z pliku. 4. Wszystkie pytania i odpowiedzi zamieszczamy w sprawozdaniu.