-
1. Začetek
- 1.1 O nadzoru različic
- 1.2 Kratka zgodovina Gita
- 1.3 Kaj je Git?
- 1.4 Ukazna vrstica
- 1.5 Namestitev Gita
- 1.6 Prva nastavitev Gita
- 1.7 Pridobivanje pomoči
- 1.8 Povzetek
-
2. Osnove Git
- 2.1 Pridobivanje repozitorija Git
- 2.2 Snemanje sprememb v repozitorij
- 2.3 Pregled zgodovine potrditev
- 2.4 Razveljavljanje stvari
- 2.5 Delo z daljavami
- 2.6 Označevanje
- 2.7 Aliasi Git
- 2.8 Povzetek
-
3. Veje Git
- 3.1 Veje na kratko
- 3.2 Osnove vej in združevanja
- 3.3 Upravljanje vej
- 3.4 Poteki dela z vejami
- 3.5 Oddaljene veje
- 3.6 Ponovno baziranje
- 3.7 Povzetek
-
4. Git na strežniku
- 4.1 Protokoli
- 4.2 Pridobitev Gita na strežniku
- 4.3 Generiranje vaših javnih ključev SSH
- 4.4 Nastavitev strežnika
- 4.5 Prikriti proces Git
- 4.6 Pametni HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Možnosti gostovanja pri tretjih ponudnikih
- 4.10 Povzetek
-
5. Porazdeljeni Git
- 5.1 Porazdeljeni poteki dela
- 5.2 Prispevek k projektu
- 5.3 Vzdrževanje projekta
- 5.4 Povzetek
-
6. GitHub
-
7. Orodja Git
- 7.1 Izbira revizije
- 7.2 Interaktivno pripravljanje
- 7.3 Shranjevanje na varno (angl. stashing) in čiščenje
- 7.4 Podpisovanje vašega dela
- 7.5 Iskanje
- 7.6 Prepisovanje zgodovine
- 7.7 Demistifikacija ponastavitve
- 7.8 Napredno združevanje
- 7.9 Rerere
- 7.10 Razhroščevanje z Gitom
- 7.11 Podmoduli
- 7.12 Povezovanje v pakete
- 7.13 Zamenjava
- 7.14 Shramba poverilnic
- 7.15 Povzetek
-
8. Prilagoditev Gita
- 8.1 Konfiguracija Git
- 8.2 Atributi Git
- 8.3 Kljuke Git
- 8.4 Primer pravilnika, ki ga uveljavlja Git
- 8.5 Povzetek
-
9. Git in ostali sistemi
- 9.1 Git kot odjemalec
- 9.2 Migracija na Git
- 9.3 Povzetek
-
10. Notranjost Gita
- 10.1 Napeljava in keramika
- 10.2 Objekti Git
- 10.3 Reference Git
- 10.4 Packfiles (datoteke zmanjšanih podatkov)
- 10.5 Refspec
- 10.6 Protokoli prenosa
- 10.7 Vzdrževanje in obnovitev podatkov
- 10.8 Spremenljivke okolja
- 10.9 Povzetek
-
A1. Dodatek A: Git v drugih okoljih
- A1.1 Grafični vmesniki
- A1.2 Git v Visual Studio
- A1.3 Git v Visual Studio Code
- A1.4 Git v IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git v Sublime Text
- A1.6 Git v Bashu
- A1.7 Git v Zsh
- A1.8 Git v Powershellu
- A1.9 Povzetek
-
A2. Dodatek B: Vdelava Gita v vašo aplikacijo
- A2.1 Git v ukazni vrstici
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Dodatek C: Ukazi Git
- A3.1 Nastavitev in konfiguracija
- A3.2 Pridobivanje in ustvarjanje projektov
- A3.3 Osnove posnetkov
- A3.4 Veje in združevanje
- A3.5 Deljenje in posodabljanje projektov
- A3.6 Pregled in primerjava
- A3.7 Razhroščevanje
- A3.8 Popravljanje
- A3.9 E-pošta
- A3.10 Zunanji sistemi
- A3.11 Administracija
- A3.12 Orodja za sisteme napeljave
2.3 Osnove Git - Pregled zgodovine potrditev
Pregled zgodovine potrditev
Ko ste ustvarili nekaj potrditev, ali če ste klonirali repozitorij z obstoječo zgodovino potrditev, boste verjetno želeli pogledati nazaj, da vidite, kaj se je zgodilo.
Najosnovnejše in najbolj zmogljivo orodje za to je ukaz git log
.
Ti primeri uporabljajo zelo enostaven projekt imenovan »simplegit«. Da pridobite projekt, poženite:
$ git clone https://github.com/schacon/simplegit-progit
Ko poženete git log
v tem projektu, bi morali dobiti izpis, ki je videti nekako takole:
$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
Change version number
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
Remove unnecessary test
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
Initial commit
Privzeto brez argumentov git log
izpiše potrditve, ki so bile narejene v tem repozitoriju v obratnem kronološkem vrstnem redu — to je, najnovejše potrditve se prikažejo prve.
Kot vidite, ta ukaz izpiše vsako potrditev z njeno kontrolno vsoto SHA-1, avtorjevim imenom in e-pošto, napisanim datumom in sporočilom potrditve.
Na voljo je veliko število raznolikih možnosti ukaza git log
, da prikaže točno to, kar iščete.
Tukaj bomo prikazali nekaj najbolj popularnih.
Ena najbolj uporabnih možnosti je -p
ali --patch
, ki prikaže razlike (izpis popravkov) uvedene v vsaki potrditvi.
Lahko uporabite tudi -2
, ki omeji izpis na samo zadnja dva vnosa:
$ git log -p -2
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
Change 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
Remove 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
Ta možnost prikaže enake informacije vendar z razliko, ki neposredno sledi vsakemu vnosu.
To je zelo uporabno za pregled kode ali za hitro brskanje, kaj se je zgodilo med serijo potrditev, ki jih je dodal sodelavec.
Z git log
lahko uporabite tudi možnosti serije povzetkov.
Na primer, če želite videti nekaj skrajšanih statistik za vsako potrditev, lahko uporabite možnost --stat
:
$ git log --stat
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
Change 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
Remove 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
Initial commit
README | 6 ++++++
Rakefile | 23 +++++++++++++++++++++++
lib/simplegit.rb | 25 +++++++++++++++++++++++++
3 files changed, 54 insertions(+)
Kot lahko vidite, možnost --stat
izpiše pod vsakim vnosom potrditve seznam spremenjenih datotek, koliko datotek je bilo spremenjenih in koliko vrstic v teh datotekah je bilo dodanih ali odstranjenih.
Na konec doda tudi povzetek informacij.
Druga resnično uporabna možnost je --pretty
.
Ta možnost spremeni izpis dnevnika v druge oblike od privzetih.
Za uporabo imate nekaj vnaprej vgrajenih možnosti.
Vrednost oneline
za to možnost izpiše vsako potrditev na eno vrstico, kar je uporabno, če gledate veliko potrditev.
Poleg tega, vrednosti short
, full
in fuller
prikažejo izpis v skoraj enaki obliki, vendar z več ali manj informacijami:
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 Change version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Remove unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 Initial commit
Najbolj zanimiva vrednost možnosti je format
, ki vam omogoča določiti lastno obliko izpisa dnevnika.
To je posebej uporabno, ko generirate izpis za strojno prevajanje — ker določate obliko eksplicitno, veste, da se ne bo spremenila s posodobitvami Git:
$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 6 years ago : Change version number
085bb3b - Scott Chacon, 6 years ago : Remove unnecessary test
a11bef0 - Scott Chacon, 6 years ago : Initial commit
Uporabni specifikatorji za git log --pretty=format
izpiše seznam nekaj bolj uporabnih specifikatorjev, ki jih sprejme format
.
Specifikator | Opis izpisa |
---|---|
|
Zgoščena vrednost potrditve |
|
Okrajšana zgoščena vrednost potrditve |
|
Zgoščena vrednost drevesa |
|
Okrajšana zgoščena vrednost drevesa |
|
Nadrejene zgoščene vrednosti |
|
Okrajšane nadrejene zgoščene vrednosti |
|
Ime avtorja |
|
E-pošta avtorja |
|
Datum avtorja (format spoštuje |
|
Datum avtorja, relativno |
|
Ime potrjevalca |
|
E-pošta potrjevalca |
|
Datum potrjevalca |
|
Datum potrjevalca, relativno |
|
Zadeva |
Lahko se sprašujete, kaj je razlika med avtorjem in potrjevalcem. Avtor (angl. author) je oseba, ki je prvotno napisala delo, potrjevalec (angl. commiter) je pa oseba, ki je zadnja dodala delo. Torej, če ste poslali programski popravek projektu in eden izmed osrednjih članov ekipe doda ta popravek, oba dobita zasluge — vi kot avtor in osrednji član kot potrjevalec. To razlikovanje bomo pokrili nekoliko podrobneje v poglavju Porazdeljeni Git.
Vrednosti možnosti oneline
in format
sta posebej uporabni z drugimi možnostmi log
imenovanimi --graph
.
Ta možnost doda lep manjši graf ASCII, ki prikazuje vašo vejo in zgodovino združevanj:
$ git log --pretty=format:"%h %s" --graph
* 2d3acf9 Ignore errors from SIGCHLD on trap
* 5e3ee11 Merge branch 'master' of https://github.com/dustin/grit.git
|\
| * 420eac9 Add 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
Ta tip izpisa bo postal bolj zanimiv, ko bomo šli skozi razvejanje in združevanje v naslednjem poglavju.
To so samo nekatere enostavne možnosti oblike izpisa za git log
— jih je pa še veliko več.
Pogoste možnosti za git log
izpisuje možnosti, ki smo jih pokrili do sedaj kot tudi nekatere ostale pogoste možnosti oblikovanja, ki so lahko uporabne skupaj s tem, kako spremenijo izpis ukaza log
.
Možnost | Opis |
---|---|
|
Prikaži programski popravek, ki je bil uveden v vsaki potrditvi. |
|
Prikaži statistiko za spremenjene datoteke v vsaki potrditvi. |
|
Prikaži samo vrstice sprememb/vstavkov/izbrisov iz ukaza |
|
Prikaži seznam spremenjenih datotek za informacijo potrditve. |
|
Prikaži seznam datotek, na katere je informacija tudi vplivala z dodajanjem/spremembo/izbrisom. |
|
Prikaži samo prvih nekaj znakov kontrolne vsote SHA-1 namesto vseh 40. |
|
Prikaži datum v relativni obliki (na primer, »2 weeks ago«) namesto uporabe polne oblike datuma. |
|
Prikaži graf ASCII zgodovine veje in združevanja poleg izpisa dnevnika. |
|
Prikaži potrditve v drugi obliki. Vrednosti možnosti vključujejo |
|
Bližnjica za skupaj uporabljeno |
Omejevanje izpisa dnevnika
Poleg možnosti oblike izpisa, git log
sprejme tudi vrsto uporabnih možnosti omejevanja; to so možnosti, ki vam omogočajo prikazati samo podskupek potrditev.
Eno tako možnost ste že videli — možnost -2
, ki prikaže samo zadnji dve potrditvi.
V bistvu lahko naredite -<n>
, kjer je n
katerokoli celo število za prikaz zadnjih n
potrditev.
V resnici tega zelo verjetno ne boste uporabljali pogostokrat, ker Git privzeto preusmeri vse izpise skozi oštevilčenje strani, tako da vidite samo eno stran izpisa dnevnika naenkrat.
Vendar pa so možnosti časovnega omejevanja, kot sta --since
in --until
, zelo uporabne.
Na primer ta ukaz dobi seznam potrditev, ki so bile narejene v zadnjih dveh tednih:
$ git log --since=2.weeks
Ta ukaz deluje z veliko oblikami — lahko določite določen datum, kot je »2008-01-15«, ali relativni datum, kot je »2 years 1 day 3 minutes ago«.
Seznam potrditev lahko tudi filtrirate, da se prilega nekaterim merilom.
Možnost --author
vam omogoča filtrirati po določenem avtorju in možnost --grep
vam omogoča iskati za ključnimi besedami v sporočilih potrditev.
Opomba
|
Določite lahko eno instanco obeh meril iskanja |
Drug resnično uporaben filter je možnost -S
(pogovorno imenovana kot Gitova možnost »krampa in lopate«), ki vzame niz in prikaže samo tiste potrditve, ki so spremenili število pojavljanj tega niza.
Na primer, če ste želeli najti zadnjo potrditev, ki je dodala ali odstranila referenco določeni funkciji, lahko kličete:
$ git log -S function_name
Zadnja resnično uporabna možnost za podati ukazu git log
kot filter, je pot.
Če določite direktorij ali ime datoteke, lahko omejite izpis dnevnika na potrditve, ki so uvedle spremembe tem datotekam.
To je vedno zadnja možnost in je v splošnem dodana predhodno z dvema pomišljajema (--
), da loči poti od ostalih možnosti:
$ git log -- path/to/file
V Možnosti za omejitev izpisa git log
bomo za vašo referenco izpisali te možnosti skupaj s še nekaj pogostih ostalih.
Možnost | Opis |
---|---|
|
Prikaži samo zadnjih n potrditev. |
|
Omeji potrditve na tiste, ki so bile narejene po določenem datumu. |
|
Omeji potrditve na samo tiste, ki so bile narejene pred določenim datumom. |
|
Prikaži samo potrditve, kjer se vnos avtorja prilega določenemu nizu. |
|
Prikaži samo potrditve, kjer se vnos potrditelja prilega določenemu nizu. |
|
Prikaži samo potrditve, kjer sporočilo vsebuje niz. |
|
Prikaži samo potrditve, ki odstranjujejo ali dodajajo kodo, ki se prilega nizu. |
Na primer, če želite videti, katere potrditve, ki so spremenile datoteke testiranja v zgodovini izvorne kode Git, je naredil Junio Hamano v mesecu oktobru 2008 in niso bile potrditve združevanja, lahko poženete nekaj takega:
$ git log --pretty="%h - %s" --author='Junio C Hamano' --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
Ta ukaz prikaže 6 od skoraj 40000 potrditev v zgodovini izvorne kode Git, ki se prilegajo tem merilom.
Namig
|
Preprečitev prikaza potrditev združevanj
Odvisno od uporabljenega delovnega načina v vašem repozitoriju je možno, da je zajeten delež potrditev v vašem dnevniku zgodovine zgolj potrditev združevanj, kar običajno ni preveč informativno.
Da preprečite prikaz potrditev združevanj, ki delajo nered v vaši zgodovini dnevnika, enostavno dodajte ukazu |