-
1. Pričetek
- 1.1 O nadzoru različic
- 1.2 Kratka zgodovina Git-a
- 1.3 Osnove Git
- 1.4 The Command Line
- 1.5 Git namesitev
- 1.6 Prva namestitev Git-a
- 1.7 Pridobitev pomoči
- 1.8 Povzetek
-
2. Osnove Git
- 2.1 Pridobitev repozitorija Git
- 2.2 Snemanje sprememb repozitorija
- 2.3 Pregled zgodovine pošiljanja
- 2.4 Razveljavljanje stvari
- 2.5 Delo z daljavami
- 2.6 Označevanje
- 2.7 Git aliasi
- 2.8 Povzetek
-
3. Veje Git
- 3.1 Veje na kratko
- 3.2 Osnove vej in združevanja
- 3.3 Upravljanje vej
- 3.4 Potek dela z vejami
- 3.5 Oddaljene veje
- 3.6 Ponovno baziranje (rebasing)
- 3.7 Povzetek
-
4. Git na strežniku
- 4.1 Protokoli
- 4.2 Pridobiti Git na strežnik
- 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 Tretje osebne opcije gostovanja
- 4.10 Povzetek
-
5. Distribuirani Git
- 5.1 Distribuirani poteki dela
- 5.2 Prispevanje projektu
- 5.3 Vzdrževanje projekta
- 5.4 Povzetek
-
6. GitHub
-
7. Orodja Git
- 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 Povzetek
-
8. Prilagoditev Git-a
- 8.1 Git Configuration
- 8.2 Git Attributes
- 8.3 Git kljuke
- 8.4 An Example Git-Enforced Policy
- 8.5 Povzetek
-
9. Git in drugi sistemi
- 9.1 Git kot klient
- 9.2 Migracija na Git
- 9.3 Povzetek
-
10. Notranjost Git-a
- 10.1 Napeljava in porcelan
- 10.2 Git Objects
- 10.3 Git References
- 10.4 Packfiles
- 10.5 The Refspec
- 10.6 Transfer Protocols
- 10.7 Maintenance and Data Recovery
- 10.8 Environment Variables
- 10.9 Povzetek
-
A1. Appendix A: Git v drugih okoljih
- A1.1 Grafični vmesniki
- A1.2 Git v Visual Studiu
- A1.3 Git v Eclipse
- A1.4 Git V Bash-u
- A1.5 Git v Zsh
- A1.6 Git v Powershell-u
- A1.7 Povzetek
-
A2. Appendix B: Vključevanje Git-a v vašo aplikacijo
- A2.1 Git v ukazni vrstici
- 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 Git - Pregled zgodovine pošiljanja
Pregled zgodovine pošiljanja
Ko ste ustvarili nekaj pošiljanj ali če ste klonirali repozitorij z obstoječo zgodovino pošiljanj, boste verjetno želeli pogledati nazaj, da vidite, kaj se je zgodilo.
Najosnovnejše in močno orodje za to je ukaz git log
.
Te primeri uporabljajo zelo enostaven projekt imenovan “simplegit”. Da dobite projekt, poženite
git clone https://github.com/schacon/simplegit-progit
Ko poženete git log
v tem projektu, bi morali dobiti izpis, ki izgleda nekako takole:
$ 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
Privzeto brez argumentov git log
izpiše pošiljanja, ki so bila narejena v tem repozitoriju v obratnem kronološkem vrstnem redu - to je, najnovejša pošiljanja se prikažejo prva.
Kot vidite, ta ukaz izpiše vsako pošiljanje z njegovo SHA-1 preverjeno vsoto, avtorjevim imenom in e-pošto, napisanim datumom in sporočilom pošiljanja.
Veliko število in različne opcije ukaza git log
so na voljo, da prikažejo točno to, kar iščete.
Tukaj bomo prikazali nekaj najbolj popularnih.
Ena najbolj uporabnih opcij je -p
, ki prikaže razlike predstavljene v vsakem pošiljanju.
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
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
Ta opcija prikaže enake informacije vendar z razliko, ki direktno sledi vsakemu vnosu.
To je zelo uporabno za pregled kode ali za hitro brskanje, kaj se zgodi med serijo pošiljanj, ki jih je sodelavec dodal.
Lahko tudi uporabite serijo opcij povzetkov z git log
.
Na primer, če želite videti nekaj skrajšanih statistik za vsako pošiljanje, lahko uporabite opcijo --stat
:
$ 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(+)
Kot lahko vidite, opcija --stat
izpiše pod vsakim vnosom pošiljanja seznam spremenjenih datotek, koliko datotek je bilo spremenjenih in koliko vrstic v teh datotekah je bilo dodanih ali odstranjenih.
Doda tudi povzetek informacij na konec.
Druga resnično uporabna opcija je --pretty
.
Ta opcija spremeni izpis dnevnika v oblike druge kot privzete.
Nekaj vnaprej vgrajenih opcij vam je na voljo za uporabo.
Opcija oneline
izpiše vsako pošiljanje na eno vrstico, ki je uporabna, če iščete veliko pošiljanj.
Kot dodatek, opcije short
, full
in fuller
prikažejo izpis v skoraj enaki obliki, vendar z manj ali več informacijami v zaporedju:
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 changed the version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit
Najbolj zanimiva opcija je format
, ki vam omogoča določiti vašo lastno obliko izpisa dnevnika.
To je posebej uporabno, ko generirate izpis za strojno prevajanje - ker določate obliko eksplicitno, veste, da ne bo spremenilo s posoditvami Git-u:
$ 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
Useful options for git log --pretty=format
izpiše nekaj bolj uporabnih opcij, ki jih oblika vzame.
Option | Description of Output |
---|---|
|
Commit hash |
|
Abbreviated commit hash |
|
Tree hash |
|
Abbreviated tree hash |
|
Parent hashes |
|
Abbreviated parent hashes |
|
Author name |
|
Author e-mail |
|
Author date (format respects the --date=option) |
|
Author date, relative |
|
Committer name |
|
Committer email |
|
Committer date |
|
Committer date, relative |
|
Subject |
Lahko se sprašujete, kaj je razlika med author in commiter. Avtor (author) je oseb, ki je prvotno napisala delo, napram prispevalec (commiter) je oseba, ki je zadnja dodala delo. Torej, če ste poslali popravek projektu in eden izmed članov jedra doda popravek, oba od vas dobita zasluge - vi kot avtor, in član jedra kot pošiljatelj. To distribucijo bomo pokrili nekoliko bolj v [ch05-distributed-git].
Ena vrstica in oblika opcij so posebej uporabne z drugimi opcijami log
, klicanimi --graph
.
Ta opcija doda lep manjši ASCII graf, 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 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
Ta tip izpisa bo postal bolj zanimiv, ko bomo šli skozi razvejanje in združevanje v naslednjem poglavju.
To so samo nekatere enostavne opije oblike izpisa za git log
- jih je pa še veliko več.
Common options to git log
izpisuje opcije, ki smo jih pokrili do sedaj, kot tudi nekatere ostale pogoste opcije oblikovanja, ki so lahko uporabne, skupaj s tem kako spremenijo izpis ukaza dnevnika.
Option | Description |
---|---|
|
Show the patch introduced with each commit. |
|
Show statistics for files modified in each commit. |
|
Display only the changed/insertions/deletions line from the --stat command. |
|
Show the list of files modified after the commit information. |
|
Show the list of files affected with added/modified/deleted information as well. |
|
Show only the first few characters of the SHA-1 checksum instead of all 40. |
|
Display the date in a relative format (for example, “2 weeks ago”) instead of using the full date format. |
|
Display an ASCII graph of the branch and merge history beside the log output. |
|
Show commits in an alternate format. Options include oneline, short, full, fuller, and format (where you specify your own format). |
Omejevanje izpisa dnevnika
Kot dodatek k opcijam oblike izpisa, git log
vzame število uporabnih opcij omejevanja - to so opcije, ki vam omogočajo prikazati samo podskupek pošiljanj.
Videli ste že eno tako opcijo - opcija -2
, ki prikaže samo zadnji dve pošiljanji.
V bistvu lahko naredite -<n>
, kjer je n
katerokoli celo število za prikaz zadnjih n
pošiljanj.
V realnosti zelo verjetno ne boste uporabljali tega pogostokrat, ker Git privzeto preusmeri vse izpise skozi paginacijo, tako da lahko vidite samo eno stran izpisa dnevnika istočasno.
Vendar opcije časovnega omejevanja kot sta --since
in --until
sta zelo uporabni.
Na primer ta ukaz dobi seznam pošiljanj, ki so bila narejena 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 year 1 day 3 minutes ago".
Lahko tudi filtrirate seznam pošiljanj, da se ujema z nekaterimi kriteriji.
Opcija --author
vam omogoča filtrirati na določenega avtorja in opcija --grep
vam omogoča iskati za ključnimi besedami v sporočilih pošiljanj.
(Bodite pozorni, da če želite določiti tako opciji author in grep, morate dodati --all-match
drugače bo ukaz ujemal pošiljanja s katero koli opcijo.)
Drug resnično uporaben filter je opcija -S
, ki vzame niz in samo prikaže ukaze, ki predstavljajo spremembe kodi, ki je bila dodana ali odstranjena nizu. Na primer, če ste želeli najti zadnje pošiljanje, ki je dodalo ali odstranilo referenco določeni funkciji, lahko kličete:
$ git log -Sfunction_name
Zadnja resnično uporabna opcija za podati git log
kot filter je pot - path.
Če določite direktorij ali ime datoteke, lahko omejite izpis dnevnika na pošiljanja, ki so predstavila spremembe tem datotekam.
To je vedno zadnja opcija in je v splošnem dodana predhodno z dvojnim pomišljajem (--
), da loči poti od opcij.
V Options to limit the output of git log
bomo izipisali te in nekaj ostalih pogostih opcij za vašo referenco.
Option | Description |
---|---|
|
Show only the last n commits |
|
Limit the commits to those made after the specified date. |
|
Limit the commits to those made before the specified date. |
|
Only show commits in which the author entry matches the specified string. |
|
Only show commits in which the committer entry matches the specified string. |
|
Only show commits with a commit message containing the string |
|
Only show commits adding or removing code matching the string |
Na primer, če želite videti, katera pošiljanja, ki so spremenila datoteke testiranja v zgodovini Git izvorne kode so bila poslana od Junio Hamano in niso bila združena v mesecu oktrobru 2008, lahko poženete nekaj takega:
$ 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
Eden skoraj 40,000 pošiljanj v zgodovini Git izvorne kode, ta ukaz prikaže 6, ki se ujemajo tem kriterijem.