SlideShare una empresa de Scribd logo
1 de 48
Descargar para leer sin conexión
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
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 :)
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
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)
Codzienność ?? :)
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
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..
git vs svn, a rynek pracy
Localne
source : http://git-scm.com/book/en/v2/Getting-Started-About-Version-Control
Lokalne – łatwo pomylić
katalogi i zmodyfikować
niewłaściwą wersją lub
pojedynczy plik. Podejście
bardzo prymitywne i mało
odporne na błędy,właściwie
brak możliwości pracy
grupowej.
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.
Rozproszone
source : http://git-scm.com/book/en/v2/Getting-Started-About-Version-Control
Rozproszone – kopiowane jest
lokalnie całe repozytorium.
Możliwość swobodnego
przełączania między zdalnymi
repozytoriami. Łatwe
odzyskiwanie danych po awarii.
Szybkość pracy, komitujemy na
lokalne repozytorium, a zmiany
możemy wypchnąć na zdalne
w dowolnym momencie, np. po
skończeniu jakieś
funkcjonalności
Source :techidiocy.com
Source : www.vitaliypodoba.com
Instalacja i narzędzia
sudo apt-get install gedit-plugins → gedit plugins
gitk
eGit
meld
find
wc
powłoka : fish
git –version
find . -name .git -type d -exec rm -fr {} /:
cherry-pick
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>
Tworzenie synonimów
git config –global alias.logp 'log –graph –abbrev-commit –pretty=oneline'
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
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
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
Github Quick setup
https://github.com/przodownikR1/testr2.git
echo "# testr2" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/przodownikR1/testr2.git
git push -u origin master
…or push an existing repository from the command line
git remote add origin https://github.com/przodownikR1/testr2.git
git push -u origin master
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
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
Git mv
mv fileOne fileTwo
git rm fileOne + git add fileTwo
==
git mv fileOne fileTwo
Git mv
mv fileOne fileTwo
git rm fileOne + git add fileTwo
==
git mv fileOne fileTwo
File status lifecycle
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)
Source : http://tex.stackexchange.com/questions/70320/workflow-diagram
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
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
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
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
Przykład : logs
--since 'yyyy-mm-dd' '| --until | --author | -n
--abbrev-commit - skrócenie SHA
--abbrev=4 - skrócenie SHA
przodownik ~/w/spring-boot (master| )$ find . -type f -print | grep -v '/.git/' | wc✔
-l
=> 2472
przodownik ~/w/spring-boot (master| )$ git log --pretty=oneline --author Rob |✔
wc -l
=> 14
przodownik ~/w/spring-boot (master| )$ git log --pretty=oneline | wc -l✔
=> 4425
git log --since=2.weeks
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]
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
Kompresja
git archive --format=zip --output={fileName} SHA
Wygenerowanie skompresowanego archiwum
odpowiadającego danej rewizji. Zamiast rewizji SHA można
użyć znaczników.
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
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
Git push
Wypychanie zmian do zdalnego repozytorium
git push -u origin master
przodownik ~/b/university_training (step13_templates| )$ git branch step14_git✔
przodownik ~/b/university_training (step13_templates| )$ git checkout step14_git✔
Switched to branch 'step14_git'
przodownik ~/b/university_training (step14_git| )$✔ git push origin step14_git
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/przodownikR1/university_training.git
* [new branch] step14_git -> step14_git
przodownik ~/b/university_training (step14_git| )$✔
Git pull, fetch
Pobiera zmian ze zdalnego repo
git pull {repo_name} {branch_name}
git fetch {repo_name} – pobiera zmiany ze zdalnego
brancha
Git merge
git merge {branchName} – przeniesienie zmian z gałęzi branchName do bieżącej
przodownik /t/gitRepo (master| )$✔ git merge hotfix
Updating 5c8bc03..cde1827
Fast-forward
1.java | 1 +
hot.java | 1 +
main.java | 1 +
3 files changed, 3 insertions(+)
create mode 100644 1.java
create mode 100644 hot.java
przodownik /t/gitRepo (master| )$✔ git prettyAll
* cde1827 (HEAD, master, hotfix) a hotfix
| * c4452d1 (feature) a added
| * 3ca2549 a feature
|/
* 5c8bc03 a
przodownik /t/gitRepo (master| )$✔ git branch -d hotfix
Deleted branch hotfix (was cde1827).
przodownik /t/gitRepo (master| )$✔ git prettyAll
in 0.1 seconds automatically...
* cde1827 (HEAD, master) a hotfix
| * c4452d1 (feature) a added
| * 3ca2549 a feature
|/
* 5c8bc03 a
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
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.
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
Merge/Rebase source: http://git-scm.com/book/pl/v1/Ga%C5%82%C4%99zie-Gita-Zmiana-bazy
-merge
Git revert
git revert –no-edit {rev} – usunięcie zmian wprowadzonych przez daną
rewizje.
--no-edit = domyślny komentarz 'Revert …'
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
Git apply - łaty
git apply /home/przodownik/main.java.patch – wczytywanie łaty
(współpracuje z git diff, zasada : 'zaakceptuj lub odrzuć wszystko')
Koniec :)
Dziękuje za uwagę :)

