Introduction

10 listopada 2015 20:00
Patryk Szymański

Bash, Git i Vagrant, czyli jak pracować z PyPiłą.

Witam w zbiorczym poradniku z którego dowiecie się wszystkiego co wypada wiedzieć przed pierwszymi zajęciami PyPiły. Poznamy podstawowe komendy linuksowego basha, dowiemy się jak pracować z systemem kontroli wersji Git, poznamy co to branche oraz czemu są takie ważne a na koniec krok po kroku postawimy wirtualne środowisko programistyczne gotowe do pracy z PyPiłą. Powodzenia!

Podstawowe komendy bashowe

Komenda Działanie
pwd Pokazuje bezwzględną ścieżkę do obecnego katalogu
ls Pokazuje zawartość obecnego katalogu
ls -al Pokazuje zawartość obecnego katalogu wraz z ukrytymi plikami
cd dir Przechodzi do katalogu dir
cd .. Przechodzi do katalogu wyżej
cd Przechodzi do domyślnego katalogu home
mkdir dir Tworzy nowy folder
touch file Tworzy nowy plik
cat file Wyświetla zawartość pliku
cp file1 file2 kopiuje file1 do file2
mv file1 file2 przenosi file1 do file2
rm file Usuwa plik
rm -d dir Usuwa katalog

Przykład wykorzystania:

$ pwd
/home/exo/pdev/pypila/tutorial
$ ls                                                                                                                                    
test_dir  test.txt
$ ls -al                                                                                                                                  
.hidden_file  test_dir  test.txt
$ cd test_dir/
$ pwd
/home/exo/pdev/pypila/tutorial/test_dir 
$ ls

$ touch new_file.txt
$ mkdir new_dir
$ ls
new_dir  new_file.txt
$ cd ..
$ pwd
/home/exo/pdev/pypila/tutorial
$ cat test.txt 
Suspendisse feugiat. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Etiam iaculis nunc ac metus.
$ cp test.txt new_test.txt
$ ls
new_test.txt  test_dir  test.txt
$ cat new_test.txt 
Suspendisse feugiat. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Etiam iaculis nunc ac metus.
$ mv new_test.txt test_dir/new_test.txt 
$ ls
test_dir  test.txt
$ rm test.txt 
$ rm -d test_dir/
$ ls
test.txt

Co się dokładnie stało?

Poleceniem pwd sprawdziliśmy w jakim aktualnie jesteśmy w folderze. ls wyświetlił nam zawartość tego katalogu. Dzięki argumentowi -al jesteśmy w stanie zobaczyć również ukryte pliki (w Linuksie zaczynające się od .). Poleceniem cd test_dir/ przeszliśmy do katalogu test_dir co widać po użyciu ponownie pwd i ls. Poleceniami touch oraz mkdir stworzyliśmy nowy plik oraz folder a cd .. przeniosło nas z powrotem do katalogu tutorial. Poleceniem cat test.txt pokazaliśmy zawartość pliku. Dzięki cp skopiowaliśmy go, dzięki czemu mamy teraz test.txt i new_test.txt a mv przeniosło new_test.txt do katalogu test_dir. Na koniec usuwamy stworzone wcześniej pliki i foldery za pomocą rm.

Git, czyli prosty sposób na zarządzanie zmianami w plikach

Wstępna konfiguracja

Pierwszą rzeczą, którą warto wykonać po instalacji Git jest konfiguracja własnej nazwy użytkownika oraz adresu e-mail. Jest to ważne, ponieważ każda operacja zatwierdzenia w Git korzysta z tych informacji, które stają się integralną częścią zatwierdzeń przesyłanych i pobieranych później do i z serwera danych:

$ git config --global user.name "Imię Nazwisko"
$ git config --global user.email adres@email.pl

Uzyskiwanie pomocy

Jeśli kiedykolwiek będziesz potrzebować pomocy podczas pracy z Git, istnieją trzy sposoby wyświetlenia strony podręcznika dla każdego z poleceń Git:

$ git help <polecenie>
$ git <polecenie> --help
$ man git-<polecenie>

Na zajęciach są również nasi pomocni wykładowcy ;)

Podstawy obsługi Gita

Projekt Gita możesz rozpocząć na dwa różne sposoby. Pierwsza metoda polega na sklonowaniu istniejącego już repozytorium. Druga metoda polega na utworzeniu nowego repozytorium Git.

Klonowanie repozytorium

