1. Who am I ?
Name : Sławek Borowiec
Solution Architect & java frameworks trainer
Since 2005 – until now
@przodownikR1
Blog: http://przewidywalna-java.blogspot.com
Hobby : Sport bikes & boxing & software
engineering
2. Week 2 : next stage : IDE + GIT
- jak skutecznie wykorzystać swoje IDE → czyli Twoje IDE.
- IDE, a narzędzia refaktoryzacyjne, szablony, optymalne ustawienia,
automatyzacja.
- jak dobrać optymalny system kontroli wersji dla potrzeb projektu
- instalacja, konfiguracja i praca z Git
- ciągłe odnośniki oraz przypomnienie materiału z poprzedniego tygodnia.
- jak zapewnić sobie bezpieczną i komfortową pracę na starcie wytwarzania,
jak dotrwać do jego końca i na dodatek zachować zdrowie :)
3. Twoje IDE – maksymalne wykorzystanie przez dewelopera
podpowiedzi (warnings,składnia,wydajność)
auto-uzupełnianie
skróty
pluginy
optymalizacja działania (uzyskiwanie pożądanej wydajności)
generacja kodu
testowanie
łatwa integracja z systemami kontroli wersji
debugowanie
refaktoring
4. Eclipse
Tuning VM → eclipse.ini | sts.ini
Odpowiednie kodowanie
Automatyczny zapis przed budowaniem
Filtrowanie typów (Type Filters)
Minimalizacja importów (Organize imports on save)
Aktualizacja do najnowszej javy i wersji IDE
Odchudzanie : startup & validation
Wyłącznie sprawdzania pisowni
Zamykanie niepotrzebnych projektów
Wyłączenie auto-walidacji i auto-budowania projektu
Wyłączenie niepotrzebnych deklaracji etykiet (SVN/CVS)
6. Git – content tracking system – Git robi różnicę....
Nadzorowanie treści a nie plików
Wydajność
Solidność
Rozproszenie
Możliwość efektywnego zarządzania wielkimi projektami jak jądro Linuxa (szybkość i wolumen)
Lokalność (praca jest możliwa nawet przy braku dostępu do sieci)
Spójność (SHA-1)
Protokoły :
local (wygoda, zapis i odczyt)
local : → git clone {filepath} | git clone {file:///home/przodownik/..}
Secure Shell (SSH) (bezpieczeństwo,uwieżytelnienie, szyfrowanie, wygoda, zapis i odczyt, dostępny port, brak anonimowego
dostępu)
ssh : → git clone ssh://user@server/myProject.git (pozwala odczyt jak i zapis)
Git (szybkość, brak uwieżytelnienia)
HTTP (prostota,standard,HTTPS – szyfrowanie,otwarty na firewalls, ~szybkość)
Serwery : GitHub , BitBucket
7. System kontroli wersji
source: http://programmers.stackexchange.com/questions/136079/are-there-any-statistics-that-show-the-popularity-of-git-versus-svn
Śledzenie zmian w kodzie
~Praca grupowa
Przechowujemy :
source code, properties, tests,
niektóre binaria
Nie przechowujemy :
classes, plików tymczasowych,
plików ide, plików zbędnych do
odpalenia projektu itd..
10. Scentralizowane (svn, cvs, etc)
source : http://git-scm.com/book/en/v2/Getting-Started-About-Version-Control
Scentralizowane
– rozwiązuje
problem pracy
grupowej,
możliwość utraty
danych,
w przypadku
awarii serwera
centralnego.
15. Konfiguracja
git config {klucz} {wartość} -> odczyt i modyfikacja zmiennych, które opisują wszystkie funkcjonalności i zachowania git.
Plik : /etc/gitconfig: Widoczny dla wszystkich userów w systemie w odniesieniu do wszystkich lokalnych repozytoriów.
git config –system
Plik : ~/.gitconfig: Widoczny dla konkretnego użytkownika
git config –global
Plik : .git/config w aktualnym repo → odnosi się tylko do niego.
Każdy poziom ma priorytet wyższy niż poziom poprzedni !!
git config --global user.name "Sławomir Borowiec"
git config --global user.email 'przodownikR1@gmail.com'
git config --global core.editor vim
git config --global merge.tool meld
git config –list
git help <polecenie>
17. git.igonore
Ignorowanie plików z przestrzeni roboczej
Korzystanie ze wzorców
nazwa katalogu (/)
nazwa pliku dopasowany literalnie do wzorca
! → negacja dalsze części wzorca
..etc
Gwiazdka (*) dopasowuje zero lub więcej znaków;
[abc] dopasowuje dowolny znak znajdujący się wewnątrz nawiasu kwadratowego (w
tym przypadku a, b lub c);
znak zapytania (?) dopasowuje pojedynczy znak;
nawias kwadratowy zawierający znaki rozdzielone myślnikiem ([0-9]) dopasowuje
dowolny znajdujący się pomiędzy nimi znak (w tym przypadku od 0 do 9).
source : http://git-scm.com/book/pl/v1/Podstawy-Gita-Rejestrowanie-zmian-w-repozytorium
18. Pojęcia
origin – nazwa zdalnego głównego repo
head – wskazuje nasze bieżące miejsce w branch'u
master – nazwa głównego branch'a
repozytorium (archiwum) (repository) – historia zmian (repo) (object store + index) (.git)
obszar roboczy – zbiór plików na których pracujemy
commit – zbiór zmian , które mają być utrwalone → zapisanie zmian w repozytorium
branch – gałąź głównego korzenia mająca na celu np. tworzenie nowej funkcjonalności
tag – traktuj to jako zakładkę poszczególnych rewizji (commit'ów)
index (stage) - zawiera informacje o tym, czego dotyczyć będzie następna operacja commit. (.git)
pull request: - żądanie połączenia Twoich zmian z innym branch'em lub repozytorium
check out - aktualizacja Twojego obszaru roboczego z daną gałęzią , rewizja czy zakładką
merge – połączenie odrębnych gałęzi w jedną całość.
push - wysłanie zmian na zdalne repozytorium
pull- pobranie zmian ze zdalnego repozytorium
19. Git Tworzenie repo
git init – tworzenie nowego → .git
git clone – kopiowanie istniejącego
git clone {url} {new_clone_repo_name}
Surowe – synchronizacja projektów, tylko folder .git bez
obszaru roboczego oraz indeksu. Są to repozytoria
przeznaczone do udostępniania w sieci → git push, git pull
(brak bezpośredniego miejsca na jakiekolwiek zmiany)
git init --bare → git init –bare {path}
git clone --bare
21. Git init, add, commit, status
git add – zmiana stanu pliku z nienadzorowanego
na nadzorowany
git add . == git add -A
git commit -a -m '' - uwzględnij dodane już pliki
podczas dodawania do repo (git add . | git commit)
git status == git ls-files -s
git commit –ammend {filename} – wymuszenie
dodania pliku do rewizji
22. Git rm
git rm odwrotność git add
git rm –cached {filename} – usuwa plik z
indeksu ale pozostawia do w przestrzeni
roboczej
git rm {filename} – usuwa plik z indeksu i
przestrzeni roboczej
git rm -f {filename} – usunięcie bez względu
na inne czynniki
26. Stany pliku
Zatwierdzony - oznacza, że dane zostały bezpiecznie zachowane w Twojej lokalnej bazie danych.
Zmodyfikowany - oznacza, że plik został zmieniony, ale zmiany nie zostały wprowadzone do bazy
danych.
Śledzony, nadzorowany (tracked)- oznacza, że zmodyfikowany plik został przeznaczony do
zatwierdzenia w bieżącej postaci w następnej operacji commit. (git add {someFile})
Plik aktualny (unmodified file) – możliwy jest do zawsze możliwy do odzyskania (checkout) (obecny
w repo git add + git commit). Nie można go zaindeksować.
Plik zmodyfikowany (modified file) – to plik posiadający różnice pomiędzy wersją w repo , a obszarem
roboczym
Plik nieśledzony, nienadzorowany (untrucked file) – to nowo utworzony plik w obszarze roboczym
nie będący częścią żadnej rewizji (repo czy indeksie)
Plik zaindeksowany (staged file) – objęty operacją commit
Plik niezaindeksowany (unstaged file) – zmodyfikowany plik, który nie został zaindeksowany (nie
występujący w bazie index)
Plik pomijany (ignored file) – niewidoczny dla archiwum (.gitignore)
28. Git branch
Pozwala na pracę rozwojową prowadzoną w jakimś konkretnym celu
np. dodaniu nowej funkcjonalności lub poprawie błędów
Branch = zadanie !!
git branch {branch_name} – tworzenie
git branch – lista lokalnych branch'y (-v | -r | -a )
git branch -d {branch_name} – skasowanie branch'a
git show-branch – bardziej dokładny niż git branch (chronologicznie)
git checkout -b {branch_name}
git branch –merged –no-merged -wyświetlenia gałęzi, które już
zostały lub jeszcze nie zostały scalone do aktywnej gałęzi
29. Git : reset, checkout
Przywracanie obszaru roboczego do stanu z wybranej rewizji
git reset –hard {rev} – późniejsze rewizje są usuwane z historii !
git checkout -f {rev} – repo znajduje się w stanie detached
git checkout -f {rev} {filename} – odzyskanie pliku z danej rewizji
git chechout – {filename} - cofanie zmian w zmodyfikowanym pliku
30. Logs
git log -p -5 → pokazuje różnice wprowadzone z każdą rewizją
Opcje :
- short
- full
- fuller
git log --pretty=oneline
git log --pretty=format:"%h - %an, %ar : %s"
Opis :
%h Skrócona suma kontrolna zmiany
%an Nazwisko autora
%ae Adres e-mail autora
%ad Data autora
%ar Względna data autora
%cn Nazwisko zatwierdzającego zmiany
%ce Adres e-mail zatwierdzającego zmiany
%cd Data zatwierdzającego zmiany
%cr Data zatwierdzającego zmiany, względna
%s Temat
31. Przykład : logs
przodownik~/w/spring-boot (master| )$ git log --pretty=format:"%h - %an, %ar : %s" --author Rob✔
15:51
● 7ecbbc1 - Rob Winch, 7 weeks ago : Merge branch '1.2.x'
● 493d7a3 - Rob Winch, 7 weeks ago : Merge branch '1.1.x' into 1.2.x
● 760d6ec - Rob Winch, 7 weeks ago : Fix Unnecessarily Adding Default Security User
● f9816ea - Rob Winch, 2 months ago : Fix configureGlobal on SpringBootApplication
● e42fa79 - Rob Winch, 2 months ago : Fix fragile AuthenticationManagerConfiguration
● adb2205 - Rob Winch, 11 months ago : Make SpringBootPlugin more Groovy
● 52382f9 - Rob Winch, 11 months ago : Default Compile tasks to use UTF-8 encoding
● ae7098a - Rob Winch, 1 year, 1 month ago : Add RepositoryRestMvcAutoConfiguration
● f852096 - Rob Winch, 1 year, 1 month ago : Security Documentation Cleanup
● 6b0eba3 - Rob Winch, 1 year, 2 months ago : Update to Spring Security 3.2.1
● 6c5701b - Rob Winch, 1 year, 3 months ago : Use @Autowired AuthenticationManagerBuilder
● 77b5ad1 - Rob Winch, 1 year, 6 months ago : Update to Spring Security Snapshot
● f40758c - Rob Winch, 1 year, 8 months ago : Update README link text to be M1
● 3662a8b - Rob Winch, 1 year, 9 months ago : Fix README Quick Start Java Example
33. Tags
opisane (annotated tags)
- dane o autorze
- datę utworzenia
- komentarz
- SHA rewizji
lekkie (lightweight tags) → (.git/refs/tags)
- tylko SHA rewizji
Git push nie przesyła etykiet do zdalnego repozytorium !
git push origin [tag_name]
34. Tags
git tag -a {nazwa} -m {komentarz} → (opisowy)
Znacznik musi być unikalny
git tag {nazwa} → (lekki)
git tag -d {nazwa} – usuwanie znacznika
git tag – listuje znaczniki
git log --tags --simplify-by-decoration
--pretty="format :%ai %d %an %s" | sort
git describe – lista dostępnych znaczników opisanych
git show -s {tagName} – wyświetlenie szczegółów
35. Kompresja
git archive --format=zip --output={fileName} SHA
Wygenerowanie skompresowanego archiwum
odpowiadającego danej rewizji. Zamiast rewizji SHA można
użyć znaczników.
36. Git stash
Traktuj stash jako schowek czy skrytkę.
git stash list
git stash – dodanie do skrytki
git stash pop – z usunięciem ze stosu
git stash apply – bez usunięcia ze stosu
git stash drop – usunięcie ze skrytki
37. Git remote
Sprawdzanie zdalnych repozytoriów i tworzenie połączenia z nimi.
git remote | remote -v
git remote add origin {url}
git remote origin
remote show [remote_repo]
git remote rename {old_name} {new_name}
git push [remote_repo] :[branch] – usuwanie zdalnej gałęzi
git push origin –delete [remote_branch] – odpowiednik powyższego
41. Merge example - continue
przodownik /t/gitRepo (feature| )$✔ git merge master
Auto-merging main.java
CONFLICT (content): Merge conflict in main.javaAuto-merging 1.java
CONFLICT (add/add): Merge conflict in 1.java
Automatic merge failed; fix conflicts and then commit the result
przodownik /t/gitRepo (feature|MERGING|●2 1 3)$✖ ✚ git status
On branch feature
You have unmerged paths.
(fix conflicts and run "git commit")
Changes to be committed:new file: hot.java
Unmerged paths:
(use "git add <file>..." to mark resolution)
both added: 1.java
both modified: main.java
przodownik /t/gitRepo (feature|MERGING|●2 1 3)$✖ ✚ git commit -a
[feature 7e57cf1] Merge branch 'master' into feature
przodownik /t/gitRepo (feature| )$ git status✔
On branch feature
nothing to commit, working directory clean
42. Merge → conflicts
<<<<<HEAD - aktualna gałąź w której obecnie się znajdujesz.
<<<<<< ======= >>>>>> - usuwamy
git add .
git commit ..
git mergetool – narzędzie do ułatwniania operacji scalania.
43. Git rebase
Integrowanie zmian z jednej gałęzi do drugiej
jest możliwe dzięki operacji :
- merge -scalanie
- rebase – zmiana bazy
Nie zmieniaj bazy rewizji, które wypchnąłeś już
do publicznego repozytorium !!
git rebase -i {rev} - łączenie rewizji
git rebase -i rev_12
git rebase -i HEAD~3
pick (p) → dana rewizja zostanie zapisana w
historii po zakończeniu operacji
reword (r) → pick + opis
edit (e) → pick + edycja zmian w rewizji
squash (s) → łączy podaną rewizję z
poprzednią
fixup (f) → squash bez modyfikacji komentarza
exec (x) → wiersz polece
45. Git revert
git revert –no-edit {rev} – usunięcie zmian wprowadzonych przez daną
rewizje.
--no-edit = domyślny komentarz 'Revert …'
46. Git diff
Porównujemy pliki, rewizje i całe branch'e
git diff –cached – co z indeksu trafi do repozytorium
git difftool –cached – to co wyżej ale z użyciem
narzędzia do wskazywania różnić np. meld.
git diff – zmiany spoza poczekalni
git diff {branch} {rev} {conrete_file} – pokazuje różnice
względem branch'a, rewizji, pliku lub pakietu
git diff –stat - statystyki