Más contenido relacionado

La actualidad más candente

Porażka nie wchodzi w grę, czyli o niezawodności
Porażka nie wchodzi w grę, czyli o niezawodnościPorażka nie wchodzi w grę, czyli o niezawodności
Porażka nie wchodzi w grę, czyli o niezawodnościKamil Grabowski
 
CI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieCI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieGrzegorz Godlewski
 
Testy wydajnościowe - najlepsze praktyki - Kuba Gajda
Testy wydajnościowe - najlepsze praktyki - Kuba GajdaTesty wydajnościowe - najlepsze praktyki - Kuba Gajda
Testy wydajnościowe - najlepsze praktyki - Kuba GajdaBartłomiej Cymanowski
 
Automation of functional tests using JMeter (in Polish)
Automation of functional tests using JMeter (in Polish)Automation of functional tests using JMeter (in Polish)
Automation of functional tests using JMeter (in Polish)Tieto Corporation
 
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014Grzegorz Bartman
 
Docker praktyczne podstawy
Docker  praktyczne podstawyDocker  praktyczne podstawy
Docker praktyczne podstawySages
 
Od codziennej higieny do strategicznej refaktoryzacji
Od codziennej higieny do strategicznej refaktoryzacjiOd codziennej higieny do strategicznej refaktoryzacji
Od codziennej higieny do strategicznej refaktoryzacjiMichał Bartyzel
 
Analiza wydajności następnej generacji - przykłady.
Analiza wydajności następnej generacji - przykłady.Analiza wydajności następnej generacji - przykłady.
Analiza wydajności następnej generacji - przykłady.Future Processing
 
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatu
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatuBazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatu
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatuGrzegorz Bartman
 
KraQA #22, Filip Cynarski - Selenium Grid w chmurze Amazon Web Services
KraQA #22, Filip Cynarski -  Selenium Grid w chmurze Amazon Web ServicesKraQA #22, Filip Cynarski -  Selenium Grid w chmurze Amazon Web Services
KraQA #22, Filip Cynarski - Selenium Grid w chmurze Amazon Web Serviceskraqa
 
DrupalDay Podstawy Drupal 8
DrupalDay Podstawy Drupal 8DrupalDay Podstawy Drupal 8
DrupalDay Podstawy Drupal 8Grzegorz Bartman
 

La actualidad más candente (11)

Porażka nie wchodzi w grę, czyli o niezawodności
Porażka nie wchodzi w grę, czyli o niezawodnościPorażka nie wchodzi w grę, czyli o niezawodności
Porażka nie wchodzi w grę, czyli o niezawodności
 
CI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieCI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecie
 
Testy wydajnościowe - najlepsze praktyki - Kuba Gajda
Testy wydajnościowe - najlepsze praktyki - Kuba GajdaTesty wydajnościowe - najlepsze praktyki - Kuba Gajda
Testy wydajnościowe - najlepsze praktyki - Kuba Gajda
 
Automation of functional tests using JMeter (in Polish)
Automation of functional tests using JMeter (in Polish)Automation of functional tests using JMeter (in Polish)
Automation of functional tests using JMeter (in Polish)
 
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
 
Docker praktyczne podstawy
Docker  praktyczne podstawyDocker  praktyczne podstawy
Docker praktyczne podstawy
 
Od codziennej higieny do strategicznej refaktoryzacji
Od codziennej higieny do strategicznej refaktoryzacjiOd codziennej higieny do strategicznej refaktoryzacji
Od codziennej higieny do strategicznej refaktoryzacji
 
