Wstęp
PHPStorm, jako zintegrowane środowisko programistyczne, posiada sporo wbudowanych narzędzi, o których często nie słyszały nawet osoby o sporym doświadczeniu. Wśród nich jest wbudowany klient REST, czy integracja z systemem kontroli, o której będzie ten wpis. Skupię się na opisaniu integracji z Gitem, ponieważ najwięcej osób z niego korzysta. Oprócz Gita, PHPStorm obsługuje SVN, Mercurial, CVS, SVN oraz Perforce.
Co daje nam używanie gita w PHPStormie?
Podstawową korzyścią z używania integracji Gita w IDE to większa efektywność przy pracy z systemem kontroli wersji, dodatkowo nie musimy przełączać się pomiędzy osobnym terminalem i większość rzeczy możemy zrobić skrótami klawiszowymi. Dostajemy świetne narzędzie do rozwiązywania konfliktów, commitowania. Przejdźmy do praktyki.
Jak skonfigurować Gita?
Przy projekcie bez zainicjonowanego gita możemy zainicjinowanać go z poziomu IDE. Wystarczy w górnym menu wybrać VCS -> Enable Version Controll Integration.
W nowo otwartym oknie wybieramy Git.Od tego momentu mamy skonfigurowany system kontroli wersji.
Jak dodać zewnętrzny serwer do Gita?
Praca ze zdalnym repozytorium Gita to podstawa przy codziennych zadaniach programisty, możemy dodać repozytorium przez terminal, jak i przez PHPStorma. W tym celu z menu wybieramy VCS -> Git -> Remotes, otworzy nam się menadżer zdalnych repozytoriów.
Jak dodawać pliki do wersjonowanych plików?
Możemy ręcznie dodać pliki poprzez kliknięcie prawym klawiszem myszy na interesujący plik i wybranie Git -> Add lub skorzystać ze skróty klawiszowego: option + command + a.
Jednocześnie, podczas tworzenia nowego pliku, PHPStorm sam zapyta nas czy nie chcemy dodać pliku.
Commitowanie plików.
Przy commitowaniu mamy kilka opcji, w większości są one do siebie podobne. Po wcześniejszym dodaniu pliku do wersjonowania wybieramy z górnego menu VCS -> Git -> Commit File, równocześnie możemy kliknąć prawym klawiszem i wybrać Git -> Commt File. Ostatnim, najlepszym według mnie sposobem jest skrót klawiszowy command + k.
W nowo otwartym oknie, z najważniejszych funkcji mamy możliwość dodania kolejnych plików, dodania wiadomości do commita, sprawdzenia co dokładnie commitujemy.
Możemy puścić samego commita, bądź commita z pushem. Jeśli nie zrobimy pusha przy commicie, zawsze możemy go wywołać skrótem klawiszowym command + shift + k, bądź wybierając z menu VCS -> Git -> Push.
Przelączanie się pomiędzy branchami.
Przęłączać się pomiędzy branchami możemy z wysuwanego okna w prawym dolnym rogu, bądź z górnego menu VCS -> Git -> Branches
Annotate
Ciekawa funkcja, o której nie każdy wie, wykorzystywana do sprawdzenia kto edytował dane miejsce w kodzie. Najszybciej uruchomimy ją przez kliknięcie prawym klawiszem na numeracji lini, bądź VSC -> Git -> Annotate.
Dodatkowo, klikając na konkretny wpis uzyskujemy większe informacje o tym, jakie pliki zostały zmodyfikowane podczas danego commita oraz wiadomość przy commitowaniu.
Sprawdzenie aktualnej rewizji
Aby sprawdzić z jakiego commita pochodzi nasz plik, w którym obecnie się znajdujemy, wybieramy z menu VCS -> Git -> Show current revision.
Metoda pomocna do sprawdzenia który ostatni commit sprawił jakiś problem i do którego miejsca np. musimy wycofać produkcję, jeśli bug nie jest szybko naprawialny, a nie chcemy cofać np. całego wydania.
Porównywanie z innym branchem
Historia lokalna
Posiadamy możliwość wersjonowania plików bez commitowania plików wraz z możliwością szybkiego przełączenia się pomiędzy różnymi wersjami. Przydatną funkcją jest ustawienie etykiety, dzięki której możemy rozpoznawać różne wersje. Aby to zrobić wystarczy z górnego menu wybrać VCS -> Local History -> Put Label, bądź analogicznie z prawego kliku.
Uruchomienie narzędzia porównującego wersje możemy wykonać z menu kontekstowego Local History -> Show History.
Rozwiązywanie konfliktów
Najgorszą częścią przy pracy w projektach jest rozwiązywanie konfliktów, na szczęście, dzięki wbudowanemu narzędziu do konfliktów w PHPStormie, całość jest sporo łatwiejsza i szybsza. Gdy stworzy nam się jakiś konflikt podczas mergowania branchy, PHPStorm sam uruchomi okno z wyborem zmian. Jednak, gdy tak się nie stanie, ponieważ np zmergujemy z terminala, to uruchomimy VCS -> Git -> Resolve Conflicts z górnego menu.
Z tego miejsca już od razu możemy wybrać które zmiany chcemy zaakceptować, jednak jeśli chcemy się upewnić co dokładnie zostało zmienione, to możemy przejść do konkretnego konfliktu klikając na niego.
W tym miejscu możemy akceptować konkretne strony, albo dopasować tak, aby wszystkie zmiany z dwóch branchy zostały wprowadzone do finalnego commita. Jest to bardzo przydatne w sytuacji, w której pracujemy dłużej nad jakimś zadaniem i zanim puścimy Merge Requesta, to ktoś już inny zmerguje swoje zaakceptowane zmiany do głównego brancha.
Revertowanie zmian
Sporym ułatwieniem codziennej pracy jest szybka możliwość revertowania zmian konkretnego pliku. Najczęściej z tego powinniśmy korzystać podczas okna commitowania używając skrótu option + command + z bądź wybierając z menu najeżdżając na plik.
Również z poziomu PHPStorma posiadamy możliwość tagowania wersji w repozytorium, co jest przydatne, jeśli chcemy zaznaczyć do którego miejsca mamy daną wersję aplikacji. Naturalnie uruchamiamy z górnego menu VCS -> Git -> Tag.
Mergowanie dwóch branchy
Aby domergować zmiany z innego brancha do aktualnego, wystarczy z menu wyświetlającego aktualną wersję branch wybrać interesujący branch, który chcemy zmergować do aktualnego, i wybrać merge. Dzięki temu wszystkie zmiany zostaną zastosowane w aktualnym branchu.
Szczególnie przydatne, gdy chcemy zaaktualizować branch który czeka na Code Review w repozytorium.
Stashowanie
Jako programiści nie lubimy być odrywani od aktualnego zadania, nad którym pracujemy, jednak czasem się zdarza, że priorytety się zmieniają, i zamiast pracować nad nową funkcjonalnością musimy zająć się poprawką buga który występuję na produkcji. W takich przypadkach większości wpisujemy w terminal git stash i po skończonej pracy git stash pop, niestety, po pewnym czasie posiadamy spory bałagan z indexami stasha i nie wiemy który jest wersją prawidłową, w takich momentach przydatna jest funkcja stashowania w PHPStormie, aby ją uruchomić wybieramy z menu VCS -> Git -> Stash.
Po wybraniu ukaże się nam pop up, w którym możemy wpisać wiadomość, która będzie nas informowała nad czym aktualnie pracowaliśmy.Jeśli chcemy przywrócić jakieś zmiany z do aktualnego brancha, wystarczy z menu wybrać VCS -> Git -> UnStash Changes.
W łatwy sposób możemy podejrzeć zmodyfikowane pliki wraz z modyfikacjami wewnątrz plików.
Możemy usuwać stashe.
Git Reset HEAD
Jeśli chcemy cofnąć się o kilka commitów wstecz, wystarczy z menu wybrać VCS -> Git -> Reset HEAD.
Do wyboru mamy trzy opcje typu resetowania: Mixed, Soft, Hard.
Możemy sprawdzić, do którego commita będziemy się cofali przez opcje Validate, która pokaże wiadomość z danego commita oraz zmiany jakie zostały w nim wprowadzone.
Podsumowanie
Jak widzimy PHPStorm (jak i reszta IDE od Jetbrains) posiada bardzo rozbudowane integracje z systemami kontroli wersji, a w szczególności z Gitem. Podsumowanie czy warto korzystać ze wszystkich dobrodziejstw jakie oferuje nam IDE w stosunku do terminala, zostawię do osobistego przemyślenia przez czytelników. Osobiście korzystam z większości funkcji zintegrowanych w IDE, ale czasem szybciej jest mi użyć terminala, nie zamykam się tylko na jedno rozwiązanie, wybieram te które lepiej sprawdzi się w danym momencie, a możliwość wyboru warto posiadać.