SlideShare uma empresa Scribd logo
1 de 55
GIT
Správa verzí
 Lokální (VCS) – ukládání do adresářů, zip, RCS( MAC OS)
 Centralizované (CVCS) - CVS, Subversion, Perforce
 Distribuované (DVCS) – GIT, Mercurial, Bazaar, Darcs
DVCS
VCS CVCS
GIT - historie
Linus Torvalds, komunita
Linux
1991 – 2002 - archivní soubory
2002 – 2005 - Bit-Keeper (komerční)
2005 – nyní - GIT
- rychlost
- jednoduchý design
- silná podpora nelineárního vývoje (tisíce paralelních větví)
- plná distribuovatelnost
- schopnost efektivně spravovat velké projekty, jako je linuxové jádro (rychlost a objem dat).
GIT - základy
Způsob zpracování dat
 CVS, Subversion,
Perforce, Bazaar
 GIT
GIT - základy
 Téměř každá operace je lokální
 Každá oprace má svůj identifikátor SHA-1 hash
4b9da6552252987aa493b52f8696cd6d3b00373
 Tři stavy
GIT - nastavení
 Totožnost uživatele
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
 Nastavení editoru
$ git config --global core.editor nano
 Kontrola provedeného nastavení
$ git config --list
user.name=Scott Chacon
user.email=schacon@gmail.com
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto
GIT – základní operace
Získání repozitáře Git
 Inicializace repozitáře v existujícím adresáři
$ git init
$ vim README
$ git add README
$ git commit –m 'initial project version'
 Klonování existujícího repozitáře
$ git clone git://github.com/schacon/grit.git
$ git clone git://github.com/schacon/grit.git mygrit
GIT – základní operace
 Kontrola stavu souborů
$ git status
# On branch master
nothing to commit (working directory clean)
 Přidání nového souboru
$ vim README
$ git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# README
nothing added to commit but untracked files present (use "git add" to
track)
GIT – základní operace
 Sledování nových souborů
$ git add README
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: README
#
GIT – základní operace
 Připravení změněných souborů
( změna již existujícího souboru benchmarks.rb )
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: README
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
#
# modified: benchmarks.rb
#
$ git add benchmarks.rb
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: README
# modified: benchmarks.rb
#
GIT – základní operace
 Další změny v souboru
$ vim benchmarks.rb
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: README
# modified: benchmarks.rb
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
#
# modified: benchmarks.rb
#
$ git add benchmarks.rb
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: README
# modified: benchmarks.rb
#
GIT – základní operace
 Zobrazení připravených a nepřipravených změn - podrobně
$ git diff
diff --git a/benchmarks.rb b/benchmarks.rb
index 3cb747f..da65585 100644
--- a/benchmarks.rb
+++ b/benchmarks.rb
@@ -36,6 +36,10 @@ def main
@commit.parents[0].parents[0].parents[0]
end
+ run_code(x, 'commits 1') do
+ git.commits.size
+ end
+
run_code(x, 'commits 2') do
log = git.commits('master', 15)
log.size
$ git diff master..development
$ git diff --cached
GIT – základní operace
 Ignorované soubory
$ cat .gitignore
/nbproject/private/
/temp/
/log/
 Prazdné adresáře
*
!.gitignore
 Příklad