Analiza wydajności następnej generacji - przykłady.
Analiza wydajności następnej generacji - przykłady.Analiza wydajności następnej generacji - przykłady.
Analiza wydajności następnej generacji - przykłady.
 
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatu
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatuBazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatu
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatu
 
KraQA #22, Filip Cynarski - Selenium Grid w chmurze Amazon Web Services
KraQA #22, Filip Cynarski -  Selenium Grid w chmurze Amazon Web ServicesKraQA #22, Filip Cynarski -  Selenium Grid w chmurze Amazon Web Services
KraQA #22, Filip Cynarski - Selenium Grid w chmurze Amazon Web Services
 
DrupalDay Podstawy Drupal 8
DrupalDay Podstawy Drupal 8DrupalDay Podstawy Drupal 8
DrupalDay Podstawy Drupal 8
 

Similar a University day 2

Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITaWersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITamarekmisztal
 
Poznaj GITa - Natalia Stanko
Poznaj GITa - Natalia StankoPoznaj GITa - Natalia Stanko
Poznaj GITa - Natalia StankoNatalia Stanko
 
Git -- rozproszony system kontroli wersji
Git -- rozproszony system kontroli wersjiGit -- rozproszony system kontroli wersji
Git -- rozproszony system kontroli wersjiPiotr Macuk
 
Git - rozproszony system kontroli wersji
Git - rozproszony system kontroli wersjiGit - rozproszony system kontroli wersji
Git - rozproszony system kontroli wersjiPHPCon Poland
 
Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14
Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14
Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14Sagittario
 
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future ProcessingPROIDEA
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JSDawid Rusnak
 
OSGi, deklaratywnie
OSGi, deklaratywnieOSGi, deklaratywnie
OSGi, deklaratywnieCode-House
 
ansible kmonticolo bezlogo
ansible kmonticolo bezlogoansible kmonticolo bezlogo
ansible kmonticolo bezlogoKamil Monticolo
 
Drupal Features - Agnieszka Piłasiewicz
Drupal Features - Agnieszka PiłasiewiczDrupal Features - Agnieszka Piłasiewicz
Drupal Features - Agnieszka PiłasiewiczGrzegorz Bartman
 
Git nie dla początkujących
Git nie dla początkującychGit nie dla początkujących
Git nie dla początkującychTomek Borek
 
Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework DjangoZastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework DjangoDominik Szopa
 

Similar a University day 2 (20)

Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITaWersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
 
Poznaj GITa - Natalia Stanko
Poznaj GITa - Natalia StankoPoznaj GITa - Natalia Stanko
Poznaj GITa - Natalia Stanko
 
Poznaj GITa - Natalia Stanko
Poznaj GITa - Natalia StankoPoznaj GITa - Natalia Stanko
Poznaj GITa - Natalia Stanko
 
Git -- rozproszony system kontroli wersji
Git -- rozproszony system kontroli wersjiGit -- rozproszony system kontroli wersji
Git -- rozproszony system kontroli wersji
 
Git - rozproszony system kontroli wersji
Git - rozproszony system kontroli wersjiGit - rozproszony system kontroli wersji
Git - rozproszony system kontroli wersji
 
GIT
GITGIT
GIT
 
GIT
GITGIT
GIT
 
Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14
Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14
Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
PyLadies #4
PyLadies #4PyLadies #4
PyLadies #4
 
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
 
test
testtest
test
 
OSGi, deklaratywnie
OSGi, deklaratywnieOSGi, deklaratywnie
OSGi, deklaratywnie
 
ansible kmonticolo bezlogo
ansible kmonticolo bezlogoansible kmonticolo bezlogo
ansible kmonticolo bezlogo
 
Drupal Features - Agnieszka Piłasiewicz
Drupal Features - Agnieszka PiłasiewiczDrupal Features - Agnieszka Piłasiewicz
Drupal Features - Agnieszka Piłasiewicz
 
Git nie dla początkujących
Git nie dla początkującychGit nie dla początkujących
Git nie dla początkujących
 
Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework DjangoZastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django
 
Ansible w praktyce
Ansible w praktyceAnsible w praktyce
Ansible w praktyce
 
Mongodb with Rails
Mongodb with RailsMongodb with Rails
Mongodb with Rails
 