Po podaniu niezbędnych informacji z działu Wstępna konfiguracja możesz uzyskać kopię istniejącego już repozytorium Gita — na przykład projektu, w którym chciałbyś zacząć się udzielać i wprowadzać własne zmiany. Do sklonowania repozytorium używa się komendy git clone link_do_repozytorium. W folderze w którym aktualnie się znajdujesz zostanie utworzony nowy folder z repozytorium.

Przykład wykorzystania:

$ pwd
/home/exo/pdev/pypila/tutorial
$ ls
test.txt
$ git clone https://github.com/revolunet/PythonBooks.git
Cloning into 'PythonBooks'...
remote: Counting objects: 528, done.
remote: Total 528 (delta 0), reused 0 (delta 0), pack-reused 528
Receiving objects: 100% (528/528), 3.72 MiB | 1.16 MiB/s, done.
Resolving deltas: 100% (226/226), done.
Checking connectivity... done.
$ ls
PythonBooks  test.txt
$ cd PythonBooks/
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

Polecenie git clone https://github.com/revolunet/PythonBooks.git utworzyło nowy katalog PythonBooks, następnie wewnątrz niego inicjowany jest podkatalog .git, pobierane są wszystkie dane z repozytorium, a kopia robocza przełączona zostaje na ostatnią wersję. Dzięki tej komendzie mamy lokalną kopię repozytorium revolunet/PythonBooks

Tworzenie nowego repozytorium

Jeśli chcesz rozpocząć śledzenie zmian w plikach istniejącego projektu, musisz przejść do katalogu projektu i wykonać polecenie git init. To polecenie stworzy nowy podkatalog o nazwie .git, zawierający wszystkie niezbędne pliki — szkielet repozytorium Gita.

Aby rozpocząć kontrolę wersji istniejących plików, powinieneś rozpocząć ich śledzenie i utworzyć początkową wersję. Możesz tego dokonać poleceniami z tabeli:

Komenda Działanie
git init Tworzenie nowego szkieletu repozytorium git
git status Status aktualnego repozytorium
git add file Dodaje plik file
git add . Dodaje wszystkie pliki danego katalogu
git commit -m "message" Zatwierdza dodane wcześniej pliki oraz dodaję wiadomość "message"
git log Historia commitów

Przykład wykorzystania:

$ git init
Initialized empty Git repository in /home/exo/pdev/pypila/tutorial/test_git/.git/
$ git status                                                                                                        
On branch master                                                                                                                                                                                                                                                                                                                                                                      
Initial commit                                                                                                                                                                                                                                                                                                                                                          
nothing to commit (create/copy files and use "git add" to track)
$ touch README.md
$ git status                                                                                                      
On branch master                                                                                                                                                                                                                                                                                                                                                         
Initial commit

Untracked files:                                                                                                                                                                             
  (use "git add <file>..." to include in what will be committed)

    README.md

nothing added to commit but untracked files present (use "git add" to track)
$ git add README.md  
$ git commit -m "Initial commit"  # Zatwierdza wcześniej dodane pliki i dodaje je do commita o nazwie "Initial commit"

Co się dokładnie stało?

git init stworzył nowy ukryty folder .git z szkieletem repozytorium. Jak widać dzięki komendzie git status repozytorium istnieje, chociaż tylko lokalnie, oraz nie ma żadnych plików do śledzenia. touch README.md stworzył nowy plik. W git status widać, że git znalazł plik README.md lecz go nie śledzi. By plik zaczął być śledzony należy go dodać poleceniem git add README.md. Na koniec git commit -m "Initial commit" zatwierdza dodane pliki do lokalnego repozytorium jako commit z nazwą "Initial commit".

Dzięki tym komendom masz już własne repozytorium Gita, śledzące wybrane pliki i zawierające pierwsze zatwierdzone zmiany. Jednak twoje repozytorium jest dostępne jedynie lokalnie, wysłaniem go na serwer zajmiemy się później.

Operowanie na branchach

Branch - czyli gałąź. Jedną z najważniejszych funkcji systemu kontroli wersji Git jest wsparcie dla gałęzi. Rozgałęzienie osobnego brancha od głównego (najczęściej master lub dev) pozwala na swobodną pracę na kodzie bez strachu o uszkodzenie głównego kodu.

W tej części zobaczymy jak stworzyć nowy branch, wybrać odpowiedni branch czy w końcu jak połączyć branch z głównym kodem. Na początku te operacje mogą wydać się skomplikowane, na szczęście pozory mylą :)

Git branch

