Za każdym razem, gdy rozpoczynam pracę z projektem, muszę skonfigurować Git, aby repozytorium nie zawierało zbędnych plików.
Cała operacja jest wykonywana w kilku krokach, gdzie pierwszym z nich będzie stworzenie nowej aplikacji rails na naszym komputerze. Następnie musimy zaiinicjować kontrolę wersji.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$ rails my_app $ cd my_app $ git init $ git status ... # Untracked files: # (use "git add <file>..." to include in what will be committed) # # README # Rakefile # app/ # config/ # db/ # doc/ # log/ # public/ # script/ # test/ |
Wydanie komendy git statu
s pokazało nam całą strukturę aplikacji, która nie jest objęta kontrolą wersji. Zanim dodamy, powinniśmy wyłączyć kilka plików. Po pierwsze w repozytorium nie potrzebujemy plików dzienników („logów”), które znajdują się w folderze log. Aby je wyłączyć musimy stworzyć plik .gitignore
i dodać linijkę log/*.log
.
1 2 |
$ echo „log/*.log” >>.gitignore |
Ponowne sprawdznie statusu pozwoli nam zauważyć zmianę, która zaszła w repozytorium.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ git status ... # Untracked files: # (use "git add <file>..." to include in what will be committed) # # .gitignore # README # Rakefile # app/ # config/ # db/ # doc/ # public/ # script/ # test/ nothing added to commit but untracked files present (use "git add" to track) |
Folder log zniknął z listy plików do dodania. Problem polega na tym, że klonująć potem repozytorium, otrzymamy jest bez tego folderu. Gdy uruchomimy aplikację, będą problemy z jej działaniem, ponieważ w tym folderze logi muszą być zapisywane.
Naszym zadaniem zatem jest ustawienie repozytorium tak, aby sam folder znajdował się w nim, a ignorowana powinna być jedynie jego zawartość. Cała powyższa sytuacja dzieję się tak dlatego, że system Git nie śledzi pustych folderów. Wyjściem z tej sytuacji jest trick, polegającym na dodaniu pliku .gitignore
w folderze log
. Folder nie będzie pusty, a jednocześnie dodany plik, nie będzie miał wpływu na nasz projekt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$ touch log/.gitignore $ git status … # Untracked files: # (use "git add <file>..." to include in what will be committed) # # .gitignore # README # Rakefile # app/ # config/ # db/ # doc/ # log/ # public/ # script/ # test/ nothing added to commit but untracked files present (use "git add" to track) |
Na powyższym listingu widać, że osiągnęliśmy zamierzony efekt. Podobny problem występuje w folderze tmp, którego zawartość również powinna być ignorowana, nie ignorując samgo folderu. Nauczeni powyższym doświadczeniem dodajemy plik .gitignore w tym katalogu, a w .gitignore
znajdującym się w głównym folderze aplikacji dopisujemy tmp/**/*
. Co oznacza ignorowanie wszystkich plików nawet w podfolderach.
Warto również zignorować dwa foldery z dokumentacją, które niepotrzebnie zajmują miejsce w repozytorium. Po dopisaniu dwóch linijek w głównym pliku .gitignore
, powinien on zawierać taką treść:
1 2 3 4 5 |
log/*.log tmp/**/* doc/api doc/app |
Teraz możemy dodać wszystkie pliki i wykonać początkowe zatwierdzenie.
1 2 3 |
$ git add . $ git commit -a -m „rozpoczęcie pracy” |
W praktyce warto przenieść zewnętrzną bibliotekę rails, wewnątrz aplikacji, co pomoże w późniejszym uruchamianiu projektu na serwerze produkcyjnym. Aby to zrobić musimy wykonać komendę rake rails:freeze:gems co spowoduje przeniesienie całego frameworka, do folderu vendor/rails
. Aplikacja przeszukuje ten folder w pierwszej kolejności i dopiero gdy go nie znajdzie, to szuka po zainstalowanych w systemie gemach.
Po wykonaniu powyższej komendy wystarczy zatwierdzić kolejną zmianę.
1 2 3 |
$ git add vendor $ git commit -a -m „Dodanie frameworku do fodleru vendors” |
Teraz nie pozostaje nic innego niż rozpoczęcie pracy nad projektem.
W sumie nie stoi nic na przeszkodzie, aby powyższy zaimplikować w Rails Template, ale o tym jak to się robi, napiszę już niedługo.
.