University day 2

  • 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..
  • 8. git vs svn, a rynek pracy
  • 9. Localne source : http://git-scm.com/book/en/v2/Getting-Started-About-Version-Control Lokalne – łatwo pomylić katalogi i zmodyfikować niewłaściwą wersją lub pojedynczy plik. Podejście bardzo prymitywne i mało odporne na błędy,właściwie brak możliwości pracy grupowej.
  • 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.
  • 11. Rozproszone source : http://git-scm.com/book/en/v2/Getting-Started-About-Version-Control Rozproszone – kopiowane jest lokalnie całe repozytorium. Możliwość swobodnego przełączania między zdalnymi repozytoriami. Łatwe odzyskiwanie danych po awarii. Szybkość pracy, komitujemy na lokalne repozytorium, a zmiany możemy wypchnąć na zdalne w dowolnym momencie, np. po skończeniu jakieś funkcjonalności
  • 14. Instalacja i narzędzia sudo apt-get install gedit-plugins → gedit plugins gitk eGit meld find wc powłoka : fish git –version find . -name .git -type d -exec rm -fr {} /: cherry-pick
  • 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>
  • 16. Tworzenie synonimów git config –global alias.logp 'log –graph –abbrev-commit –pretty=oneline'
  • 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
  • 20. Github Quick setup https://github.com/przodownikR1/testr2.git echo "# testr2" >> README.md git init git add README.md git commit -m "first commit" git remote add origin https://github.com/przodownikR1/testr2.git git push -u origin master …or push an existing repository from the command line git remote add origin https://github.com/przodownikR1/testr2.git git push -u origin master
  • 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
  • 23. Git mv mv fileOne fileTwo git rm fileOne + git add fileTwo == git mv fileOne fileTwo
  • 24. Git mv mv fileOne fileTwo git rm fileOne + git add fileTwo == git mv fileOne fileTwo
  • 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
  • 32. Przykład : logs --since 'yyyy-mm-dd' '| --until | --author | -n --abbrev-commit - skrócenie SHA --abbrev=4 - skrócenie SHA przodownik ~/w/spring-boot (master| )$ find . -type f -print | grep -v '/.git/' | wc✔ -l => 2472 przodownik ~/w/spring-boot (master| )$ git log --pretty=oneline --author Rob |✔ wc -l => 14 przodownik ~/w/spring-boot (master| )$ git log --pretty=oneline | wc -l✔ => 4425 git log --since=2.weeks
  • 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
  • 38. Git push Wypychanie zmian do zdalnego repozytorium git push -u origin master przodownik ~/b/university_training (step13_templates| )$ git branch step14_git✔ przodownik ~/b/university_training (step13_templates| )$ git checkout step14_git✔ Switched to branch 'step14_git' przodownik ~/b/university_training (step14_git| )$✔ git push origin step14_git Total 0 (delta 0), reused 0 (delta 0) To https://github.com/przodownikR1/university_training.git * [new branch] step14_git -> step14_git przodownik ~/b/university_training (step14_git| )$✔
  • 39. Git pull, fetch Pobiera zmian ze zdalnego repo git pull {repo_name} {branch_name} git fetch {repo_name} – pobiera zmiany ze zdalnego brancha
  • 40. Git merge git merge {branchName} – przeniesienie zmian z gałęzi branchName do bieżącej przodownik /t/gitRepo (master| )$✔ git merge hotfix Updating 5c8bc03..cde1827 Fast-forward 1.java | 1 + hot.java | 1 + main.java | 1 + 3 files changed, 3 insertions(+) create mode 100644 1.java create mode 100644 hot.java przodownik /t/gitRepo (master| )$✔ git prettyAll * cde1827 (HEAD, master, hotfix) a hotfix | * c4452d1 (feature) a added | * 3ca2549 a feature |/ * 5c8bc03 a przodownik /t/gitRepo (master| )$✔ git branch -d hotfix Deleted branch hotfix (was cde1827). przodownik /t/gitRepo (master| )$✔ git prettyAll in 0.1 seconds automatically... * cde1827 (HEAD, master) a hotfix | * c4452d1 (feature) a added | * 3ca2549 a feature |/ * 5c8bc03 a
  • 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
  • 47. Git apply - łaty git apply /home/przodownik/main.java.patch – wczytywanie łaty (współpracuje z git diff, zasada : 'zaakceptuj lub odrzuć wszystko')