-
1. Početak
- 1.1 O kontroli verzije
- 1.2 Kratka istorija Gita
- 1.3 Osnove Gita
- 1.4 Komandna linija
- 1.5 Instaliranje Gita
- 1.6 Podešavanja za prvi put
- 1.7 Traženje pomoći
- 1.8 Rezime
-
2. Osnove Gita
- 2.1 Pravljenje Git repozitorijuma
- 2.2 Snimanje promena na repozitorijumu
- 2.3 Pregled istorije komitova
- 2.4 Opovrgavanje
- 2.5 Rad sa udaljenim repozitorijumima
- 2.6 Tagovanje
- 2.7 Alijasi
- 2.8 Rezime
-
3. Grananje u Gitu
- 3.1 Grananje ukratko
- 3.2 Osnove grananja i spajanja
- 3.3 Upravljanje granama
- 3.4 Tokovi rada sa grananjem
- 3.5 Udaljene grane
- 3.6 Rebaziranje
- 3.7 Rezime
-
4. Git on the Server
- 4.1 Protokoli
- 4.2 Postavljanje Gita na server
- 4.3 Generisanje javnog SSH ključa
- 4.4 Podešavanje servera
- 4.5 Git Daemon
- 4.6 Pametan HTTP
- 4.7 GitWeb
- 4.8 Opcije za hostovanje koje nude treća lica
- 4.9 Rezime
-
5. Distribuirani Git
- 5.1 Distribuirani tokovi rada
- 5.2 Kako doprineti projektu
- 5.3 Održavanje projekta
- 5.4 Rezime
-
6. GitHub
-
7. Git Tools
- 7.1 Revision Selection
- 7.2 Interactive Staging
- 7.3 Stashing and Cleaning
- 7.4 Signing Your Work
- 7.5 Searching
- 7.6 Rewriting History
- 7.7 Reset Demystified
- 7.8 Advanced Merging
- 7.9 Rerere
- 7.10 Debugging with Git
- 7.11 Submodules
- 7.12 Bundling
- 7.13 Replace
- 7.14 Credential Storage
- 7.15 Summary
-
8. Prilagođavanje Gita
- 8.1 Konfiguracija Gita
- 8.2 Git atributi
- 8.3 Git hukovi
- 8.4 Primer polise sprovedene od strane Gita
- 8.5 Rezime
-
9. Git i ostali sistemi
- 9.1 Git kao klijent
- 9.2 Migriranje na Git
- 9.3 Rezime
-
10. Git iznutra
- 10.1 Vodovod i porcelan
- 10.2 Git objekti
- 10.3 Git reference
- 10.4 Paketoteke
- 10.5 Refspek
- 10.6 Transfer Protocols
- 10.7 Maintenance and Data Recovery
- 10.8 Environment Variables
- 10.9 Summary
-
A1. Appendix A: Git in Other Environments
- A1.1 Graphical Interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Eclipse
- A1.4 Git in Bash
- A1.5 Git in Zsh
- A1.6 Git in Powershell
- A1.7 Summary
-
A2. Appendix B: Embedding Git in your Applications
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
-
A3. Appendix C: Git Commands
- A3.1 Setup and Config
- A3.2 Getting and Creating Projects
- A3.3 Basic Snapshotting
- A3.4 Branching and Merging
- A3.5 Sharing and Updating Projects
- A3.6 Inspection and Comparison
- A3.7 Debugging
- A3.8 Patching
- A3.9 Email
- A3.10 External Systems
- A3.11 Administration
- A3.12 Plumbing Commands
2.3 Osnove Gita - Pregled istorije komitova
Pregled istorije komitova
Kada ste napravili nekoliko komitova, ili ste klonirali repozitorijum sa postojećom istorijom komitova, verovatno ćete hteti da pogledate unazad da vidite šta se dešavalo.
Najosnovniji i najmoćniji alat za ovo je komanda git log
.
Ovi primeri koriste veoma jednostavan projekat koji se zove "simplegit". Da pribavite projekat, pokrenite
git clone https://github.com/schacon/simplegit-progit
Kada pokrenete git log
komandu u ovom projektu, treba da dobijete izlaz koji liči ovom:
$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
first commit
Po podrazumevanim podešavanjima, bez argumenata, git log
će izlistati komitove koji su napravljeni u tom repozitorijumu u obrnutom hronološkom redosledu — odnosno, najskoriji komit će se pojaviti prvi.
Kao što vidite, ova komanda na izlazu daje listu svih komitova sa SHA-1 čeksumom, autorovim imenom i mejlom, datumom kada je napisan i komit porukom.
Postoji veliki broj opcija za komandu git log
koje će vam pomoći da nađete tačno ono što tražite.
Ovde ćemo predstaviti neke najpopularnije.
Jedna od opcija koje su od najveće pomoći je -p
, koje prikazuje razliku uvedenu u svakom komitu.
Možete da koristite i -2
, što limitira prikaz na samo dva poslednja komita.
$ git log -p -2
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
diff --git a/Rakefile b/Rakefile
index a874b73..8f94139 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
spec = Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.name = "simplegit"
- s.version = "0.1.0"
+ s.version = "0.1.1"
s.author = "Scott Chacon"
s.email = "schacon@gee-mail.com"
s.summary = "A simple gem for using Git in Ruby code."
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test
diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index a0a60ae..47c6340 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -18,8 +18,3 @@ class SimpleGit
end
end
-
-if $0 == __FILE__
- git = SimpleGit.new
- puts git.show
-end
\ No newline at end of file
Ova opcija prikazuje istu informaciju s tim što razlika prati svaku stavku.
Ovo je veoma korisno radi brzog upoznavanja sa kodom koji se primenio tokom serija komitova koje je kolaborator dodao.
Možete da koristite i seriju opcija za sumarizaciju sa git log
.
Na primer, ako želite da vidite neke skraćene statuse za svaki komit, možete iskoristiti --stat
opciju.
$ git log --stat
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
Rakefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test
lib/simplegit.rb | 5 -----
1 file changed, 5 deletions(-)
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
first commit
README | 6 ++++++
Rakefile | 23 +++++++++++++++++++++++
lib/simplegit.rb | 25 +++++++++++++++++++++++++
3 files changed, 54 insertions(+)
Kao što vidite, opcija --stat
ispod svakog komita štampa listu modifikovanih fajlova, koliko je fajlova promenjeno i koliko linija u tim fajlovima je dodato i obrisano. Štampa i rezime informacija na kraju.
Još jedna veoma korisna opcija je --pretty
. Ova opcija menja izlaz loga u neki format koji nije podrazumevani. Pripremljeno je nekoliko opcija koje možete da koristite. Opcija oneline
štampa svaki komit u jednu liniju, što je veoma korisno ako gledate puno komitova. Tu su i opecije short
, full
i fuller
koje štampaju u sličnom formatu ali sa manje ili više informacija, respektivno.
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 changed the version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit
Najzanimljivija je opcija format
, koja dopušta da specificirate sopstveni format za izlaz loga.
Ovo je posebno korisno kada generišete izlaz koji treba da parsuje mašina — pošto eksplicitno specificirate format, znate da se neće promeniti kada se Git apdejtuje.
$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 6 years ago : changed the version number
085bb3b - Scott Chacon, 6 years ago : removed unnecessary test
a11bef0 - Scott Chacon, 6 years ago : first commit
Korse opcije za git log --pretty=format
predstavlja listu nekih korisnijih opcija koje uzima format
.
Opcija | Opis izlaza |
---|---|
|
Komit heš |
|
Skraćeni komit heš |
|
Stablo heš |
|
Skraćeni stablo heš |
|
Roditeljski hešovi |
|
Skraćeni roditeljski hešovi |
|
Ime autora |
|
Mejl autora |
|
Datum autora (format poštuje |
|
Datum autora, relativan |
|
Ime komitera |
|
Mejl komitera |
|
Datum komitera |
|
Datum komitera, relativan |
|
Naslov |
Možda se pitate koja je razlika između autora i komitera. Autor je osoba koja je prvobitno napravila fajl, a komiter je osoba koja je poslednja doprinela promene. Znači ako pošaljete zakrpu projektu i jedan od glavnih članova prihvati zakrpu, obojica dobijate priznanje — vi kao autor, a on ili ona kao komiter. Ovu razliku ćemo detaljnije razmotriti u Distribuirani Git.
Opcije online
i format
su posebno korisne sa još jednom log
opcijom koja se zove --graph
. Ova opcija dodaje mali ASCII grafik koji prikazuje vašu granu i istoriju spajanja.
$ git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap
* 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit
|\
| * 420eac9 Added a method for getting the current branch.
* | 30e367c timeout code and tests
* | 5a09431 add timeout protection to grit
* | e1193f8 support for heads with slashes in them
|/
* d6016bc require time for xmlschema
* 11d191e Merge branch 'defunkt' into local
Ovakav izlaz će postati zanimljiviji kada prođemo kroz grananje i spajanje u sledećem poglavlju.
To su samo neke jednostavne opcije za formatiranje izlaza koje idu uz komandu git log
- ima ih još puno.
U Česte opcije koje idu uz git log
su izlistane opcije koje smo dosad prošli, kao i neke druge koje bi mogle da budu korisne, uz kratko objašnjenje o načinu na koji menjaju izlaz.
Opcija | Opis |
---|---|
|
Pokazuje zakrpu koja je dodata uz svaki komit. |
|
Prikazuje statistiku za fajlove koji su modifikovani u svakom komitu. |
|
Prikazuje samo linije koje su promenjen/dodate/obrisane iz |
|
Prikazuje listu fajlova koji su modifikovani posle informacije o komitu. |
|
Prikazuje i listu fajlova sa informacijom o linijama koje su promenjene/dodate/obrisane. |
|
Prikazuje samo prvih nekoliko slova iz SHA-1 čeksume umesto svih 40. |
|
Prikazuje datum u relativnom formatu (na primer, “2 weeks ago”) umesto celog formata. |
|
Prikazuje ASCII grafikon grane i istorije spajanja pored loga. |
|
Pokazuje komitove u alternativnom formatu. Među opcijama su |
Limitiranje loga
Pored opcija za formatiranje izlaza, git log
prima i veliki broj korisnih opcija za limitiranje — drugim rečima, opcija kojima nalažete prikaz samo jednom podskupu komitova.
Već ste videli jednu takvu — opciju -2
, koja prikazuje samo poslednja dva komita.
Zapravo, možete da ukucate -n
, gde je n
bilo koji prirodan broj i na taj način prikažete poslednjih n
komitova. U stvarnosti je nećete često koristiti jer Git podrazumevano pajpuje sav izlaz kroz pejdžer tako da ćete videti samo jednu stranicu u jednom trenutku.
Međutim, opcije koje limitiraju vreme kao što su --since
i --until
su veoma korisne.
Na primer, ova komanda pribavlja listu komitova koji su se odigrali u poslednje dve nedelje:
$ git log --since=2.weeks
Ova komanda radi sa puno formata — možete da specificirate tačan datum kao "2008-01-05"
ili relativni datum kao "2 years 1 day 3 minutes ago"
.
Listu komitova možete filtrirati i tako da zadovolji neki kriterijum pretrage.
Opcija --author
vam omogućava da prikažete komitove samo od specificiranog autora, a sa --grep
možete tražiti ključne reči u komit porukama.
(Obratite pažnju na to da ako želite da specificirate i autora i grep opcije, morate da dodate --all-match
ili će komanda gađati komitove sa bar jednom uslovom.)
Još jedan veoma koristan filter je -S
opcija koja uzima string i pokazuje samo komitove koji su uveli promenu u kodu koja je dodala ili obrisala taj string.
Na primer, ako želite da nađete poslednji komit koji je dodao ili obrisao referencu na neku određenu funkciju, možete da pozovete
$ git log -Sfunction_name
Poslednja veoma korisna opcija koju možete proslediti opciji git log
kao filter je putanja.
Ako specificirate direktorijum ili ime fajla, možete da limitirate log samo na komitove koji su uveli izmene tim fajlovima.
Ovo je uvek poslednja opcija i generalno se prefiksuje sa duplom crtom (--
) da bi se odvojile putanje od ostalih opcija.
Opcije za limitiranje komande git log
sadrži nekoliko ovih i nekoliko drugih čestih opcija kao referncu.
Opcija | Opis |
---|---|
|
Prikazuje samo poslednjih n komitova. |
|
Pokazuje komitove koji su napravljeni posle specificiranog datuma. |
|
Pokazuje komitove koji su napravljeni pre specificiranog datuma. |
|
Prikazuje samo komitove kod kojih specificirani string gađa ime autora. |
|
Prikazuje samo komitove kod kojih specificirani string gađa ime komitera. |
|
Pokazuje samo komitove kod kojih komit poruka sadrži specificirani string. |
|
Prikazuje samo komitove koji dodaju ili brišu kod koji se poklapa sa stringom. |
Na primer, ako želite da vidite koji komitovi koji su modifikovali test fajlove u Git istoriji izvornog koda su počinjeni od strane korisnika Junio Hamano, a nisu bili spojeni u oktobru 2008, možete da pokrenete ovakvu komadu:
$ git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \
--before="2008-11-01" --no-merges -- t/
5610e3b - Fix testcase failure when extended attributes are in use
acd3b9e - Enhance hold_lock_file_for_{update,append}() API
f563754 - demonstrate breakage of detached checkout with symbolic link HEAD
d1a43f2 - reset --hard/read-tree --reset -u: remove unmerged new paths
51a94af - Fix "checkout --track -b newbranch" on detached HEAD
b0ad11e - pull: allow "git pull origin $something:$current_branch" into an unborn branch
Od skoro 40.000 komitova u istoriji Gitovog izvornog koda, ova komanda je prikazala 6 onih koji zadovoljavaju specificirane uslove.