Kontrola wersji z Git cz. 3 – cykl życia plików

Wiemy już jak stworzyć nowe repozytorium oraz jak zatwierdź pierwsze zmiany. Przyjrzyjmy się teraz w jakich stanach mogą znajdować się pliki poddane kontroli wersji.

Cykl życia plików - GIT

Każdy plik w katalogu który poddany jest kontroli wersji może być śledzony lub nieśledzony. Pliki śledzone to te które zostały już dodane do repozytorium poprzez wywołanie git add a następnie git commit. Dzielimy je na zmodyfikowane, niezmodyfikowane lub oczekujące w poczekalni. Reszta plików w katalogu to pliki nieśledzone – czyli takie, które nie zostały poddane kontroli wersji.

Podczas zmiany pliku który jest już śledzony Git oznacza ten plik jako zmodyfikowany. Zmodyfikowany plik przed zatwierdzeniem należy dodać do poczekalni (lub od razu wywołać git commit z parametrem -a który pomija poczekalnię, więcej tutaj). Po zatwierdzeniu zmian i ponownej modyfikacji cały proces powtarza się ponownie.

Status plików w repozytorium

W poprzednim wpisie przedstawiłem już tą komendę, ale krótkie przypomnienie: w celu sprawdzenia aktualnego stanu plików w katalog wywołujemy polecenie git status:

$ git status
On branch master
nothing to commit, working directory clean

W powyższym przykładzie widzimy że pracujemy na gałęzi master oraz nie ma żadnych oczekujących zmian do zatwierdzenia. Polecam dodanie kilku plików i wykonanie ponownie tego polecanie w celu sprawdzenia co tym razem otrzymamy.

Dodawanie nowych plików

Aby dodać nowy plik do kontroli wersji wykonujemy polecenie git add nazwa_pliku. Teraz po wykonaniu git status zobaczymy że nasz pliki widnieje pod statusem „Changes to be committed„:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	new file:   index.php

W tym momencie plik index.php został przeniesiony do poczekalni.

Do poczekalni nie został dodany sam plik, tylko migawka pliku z obecnego momentu.

Jeżeli przed zatwierdzeniem zmian ponownie zmodyfikujemy plik index.php to po wywołaniu git status zobaczymy:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	new file:   index.php

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   index.php

Oznacza to, że jeżeli chcemy aby nowe zmiany zostały dodanego do poczekalni, musimy ponownie wywołać git add. W innym przypadku po zatwierdzeniu zmian do historii trafi wersja z przed edycji.

Dodawanie zmodyfikowanych plików

Okazuje się że polecenie git add dodaje również do poczekalni pliki znajdujące się pod kontrolą wersji, które zostały zmodyfikowane. Warto wspomnieć tutaj o możliwości dodanie wszystkich nowych i zmodyfikowanych plików jednym poleceniem:

$ git add .

Zatwierdzanie zmian

Zatwierdzanie zmian zostało już opisane w poprzednim wpisie dostępny tutaj.

Usuwanie plików

Do usuwania plików wykorzystujemy polecenie git rm.

Wywołanie git rm spowoduje trwałe usunięcie pliku z dysku twardego oraz oznaczenie go jako usuniętego (Changes to be committed).

Dopiero zatwierdzenie zmian (git commit) spowoduje usunięcie go z kontroli wersji. Istnieje możliwość zachowanie pliku na lokalnym dysku poprzez dodanie parametru –cached

$ git rm --cached index.php
rm 'index.php'

Przenoszenie plików

W GIT’cie nie ma możliwości bezpośredniego przeniesienia plików, istnieje jednak mechanizm który ułatwie tego typu operacje. Polecenie git mv posłuży nam do zmiany nazwy pliku lub zmiany jego lokalizacji. Poniżej przykład:

$ git mv index.php default.php

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	renamed:    index.php -> default.php

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   default.php

W ten sposób zmieniamy plik index.php na default.php. Teraz wystarczy zatwierdzić zmiany i gotowe.

Ignorowanie plików

Na końcu warto wspomnieć jeszcze o mechanizmie ignorowania plików.  Czasami nie chcemy aby pewne pliki były poddane kontroli wersji np. pliki logów lub cache. W tym celu jeszcze przed rozpoczęciem prac nad repozytorium warto utowrzyć plik .gitignore, który będzie zawierał definicję plików ignorowanych, które zostaną pominięte przy sprawdzania stanu repozytorium. Przykładowy plik .gitignore:

/bootstrap/compiled.php
/vendor
composer.phar
composer.lock
.env.*.php
.env.php

Każda definicja/wzorzec powinien znajdować się w osobnym wierszu. Ogólne zasady formatowana pliku .gitignore:

  • linia zaczynająca się od znaku # jest komentarzem
  • możemy stosować wyrażenia przetwarzania katalogów zgodnie z tymi z konsoli (np. znak * oznacza dowolny znak)
  • dodanie ostatniego znaku „/” oznacza wskazanie katalogu
  • istnieje możliwość negowania definicji poprzez wstawienie znaku „!” na początku

 

To wszystko w dzisiejszym artykule. W kolejnym wpisie przerobimy temat zdalnych repozytoriów. Dziękuję za poświęconą uwagę oraz zapraszam do komentowania.



Więcej w GIT
Kontrola wersji z Git cz. 2 – instalacja, konfiguracja i pierwszy commit

W tym wpisie zainstalujemy a następnie skonfigurujemy Git do poprawnej pracy. Utworzymy także pierwsze repozytorium i dokonamy pierwszego zatwierdzenia zmian.

Zamknij