# komentář – toto je ignorováno
*.a # žádné soubory s připonou .a
!lib.a # ale sleduj soubor lib.a, přestože máš ignorovat soubory s
příponou .a
/TODO # ignoruj soubor TODO pouze v kořenovém adresáři, ne v
podadresářích
build/ # ignoruj všechny soubory v adresáři build/
doc/*.txt # ignoruj doc/notes.txt, ale nikoli doc/server/arch.txt
GIT – základní operace
 Zapisování změn
$ git commit
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: README
# modified: benchmarks.rb
 Přeskočení oblasti připravených změn
$ git commit -a
GIT – základní operace
 Zobrazení historie revizí
$ git log
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test code
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
first commit
$ git log –pretty=oneline
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test code
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit
$ git log –p -2
$ git log master..development
 Grafické uživatelské rozhraní pro procházení historie
$ gitk
GIT – základní operace
 Rušení změn
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
 Návrat souboru z oblasti připravených změn
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: README.txt
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: benchmarks.rb
#
GIT – základní operace
Práce se vzdálenými repozitáři
 Zobrazení vzdálených serverů
$ git remote -v
origin git://github.com/schacon/ticgit.git
 Přidávání vzdálených repozitářů
$ git remote add pb git://github.com/paulboone/ticgit.git
$ git remote -v
origin git://github.com/schacon/ticgit.git
pb git://github.com/paulboone/ticgit.git
GIT – základní operace
 Získání dat ze vzdálených repozitářů
$ git fetch [název vzdáleného repozitáře] #stáhne data do repozitáře
$ git pull [název vzdáleného repozitáře] #stáhne a sloučí data s aktuální větví
 Posílání do vzdálených repozitářů
$ git push origin master
GIT – základní operace
GIT – základní operace
 TAGY
$ git tag
v0.1
v1.3
 Anotované tagy
 nesou jméno autora tagu (tagger), e-mail, datum, vlastní zprávu (tagging message) a mohou být podepsány
(signed) a ověřeny (verified) v programu GNU Privacy Guard (GPG)
$ git tag -a v1.4 -m 'my version 1.4'
 Podepsané tagy
$ git tag -s v1.5 -m 'my signed 1.5 tag'
 Lightweight ( prosté ) tagy
$ git tag v1.4-lw
GIT – základní operace
 Dodatečné otagování
$ git log –pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'
0d52aaab4479697da7686c15f77a3d64d9165190 one more thing
a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support
$ git tag -a v1.2 0d52aaa
GIT – základní operace
 Sdílení tagů
 $ git push origin v1.5
Counting objects: 50, done.
Compressing objects: 100% (38/38), done.
Writing objects: 100% (44/44), 4.56 KiB, done.
Total 44 (delta 18), reused 8 (delta 1)
To git@github.com:schacon/simplegit.git
* [new tag] v1.5 -> v1.5
$ git push origin –-tags
Counting objects: 50, done.
Compressing objects: 100% (38/38), done.
Writing objects: 100% (44/44), 4.56 KiB, done.
Total 44 (delta 18), reused 8 (delta 1)
To git@github.com:schacon/simplegit.git
* [new tag] v0.1 -> v0.1
* [new tag] v1.2 -> v1.2
* [new tag] v1.4 -> v1.4
* [new tag] v1.4-lw -> v1.4-lw
* [new tag] v1.5 -> v1.5
$ git fetch –-tags
GIT
Co je na GITu (nejen) podlě mě uplně nejlepší
GIT – Práce s větvemi
 Co je to větev
Git neukládá data jako sérii změn nebo rozdílů, ale jako sérii snímků.
Zapíšete-li v systému Git commit (revize), Git uloží objekt commitu,
obsahující ukazatel na snímek obsahu, který byl připraven k zapsání
(staging area), informace o autorovy, zprávu commitu a ukazatel na
předchozí commit (commity).
GIT – Práce s větvemi
Větev je v systému Git jen snadno přemístitelným ukazatelem na jeden z
těchto commitů.
Výchozím názvem větve v systému Git je master (hlavní větev).
Pokaždé, když zapíšete nový commit, větev se automaticky posune vpřed.
GIT – Práce s větvemi
 Vyvtoření nové větve = vytvoření nového ukazatele, s nímž
můžete pohybovat
$ git branch testing
GIT – Práce s větvemi
 Jak Git pozná, na jaké větvi se právě nacházíte?
Používá speciální ukazatel zvaný HEAD. HEAD je velmi odlišný od všech koncepcí v
ostatních systémech VCS.
V systému Git se jedná o ukazatel na lokální větev, na níž se právě nacházíte.
GIT – Práce s větvemi
 Přepínání mezi větvemi
$ git checkout testing
GIT – Práce s větvemi
$ vim test.rb
$ git commit -a -m 'made a change'
GIT – Práce s větvemi
$ git checkout master
GIT – Práce s větvemi
$ vim test.rb
$ git commit -a -m 'made a change'
GIT – Práce s větvemi
Příklad
$ git checkout -b iss53
Switched to a new branch "iss53"
$ git branch iss53
$ git checkout iss53
GIT – Práce s větvemi
$ vim index.html
$ git commit -a -m 'added a new footer [issue 53]'
$ git checkout master
Switched to branch "master"
$ git checkout -b 'hotfix'
Switched to a new branch "hotfix"
$ vim index.html
$ git commit -a -m 'fixed the broken email address'
GIT – Práce s větvemi
$ git checkout master
$ git merge hotfix
Updating f42c576..3a0874c
Fast forward
README | 1 -
1 files changed, 0 insertions(+), 1
deletions(-)
GIT – Práce s větvemi
$ git branch -d hotfix
Deleted branch hotfix (3a0874c).
$ git checkout iss53
Switched to branch "iss53"
$ vim index.html
$ git commit -a -m 'finished the new footer [issue 53]'
GIT – Práce s větvemi
 Slučování
$ git checkout master
$ git merge iss53
Merge made by recursive.
README | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
GIT – Práce s větvemi
$ git branch -d iss53
GIT – Práce s větvemi
 Základní konflikty při slučování
$ git merge iss53
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result
[master*]$ git status
index.html: needs merge
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# Unmerged: index.html
#
Stav souboru
<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
please contact us at support@github.com
</div>
>>>>>>> iss53:index.html
GIT – Práce s větvemi
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# Modified: index.html
#
$ git commit
 Výpis větví
$ git branch
iss53
* master
testing
$ git branch -v
iss53 93b412c fix javascript issue
* master 7a98805 Merge branch 'iss53'
testing 782fd34 add scott to the author list in the readmes
GIT – Práce s větvemi
Možnosti při práci s větvemi
 Dlouhé větve
GIT – Práce s větvemi
 Vzdálené větve
Vzdálené větve jsou reference (tj. odkazy) na stav větví ve
vašich vzdálených repozitářích.
Jsou to lokální větve, které nemůžete přesouvat.
Přesouvají se automaticky při síťové komunikaci.
Vzdálené větve slouží jako záložky, které vám připomínají, kde
byly větve ve vzdálených repozitářích, když jste se k nim
naposledy připojili.
GIT – Práce s větvemi
Vzdálené větve mají podobu (vzdálený repozitář)/(větev)
např. origin/master
 $ git branch -va
* development cdc6884 [behind 1] fixes #1790
master 53d0c07 oprava DeleteUserPresenter
remotes/origin/development 53d0c07 oprava DeleteUserPresenter
remotes/origin/master 53d0c07 oprava DeleteUserPresenter
GIT – Práce s větvemi
Sledující větve
Checkoutem lokální větve ze vzdálené větve automaticky
vytvoříte tzv. Sledující větev (angl. Tracking branch).
 Nastavení sledování větví
$ git checkout -b [větev] [vzdálený server]/[větev]
$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "serverfix"
NEBO
$ git branch --set-upstream origin/serverfix
GIT – na serveru
 Protokoly
Local
$ git clone /opt/git/project.git
$ git clone file:///opt/git/project.git
SSH
$ git clone ssh://user@server:project.git
$ git clone user@server:project.git
Git – nazabezpečený SSH
$ git clone git://user@server:project.git
HTTP/S
$ git clone http://example.com/gitproject.git
GIT – na serveru
 Vytvoření repozitáře na serveru
$ git clone --bare my_project my_project.git
Initialized empty Git repository in /opt/projects/my_project.git/
GIT - distribuovaný charakter Gitu
 Centralizovaný pracovní postup
GIT - distribuovaný charakter Gitu
 Pracovní postup s integračním manažerem (GIT Hub)
GIT - distribuovaný charakter Gitu
 Pracovní postup s diktátorem a poručíky
GIT - odložení
 Stash - odložení
$ git stash
Saved working directory and index state  "WIP on master: 049d078 added the
index file"
HEAD is now at 049d078 added the index file
$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051... Revert "added file_size"
stash@{2}: WIP on master: 21d80a5... added number to log
$ git stash apply nebo $ git stash pop
GIT - submoduly
 Submoduly
$ git submodule add git://github.com/chneukirchen/rack.git rack
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: .gitmodules
# new file: rack
#
 $ cat .gitmodules
[submodule "rack"]
path = rack
url = git://github.com/chneukirchen/rack.git
$ git commit -m 'first commit with submodule rack'
[master 0550271] first commit with submodule rack
2 files changed, 4 insertions(+), 0 deletions(-)
create mode 100644 .gitmodules
create mode 160000 rack
GIT - submoduly
 S adresářem rack můžete pracovat jako se samostatným
projektem a čas od času aktualizovat superprojekt ukazatelem
na nejnovější revizi v tomto subprojektu.
Všechny příkazy Git pracují v obou adresářích nezávisle.
GIT - submoduly
 Klonování projektu se submoduly
$ git clone git://github.com/schacon/myproject.git
$ git submodule init
$ git submodule update
 Rekurzivní update submodulu
$ git submodule foreach git pull
GIT – změna historie
 Používat jen výjimečně
$ git commit --amend
$ git rebase
$ git rebase -i
$ git reflog
$ git filter-branch --tree-filter 'rm filename' HEAD
GIT – změna historie
 Souhrn nejpoužívanějších příkazů
$ git clone
$ git status
$ git diff
$ git commit
$ git push
$ git pull
$ git log
$ git stash
$ git submodule init
$ git submodule update
Díky za pozornost.
Miloš Janda
Použité zdroje:
 http://progit.org/book/
 http://git-scm.com/ (http://git-scm.com/book/cs/)

Mais conteúdo relacionado

Destaque

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 

Destaque (20)

Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 

Git CZ

  • 1. GIT
  • 2. Správa verzí  Lokální (VCS) – ukládání do adresářů, zip, RCS( MAC OS)  Centralizované (CVCS) - CVS, Subversion, Perforce  Distribuované (DVCS) – GIT, Mercurial, Bazaar, Darcs DVCS VCS CVCS
  • 3. GIT - historie Linus Torvalds, komunita Linux 1991 – 2002 - archivní soubory 2002 – 2005 - Bit-Keeper (komerční) 2005 – nyní - GIT - rychlost - jednoduchý design - silná podpora nelineárního vývoje (tisíce paralelních větví) - plná distribuovatelnost - schopnost efektivně spravovat velké projekty, jako je linuxové jádro (rychlost a objem dat).
  • 4. GIT - základy Způsob zpracování dat  CVS, Subversion, Perforce, Bazaar  GIT
  • 5. GIT - základy  Téměř každá operace je lokální  Každá oprace má svůj identifikátor SHA-1 hash 4b9da6552252987aa493b52f8696cd6d3b00373  Tři stavy
  • 6. GIT - nastavení  Totožnost uživatele $ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com  Nastavení editoru $ git config --global core.editor nano  Kontrola provedeného nastavení $ git config --list user.name=Scott Chacon user.email=schacon@gmail.com color.status=auto color.branch=auto color.interactive=auto color.diff=auto
  • 7. GIT – základní operace Získání repozitáře Git  Inicializace repozitáře v existujícím adresáři $ git init $ vim README $ git add README $ git commit –m 'initial project version'  Klonování existujícího repozitáře $ git clone git://github.com/schacon/grit.git $ git clone git://github.com/schacon/grit.git mygrit
  • 8. GIT – základní operace  Kontrola stavu souborů $ git status # On branch master nothing to commit (working directory clean)  Přidání nového souboru $ vim README $ git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # # README nothing added to commit but untracked files present (use "git add" to track)
  • 9. GIT – základní operace  Sledování nových souborů $ git add README $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: README #
  • 10. GIT – základní operace  Připravení změněných souborů ( změna již existujícího souboru benchmarks.rb ) $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: README # # Changed but not updated: # (use "git add <file>..." to update what will be committed) # # modified: benchmarks.rb # $ git add benchmarks.rb $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: README # modified: benchmarks.rb #
  • 11. GIT – základní operace  Další změny v souboru $ vim benchmarks.rb $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: README # modified: benchmarks.rb # # Changed but not updated: # (use "git add <file>..." to update what will be committed) # # modified: benchmarks.rb # $ git add benchmarks.rb $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: README # modified: benchmarks.rb #
  • 12. GIT – základní operace  Zobrazení připravených a nepřipravených změn - podrobně $ git diff diff --git a/benchmarks.rb b/benchmarks.rb index 3cb747f..da65585 100644 --- a/benchmarks.rb +++ b/benchmarks.rb @@ -36,6 +36,10 @@ def main @commit.parents[0].parents[0].parents[0] end + run_code(x, 'commits 1') do + git.commits.size + end + run_code(x, 'commits 2') do log = git.commits('master', 15) log.size $ git diff master..development $ git diff --cached
  • 13. GIT – základní operace  Ignorované soubory $ cat .gitignore /nbproject/private/ /temp/ /log/  Prazdné adresáře * !.gitignore  Příklad # komentář – toto je ignorováno *.a # žádné soubory s připonou .a !lib.a # ale sleduj soubor lib.a, přestože máš ignorovat soubory s příponou .a /TODO # ignoruj soubor TODO pouze v kořenovém adresáři, ne v podadresářích build/ # ignoruj všechny soubory v adresáři build/ doc/*.txt # ignoruj doc/notes.txt, ale nikoli doc/server/arch.txt
  • 14. GIT – základní operace  Zapisování změn $ git commit # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: README # modified: benchmarks.rb  Přeskočení oblasti připravených změn $ git commit -a
  • 15. GIT – základní operace  Zobrazení historie revizí $ git log commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Author: Scott Chacon <schacon@gee-mail.com> Date: Sat Mar 15 16:40:33 2008 -0700 removed unnecessary test code commit a11bef06a3f659402fe7563abf99ad00de2209e6 Author: Scott Chacon <schacon@gee-mail.com> Date: Sat Mar 15 10:31:28 2008 -0700 first commit $ git log –pretty=oneline 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test code a11bef06a3f659402fe7563abf99ad00de2209e6 first commit $ git log –p -2 $ git log master..development  Grafické uživatelské rozhraní pro procházení historie $ gitk
  • 16. GIT – základní operace  Rušení změn $ git commit -m 'initial commit' $ git add forgotten_file $ git commit --amend  Návrat souboru z oblasti připravených změn $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: README.txt # # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: benchmarks.rb #
  • 17. GIT – základní operace Práce se vzdálenými repozitáři  Zobrazení vzdálených serverů $ git remote -v origin git://github.com/schacon/ticgit.git  Přidávání vzdálených repozitářů $ git remote add pb git://github.com/paulboone/ticgit.git $ git remote -v origin git://github.com/schacon/ticgit.git pb git://github.com/paulboone/ticgit.git
  • 18. GIT – základní operace  Získání dat ze vzdálených repozitářů $ git fetch [název vzdáleného repozitáře] #stáhne data do repozitáře $ git pull [název vzdáleného repozitáře] #stáhne a sloučí data s aktuální větví  Posílání do vzdálených repozitářů $ git push origin master
  • 20. GIT – základní operace  TAGY $ git tag v0.1 v1.3  Anotované tagy  nesou jméno autora tagu (tagger), e-mail, datum, vlastní zprávu (tagging message) a mohou být podepsány (signed) a ověřeny (verified) v programu GNU Privacy Guard (GPG) $ git tag -a v1.4 -m 'my version 1.4'  Podepsané tagy $ git tag -s v1.5 -m 'my signed 1.5 tag'  Lightweight ( prosté ) tagy $ git tag v1.4-lw
  • 21. GIT – základní operace  Dodatečné otagování $ git log –pretty=oneline 15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment' 0d52aaab4479697da7686c15f77a3d64d9165190 one more thing a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support $ git tag -a v1.2 0d52aaa
  • 22. GIT – základní operace  Sdílení tagů  $ git push origin v1.5 Counting objects: 50, done. Compressing objects: 100% (38/38), done. Writing objects: 100% (44/44), 4.56 KiB, done. Total 44 (delta 18), reused 8 (delta 1) To git@github.com:schacon/simplegit.git * [new tag] v1.5 -> v1.5 $ git push origin –-tags Counting objects: 50, done. Compressing objects: 100% (38/38), done. Writing objects: 100% (44/44), 4.56 KiB, done. Total 44 (delta 18), reused 8 (delta 1) To git@github.com:schacon/simplegit.git * [new tag] v0.1 -> v0.1 * [new tag] v1.2 -> v1.2 * [new tag] v1.4 -> v1.4 * [new tag] v1.4-lw -> v1.4-lw * [new tag] v1.5 -> v1.5 $ git fetch –-tags
  • 23. GIT Co je na GITu (nejen) podlě mě uplně nejlepší
  • 24. GIT – Práce s větvemi  Co je to větev Git neukládá data jako sérii změn nebo rozdílů, ale jako sérii snímků. Zapíšete-li v systému Git commit (revize), Git uloží objekt commitu, obsahující ukazatel na snímek obsahu, který byl připraven k zapsání (staging area), informace o autorovy, zprávu commitu a ukazatel na předchozí commit (commity).
  • 25. GIT – Práce s větvemi Větev je v systému Git jen snadno přemístitelným ukazatelem na jeden z těchto commitů. Výchozím názvem větve v systému Git je master (hlavní větev). Pokaždé, když zapíšete nový commit, větev se automaticky posune vpřed.
  • 26. GIT – Práce s větvemi  Vyvtoření nové větve = vytvoření nového ukazatele, s nímž můžete pohybovat $ git branch testing
  • 27. GIT – Práce s větvemi  Jak Git pozná, na jaké větvi se právě nacházíte? Používá speciální ukazatel zvaný HEAD. HEAD je velmi odlišný od všech koncepcí v ostatních systémech VCS. V systému Git se jedná o ukazatel na lokální větev, na níž se právě nacházíte.
  • 28. GIT – Práce s větvemi  Přepínání mezi větvemi $ git checkout testing
  • 29. GIT – Práce s větvemi $ vim test.rb $ git commit -a -m 'made a change'
  • 30. GIT – Práce s větvemi $ git checkout master
  • 31. GIT – Práce s větvemi $ vim test.rb $ git commit -a -m 'made a change'
  • 32. GIT – Práce s větvemi Příklad $ git checkout -b iss53 Switched to a new branch "iss53" $ git branch iss53 $ git checkout iss53
  • 33. GIT – Práce s větvemi $ vim index.html $ git commit -a -m 'added a new footer [issue 53]' $ git checkout master Switched to branch "master" $ git checkout -b 'hotfix' Switched to a new branch "hotfix" $ vim index.html $ git commit -a -m 'fixed the broken email address'
  • 34. GIT – Práce s větvemi $ git checkout master $ git merge hotfix Updating f42c576..3a0874c Fast forward README | 1 - 1 files changed, 0 insertions(+), 1 deletions(-)
  • 35. GIT – Práce s větvemi $ git branch -d hotfix Deleted branch hotfix (3a0874c). $ git checkout iss53 Switched to branch "iss53" $ vim index.html $ git commit -a -m 'finished the new footer [issue 53]'
  • 36. GIT – Práce s větvemi  Slučování $ git checkout master $ git merge iss53 Merge made by recursive. README | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
  • 37. GIT – Práce s větvemi $ git branch -d iss53
  • 38. GIT – Práce s větvemi  Základní konflikty při slučování $ git merge iss53 Auto-merging index.html CONFLICT (content): Merge conflict in index.html Automatic merge failed; fix conflicts and then commit the result [master*]$ git status index.html: needs merge # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # Unmerged: index.html # Stav souboru <<<<<<< HEAD:index.html <div id="footer">contact : email.support@github.com</div> ======= <div id="footer"> please contact us at support@github.com </div> >>>>>>> iss53:index.html
  • 39. GIT – Práce s větvemi $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # Modified: index.html # $ git commit  Výpis větví $ git branch iss53 * master testing $ git branch -v iss53 93b412c fix javascript issue * master 7a98805 Merge branch 'iss53' testing 782fd34 add scott to the author list in the readmes
  • 40. GIT – Práce s větvemi Možnosti při práci s větvemi  Dlouhé větve
  • 41. GIT – Práce s větvemi  Vzdálené větve Vzdálené větve jsou reference (tj. odkazy) na stav větví ve vašich vzdálených repozitářích. Jsou to lokální větve, které nemůžete přesouvat. Přesouvají se automaticky při síťové komunikaci. Vzdálené větve slouží jako záložky, které vám připomínají, kde byly větve ve vzdálených repozitářích, když jste se k nim naposledy připojili.
  • 42. GIT – Práce s větvemi Vzdálené větve mají podobu (vzdálený repozitář)/(větev) např. origin/master  $ git branch -va * development cdc6884 [behind 1] fixes #1790 master 53d0c07 oprava DeleteUserPresenter remotes/origin/development 53d0c07 oprava DeleteUserPresenter remotes/origin/master 53d0c07 oprava DeleteUserPresenter
  • 43. GIT – Práce s větvemi Sledující větve Checkoutem lokální větve ze vzdálené větve automaticky vytvoříte tzv. Sledující větev (angl. Tracking branch).  Nastavení sledování větví $ git checkout -b [větev] [vzdálený server]/[větev] $ git checkout --track origin/serverfix Branch serverfix set up to track remote branch refs/remotes/origin/serverfix. Switched to a new branch "serverfix" NEBO $ git branch --set-upstream origin/serverfix
  • 44. GIT – na serveru  Protokoly Local $ git clone /opt/git/project.git $ git clone file:///opt/git/project.git SSH $ git clone ssh://user@server:project.git $ git clone user@server:project.git Git – nazabezpečený SSH $ git clone git://user@server:project.git HTTP/S $ git clone http://example.com/gitproject.git
  • 45. GIT – na serveru  Vytvoření repozitáře na serveru $ git clone --bare my_project my_project.git Initialized empty Git repository in /opt/projects/my_project.git/
  • 46. GIT - distribuovaný charakter Gitu  Centralizovaný pracovní postup
  • 47. GIT - distribuovaný charakter Gitu  Pracovní postup s integračním manažerem (GIT Hub)
  • 48. GIT - distribuovaný charakter Gitu  Pracovní postup s diktátorem a poručíky
  • 49. GIT - odložení  Stash - odložení $ git stash Saved working directory and index state "WIP on master: 049d078 added the index file" HEAD is now at 049d078 added the index file $ git stash list stash@{0}: WIP on master: 049d078 added the index file stash@{1}: WIP on master: c264051... Revert "added file_size" stash@{2}: WIP on master: 21d80a5... added number to log $ git stash apply nebo $ git stash pop
  • 50. GIT - submoduly  Submoduly $ git submodule add git://github.com/chneukirchen/rack.git rack $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: .gitmodules # new file: rack #  $ cat .gitmodules [submodule "rack"] path = rack url = git://github.com/chneukirchen/rack.git $ git commit -m 'first commit with submodule rack' [master 0550271] first commit with submodule rack 2 files changed, 4 insertions(+), 0 deletions(-) create mode 100644 .gitmodules create mode 160000 rack
  • 51. GIT - submoduly  S adresářem rack můžete pracovat jako se samostatným projektem a čas od času aktualizovat superprojekt ukazatelem na nejnovější revizi v tomto subprojektu. Všechny příkazy Git pracují v obou adresářích nezávisle.
  • 52. GIT - submoduly  Klonování projektu se submoduly $ git clone git://github.com/schacon/myproject.git $ git submodule init $ git submodule update  Rekurzivní update submodulu $ git submodule foreach git pull
  • 53. GIT – změna historie  Používat jen výjimečně $ git commit --amend $ git rebase $ git rebase -i $ git reflog $ git filter-branch --tree-filter 'rm filename' HEAD
  • 54. GIT – změna historie  Souhrn nejpoužívanějších příkazů $ git clone $ git status $ git diff $ git commit $ git push $ git pull $ git log $ git stash $ git submodule init $ git submodule update
  • 55. Díky za pozornost. Miloš Janda Použité zdroje:  http://progit.org/book/  http://git-scm.com/ (http://git-scm.com/book/cs/)