Dzięki poleceniu git status z poprzedniego rozdziału możemy zobaczyć na jakim branchu się znajdujemy. Domyślnie jest to master. Master powinien przechowywać jedynie kod sprawdzony, przetestowany i zatwierdzony. Dlatego właśnie wykonując polecenie git branch nazwa_brancha tworzymy rozgałęzienie pozwalające nam edytować obecny oraz dodawać nowy kod bez strachu o uszkodzenie głównego brancha.

Polecenie git branch stworzyło nową gałąź jednak nadal znajdujemy się na gałęzi master. By przejść na nową gałąź używamy polecenia git checkout nazwa_brancha.

Teraz znajdując się na nowej gałęzi możemy dokonać wszystkich potrzebnych zmian w kodzie. Jak już tego dokonamy komendą git status sprawdzamy listę zmienionych plików. Dodajemy je do commita poleceniami git add oraz git commit z poprzedniego rozdziału.

Gdy wszystkie zmiany na gałęzi są już zatwierdzone możemy wysłać kod na serwer github/gitlab/bitbucket poleceniem git push origin nazwa_brancha. Dzięki czemu po sprawdzeniu kodu przez innych będzie on mógł być połączony z główną gałęzią master.

Vagrant, czyli jak mieć linuksa na windowsie :)

Vagrant pozwala nam stworzyć gotowe środowisko do pracy przy pomocy kilku prostych komend.

Wymagania

Jeśli przygotowujecie środowisko na zajęciach wszystko powinno być już zainstalowane i gotowe. Jeśli chcecie kontynuować naukę w domu gratuluję! Wystarczy wykonać parę prostych kroków by stworzyć takie same środowisko jak na zajęciach.

Dla windows 7/8/8.1/10:

  1. Zainstaluj Virtualbox . Do pobrania z tego linku: https://www.virtualbox.org/wiki/Downloads
  2. Zainstaluj Vagrant. Do pobrania z tego linku: https://www.vagrantup.com/downloads.html
  3. Ściągnij narzędzie Putty, działa bez potrzeby instalacji: http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe
  4. Pobierz ten plik i zapisz go jako Vagrantfile (bez żadnych rozszerzeń) w folderze, gdzie ma znajdować się Twoje środowisko

Dla linuksa:

  1. Zainstaluj Virtualbox . Do pobrania z tego linku: https://www.virtualbox.org/wiki/Downloads
  2. Zainstaluj Vagrant. Do pobrania z tego linku: https://www.vagrantup.com/downloads.html
  3. Pobierz ten plik i zapisz go jako Vagrantfile (bez żadnych rozszerzeń) w folderze, gdzie ma znajdować się Twoje środowisko

Tworzenie środowiska

By stworzyć nowe środowisko otwieramy konsolę systemu windows (CMD). W konsoli musimy przejść do katalogu w którym znajduje się plik Vagrantfile (prawdopodobnie pulpit). Będąc w tym katalogu używamy komendy vagrant up która ściąga odpowiedni obraz linuksa oraz instaluje wszystko, co będzie nam potrzebne na zajęciach.

Gdy już pojawi się informacja ==> default: Successfully installed argparse-1.4.0 pbr-1.8.1 six-1.10.0 stevedore-1.9.0 virtualenv-clone-0.2.6 virtualenvwrapper-4.7.1 powinniśmy zobaczyć w katalogu dodatkowy folder development. Folder ten jest dynamiczne linkowany do wirtualnej maszyny z środowiskiem linuksowym. W tym folderze trzymamy wszystkie pliki na których pracujemy. Dzięki linkowaniu będziemy mogli operować na tych plikach również na linuksie.

Logowanie do linuksa

Gdy vagrant up skończy swoją pracę możemy się zalogować do wirtualnej maszyny. Aby to zrobić otwieramy program putty. W tym programie wpisujemy 127.0.0.1 oraz 2222 i klikamy przycisk połącz. Otworzy się nam znany i lubiany linuksowy bash.

Dla linuksa: Użytkownicy linuksa mają łatwiej. Nie potrzebne jest narzędzie putty. Po skończonym vagrant up należy wpisać vagrant ssh by połączyć się z naszą wirtualną maszyną.

Kończenie pracy

Na koniec zajęć pamiętaj o wysłaniu zmian za pomocą gita. Na sam koniec z poziomu CMD w folderze z plikiem Vagrantfile użyć komendy vagrant halt która usypia maszynę wirtualną.

W razie jakichkolwiek pytań, wątpliwości i problemów piszcie na adres patryk.szymanski@stxnext.pl lub pypila@stxnext.pl.

Comments