On Github gajdaw / ldi-2015-git-vagrant
Włodzimierz Gajda http://gajdaw.pl
Lubelskie Dni Informatyki 2015Włodzimierz Gajda, http://gajdaw.pl
Klienci:
Od 2013 roku piszę dla APress
Dla tych, którzy nie znają tych narzędzi moje wystąpienie może służyć jako zachęta.
Dla tych, którzy znają te narzędzia referat może służyć jako przegląd.
W trakcie referatu postaram się wskazać pułapki, któregit i vagrant zastawiają na nowicjuszy.
Podpowiem jak je omijać.
Przedstawię Vagrant-a w akcji.
Temu będzie służyła prezentacja: cztery frameworki w cztery minuty.
Opowiem o tym, jak GitHub zmienił mój sposób prowadzenia zajęć i szkoleń.
NARZĘDZIA, KTÓRE ZMIENIŁY SPOSÓB PRACY
NIE TYLKO DEVELOPERÓW
SERWIS, KTÓRY ZMIENIŁ SPOSÓB PRACY
NIE TYLKO DEVELOPERÓW
Lokalność === efektywność (bez transferu)
Lokalność === niezależność (nie muszę się łączyć)
Operacje lokalne:
Git to DVCS. Nie zawiera bugtrackera, raportów, ani innych narzędzi. Dlatego trudno go porównywać do np. MS Team Foundation Server. Pod względem VCS: git bije MS TFS o kilka klas.
https://github.com/git/git/commit/e83c5
Data: Thu Apr 7 15:13:13 2005 -0700
https://github.com/torvalds/linux/commit/1da177e
Data: Sat Apr 16 15:20:36 2005 -0700
Na przykład komenda git reset
HEAD index katalogroboczy --soft TAK --mixed TAK TAK --hard TAK TAK TAKCzy zawiera katalog roboczy?
# tworzenie repozytoriów bare $ git init --bare $ git clone --bare
Czy zmodyfikowano pliki?
$ git status $ git status -s $ git status -sb
Czy znajdujemy się w gałęzi czy poza gałęzią?
# schodzimy z gałęzi $ git checkout [SHA-1] # wracamy do gałęzi $ git checkout master # czy jesteśmy w gałęzi? $ git status -sb $ git branch
Czy bieżąca gałąź jest zsynchronizowana z gałęzią śledzącą?
W pewnym uproszczeniu można to interpretować jako:
$ git status -sb ## master...origin/master [ahead 3, behind 10]
Komendy gita możemy omawiaćpod względem ich wpływu na całe repo.
Jak dana komenda modyfikuje graf rewizji?
Gałąź to wksaźnik do rewizji.
Komendy gita możemy charakteryzowaćich wpływem na gałęzie.
Komendy gita możemy omawiaćodwołując się do stanów plików.
# zmiana stanu ?? w stan A_ $ git add -- [filename]
# zmiana stanu D_ w stan _D $ git reset -- [filename] # przywracanie pliku _D $ git checkout -- [filename]
#konwersja stanu M_ w stan _M $ git reset -- [filename]
Git to baza danych adresowana treścią. Dokładniej: skrótem SHA-1 treści.
Baza danych znajduje się w folderze .git/objects
# zapisywanie danych w bazie $ git hash-object #wyświetlanie danych z bazy $ git cat-file # wyszukiwanie obiektów (każdy obiekt to jeden plik) $ find
$ git init content-addresable-database $ find .git/objects –type f $ echo 'Ala ma kota' | git hash-object -w --stdin 84321884cdb0ca2d5ec012c2139ca1bf98ae5be6 $ git cat-file -p 8432 $ echo 'Kot ma Ale' > plik.txt $ git hash-object –w plik.txt
Obiekty zapisywane w bazie danych:
# wyświetlanie typu obiektu $ git cat-file –t [SHA-1] # wyświetlanie treści obiektu $ git cat-file –p [SHA-1]
# tworzymy komit $ git init $ echo Lorem > lorem.txt $ git add –A $ git commit –m Pierwsza # sprawdzamy obiekty $ find .git/objects –type f $ git cat-file –t [SHA-1] $ git cat-file –p [SHA-1]
Loose object format – każdy obiekt zapisany w osobnym pliku w folderze .git/objects
Packed object format – objekty zgrupowane i spakowane w folderze .git/objects/packs
W formacie spakowanym zapisujemy ostatnią postać pliku i różnice wsteczne. W ten sposób obszar zajmowany przez repozytorium jest minimalizowany.
Uruchomienie na komputerze developera/studenta systemu wirtualnego.
Z punktu widzenia trenera:
absolutnie nieprawdopodobne możliwości
https://github.com/pro-vagrant/songs-app-angularjshttps://github.com/pro-vagrant/songs-app-djangohttps://github.com/pro-vagrant/songs-app-railshttps://github.com/pro-vagrant/songs-app-symfony
git clone https://github.com/pro-vagrant/songs-app-angularjs.git cd songs-app-angularjs vagrant up
git clone https://github.com/pro-vagrant/songs-app-django.git cd songs-app-angularjs vagrant up
git clone https://github.com/pro-vagrant/songs-app-rails.git cd songs-app-angularjs vagrant up
git clone https://github.com/pro-vagrant/songs-app-symfony.git cd songs-app-angularjs vagrant up
SCM - software configuration management
Vagrant to nakładka na środowiska wirtualizacyjne takie jak VirtualBox-a, VMware, Docker, itd.
Komendy Vagrant-a:
vagrant up vagrant status vagrant destroy vagrant halt vagrant suspend vagrant reload vagrant provision vagrant box add vagrant box remove vagrant box update
Vagrant.configure(2) do |config| config.vm.box = "rails-v0.5.5" config.vm.box_url = "http://boxes.gajdaw.pl/rails/rails-v0.5.5.box" config.vm.network :forwarded_port, guest: 3000, host: 3000 end
Osadzenie konfiguracji boxa w aplikacji
(bez oddzielnego repo na box)
Osadzenie submodułów w boxie
(bez oddzielnego repo na moduły)
https://github.com/pro-vagrant/vagrant-box-factory-apache-antipattern
Projekty: aplikacja, box, moduły
https://github.com/pro-vagrant/songs-app-rails
Student Developer Pack
Aplikcaja OpenSource o funkcjonalności zbliżonej do GitHub-a.
Uruchomienie GitLab-a: Droplet DigitalOcean
GIT - to trzeba umieć
GITHUB - to trzeba umieć
VAGRANT - to trzeba spróbować
PUPPET | CHEF | ANSIBLE - to trzeba spróbować
DIGITAL OCEAN DROPLET | GITLABto trzeba spróbować
Prezentacja jest dostępna na:
https://github.com/gajdaw/ldi-2015-git-vagrant http://gajdaw.github.io/ldi-2015-git-vagrant/