-
1. Aan die slag
- 1.1 Oor Weergawebeheer
- 1.2 Wat is Git?
- 1.3 Die Opdragreël
- 1.4 Git Installeer
- 1.5 Git klaarmaak vir eerste gebruik
- 1.6 Hulp Verkry
- 1.7 Opsomming
-
2. Git Basics
-
3. Git Branching
-
4. Git on the Server
- 4.1 Die Protokolle (The Protocols)
- 4.2 Git op 'n Bediener kry (Getting Git on a Server)
- 4.3 Jou Publieke SSH-sleutel Genereer (Generating Your SSH Public Key)
- 4.4 Die Bediener Opstel (Setting Up the Server)
- 4.5 Git Daemon
- 4.6 Slim HTTP (Smart HTTP)
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Derdeparty-gasheuroplossings (Third-Party Hosting Solutions)
- 4.10 Summary
-
5. Distributed Git
-
6. GitHub
-
7. Git Tools
- 7.1 Hersieningseleksie (Revision Selection)
- 7.2 Interaktiewe Voorbereiding (Interactive Staging)
- 7.3 Bêre en Skoonmaak (Stashing and Cleaning)
- 7.4 Ondertekening van Jou Werk (Signing Your Work)
- 7.5 Soek (Searching)
- 7.6 Herskryf van Geskiedenis (Rewriting History)
- 7.7 Reset Ontmystifiseer (Reset Demystified)
- 7.8 Gevorderde Saamsmelting (Advanced Merging)
- 7.9 Rerere
- 7.10 Ontfouting met Git (Debugging with Git)
- 7.11 Submodules
- 7.12 Bundeling (Bundling)
- 7.13 Vervang (Replace)
- 7.14 Die Stoor van Aanmeldbewyse (Credential Storage)
- 7.15 Summary
-
8. Customizing Git
-
9. Git and Other Systems
- 9.1 Git as a Client
- 9.2 Migrating to Git
- 9.3 Summary
-
10. Git Internals
2.3 Git Basics - Die vasleggingsgeskiedenis (Commit History) bekyk
Die vasleggingsgeskiedenis (Commit History) bekyk
Nadat jy verskeie vasleggings (commits) geskep het, of as jy 'n bewaarplek (repository) met 'n bestaande vasleggingsgeskiedenis gekloon (cloned) het, sal jy waarskynlik wil terugkyk om te sien wat gebeur het.
Die mees basiese en kragtige instrument om dit te doen, is die git log opdrag.
Hierdie voorbeelde gebruik 'n baie eenvoudige projek genaamd “simplegit”. Om die projek te kry, voer uit:
$ git clone https://github.com/schacon/simplegit-progit
Wanneer jy git log in hierdie projek uitvoer, behoort jy afvoer (output) te kry wat min of meer so lyk:
$ 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
By verstek, sonder enige argumente, lys git log die vasleggings (commits) wat in daardie bewaarplek (repository) gemaak is in omgekeerde chronologiese volgorde; dit wil sê, die mees onlangse vasleggings wys eerste.
Soos jy kan sien, lys hierdie opdrag elke vaslegging met sy SHA-1 kontrolesom (checksum), die outeur (author) se naam en e-pos, die datum geskryf, en die vasleggingsboodskap (commit message).
'n Groot aantal en verskeidenheid opsies vir die git log opdrag is beskikbaar om vir jou presies te wys waarna jy soek.
Hier sal ons jou 'n paar van die gewildstes wys.
Een van die nuttiger opsies is -p of --patch, wat die verskil (die patch afvoer) wys wat in elke vaslegging (commit) ingestel is.
Jy kan ook die aantal log-inskrywings (log entries) wat vertoon word beperk, soos om -2 te gebruik om slegs die laaste twee inskrywings te wys.
$ 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
Hierdie opsie vertoon dieselfde inligting, maar met 'n verskil (diff) wat direk na elke inskrywing volg.
Dit is baie nuttig vir kodehersiening (code review) of om vinnig te blaai deur wat gebeur het tydens 'n reeks vasleggings (commits) wat 'n medewerker bygevoeg het.
Jy kan ook 'n reeks opsommende opsies saam met git log gebruik.
Byvoorbeeld, as jy 'n paar verkorte statistieke vir elke vaslegging (commit) wil sien, kan jy die --stat opsie gebruik:
$ 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(+)
Soos jy kan sien, druk die --stat opsie onder elke vasleggingsinskrywing 'n lys van gewysigde lêers af, hoeveel lêers verander is, en hoeveel reëls in daardie lêers bygevoeg en verwyder is.
Dit plaas ook 'n opsomming van die inligting aan die einde.
'n Ander baie nuttige opsie is --pretty.
Hierdie opsie verander die log-afvoer na ander formate as die verstek.
'n Paar voorafgeboude opsiewaardes is beskikbaar vir jou om te gebruik.
Die oneline waarde vir hierdie opsie druk elke vaslegging (commit) op 'n enkele reël af, wat nuttig is as jy na baie vasleggings kyk.
Daarbenewens wys die short, full, en fuller waardes die afvoer in min of meer dieselfde formaat, maar met onderskeidelik minder of meer inligting:
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 Change version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Remove unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 Initial commit
Die mees interessante opsiewaarde is format, wat jou toelaat om jou eie log-afvoerformaat te spesifiseer.
Dit is veral nuttig wanneer jy afvoer genereer vir masjienontleding (machine parsing) — omdat jy die formaat eksplisiet spesifiseer, weet jy dit sal nie verander met opdaterings aan Git nie:
$ 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
Nuttige spesifiseerders vir git log --pretty=format lys van die nuttiger spesifiseerders (specifiers) wat format neem.
| Spesifiseerder | Beskrywing van Afvoer |
|---|---|
|
Vaslegging-hash (Commit hash) |
|
Verkorte vaslegging-hash (Abbreviated commit hash) |
|
Boom-hash (Tree hash) |
|
Verkorte boom-hash |
|
Ouer-hashes (Parent hashes) |
|
Verkorte ouer-hashes |
|
Outeur (author) se naam |
|
Outeur (author) se e-pos |
|
Outeur-datum (formaat respekteer die |
|
Outeur-datum, relatief |
|
Vaslêer (committer) se naam |
|
Vaslêer (committer) se e-pos |
|
Vaslêer-datum (Committer date) |
|
Vaslêer-datum, relatief |
|
Onderwerp (Subject) |
Jy wonder dalk wat die verskil tussen outeur (author) en vaslêer (committer) is. Die outeur is die persoon wat oorspronklik die werk geskryf het, terwyl die vaslêer die persoon is wat die werk laaste toegepas het. Dus, as jy 'n pleister (patch) na 'n projek instuur en een van die kernlede (core members) pas die patch toe, kry julle albei erkenning — jy as die outeur, en die kernlid as die vaslêer (committer). Ons sal hierdie onderskeid 'n bietjie meer dek in Distributed Git.
Die oneline en format opsiewaardes is veral nuttig saam met 'n ander log opsie genaamd --graph.
Hierdie opsie voeg 'n oulike klein ASCII-grafiek by wat jou tak- en saamsmeltingsgeskiedenis (branch and merge history) wys:
$ 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
Hierdie tipe afvoer sal meer interessant word soos ons in die volgende hoofstuk deur vertakking (branching) en saamsmelting (merging) gaan.
Dit is slegs 'n paar eenvoudige afvoerformateringsopsies vir git log — daar is baie meer.
Algemene opsies vir git log lys die opsies wat ons tot dusver gedek het, sowel as 'n paar ander algemene formateringsopsies wat nuttig kan wees, saam met hoe dit die afvoer van die log opdrag verander.
| Opsie | Beskrywing |
|---|---|
|
Wys die pleister (patch) wat met elke vaslegging (commit) ingestel is. |
|
Wys statistieke vir lêers wat in elke vaslegging gewysig is. |
|
Vertoon slegs die veranderings/invoegings/skrappings reël van die |
|
Wys die lys van gewysigde lêers na die vasleggingsinligting. |
|
Wys ook die lys van geaffekteerde lêers tesame met bygevoegde/gewysigde/geskrapte inligting. |
|
Wys slegs die eerste paar karakters van die SHA-1 kontrolesom in plaas van al 40. |
|
Vertoon die datum in 'n relatiewe formaat (byvoorbeeld, “2 weeks ago”) in plaas daarvan om die volle datumformaat te gebruik. |
|
Vertoon 'n ASCII-grafiek van die tak- en saamsmeltingsgeskiedenis (branch and merge history) langs die log-afvoer. |
|
Wys vasleggings (commits) in 'n alternatiewe formaat. Opsiewaardes sluit in |
|
Kortpad vir |
Log-afvoer Beperk (Limiting Log Output)
Benewens afvoerformateringsopsies, neem git log 'n aantal nuttige beperkingsopsies (limiting options); dit wil sê, opsies wat jou toelaat om slegs 'n subset van vasleggings (commits) te wys.
Jy het reeds een so 'n opsie gesien — die -2 opsie, wat slegs die laaste twee vasleggings vertoon.
Trouens, jy kan -<n> doen, waar n enige heelgetal (integer) is om die laaste n vasleggings te wys.
In werklikheid is dit onwaarskynlik dat jy dit dikwels sal gebruik, omdat Git by verstek (by default) alle afvoer deur 'n blaai-program (pager) stuur sodat jy net een bladsy log-afvoer op 'n slag sien.
Die tydsbeperkingsopsies (time-limiting options) soos --since en --until is egter baie nuttig.
Byvoorbeeld, hierdie opdrag kry die lys van vasleggings wat in die afgelope twee weke gemaak is:
$ git log --since=2.weeks
Hierdie opdrag werk met baie formate — jy kan 'n spesifieke datum soos "2008-01-15" spesifiseer, of 'n relatiewe datum soos "2 years 1 day 3 minutes ago".
Jy kan ook die lys filter na vasleggings (commits) wat by sekere soekkriteria pas.
Die --author opsie laat jou toe om op 'n spesifieke outeur te filter, en die --grep opsie laat jou soek na sleutelwoorde in die vasleggingsboodskappe (commit messages).
|
Note
|
Jy kan meer as een instansie van beide die |
'n Ander baie nuttige filter is die -S opsie (in die volksmond bekend as Git se “pickaxe” opsie), wat 'n string neem en slegs daardie vasleggings (commits) wys wat die aantal voorkomste van daardie string verander het.
Byvoorbeeld, as jy die laaste vaslegging wil vind wat 'n verwysing na 'n spesifieke funksie bygevoeg of verwyder het, kan jy dit oproep:
$ git log -S function_name
Die laaste baie nuttige opsie om as 'n filter na git log deur te gee, is 'n pad (path).
As jy 'n gids (directory) of lêernaam spesifiseer, kan jy die log-afvoer beperk tot vasleggings wat 'n verandering aan daardie lêers ingestel het.
Dit is altyd die laaste opsie en word gewoonlik voorafgegaan deur dubbele koppeltekens (--) om die paaie van die opsies te skei:
$ git log -- path/to/file
In Opsies om die afvoer van git log te beperk sal ons hierdie en 'n paar ander algemene opsies vir jou verwysing lys.
| Opsie | Beskrywing |
|---|---|
|
Wys slegs die laaste n vasleggings (commits). |
|
Beperk die vasleggings tot dié wat na die gespesifiseerde datum gemaak is. |
|
Beperk die vasleggings tot dié wat voor die gespesifiseerde datum gemaak is. |
|
Wys slegs vasleggings waar die outeur-inskrywing pas by die gespesifiseerde string. |
|
Wys slegs vasleggings waar die vaslêer-inskrywing (committer entry) pas by die gespesifiseerde string. |
|
Wys slegs vasleggings met 'n vasleggingsboodskap (commit message) wat die string bevat. |
|
Wys slegs vasleggings wat kode byvoeg of verwyder wat by die string pas. |
Byvoorbeeld, as jy wil sien watter vasleggings (commits) wat toetslêers in die Git-bronkodegeskiedenis wysig, in die maand Oktober 2008 deur Junio Hamano vasgelê (committed) is en nie saamsmeltingsvasleggings (merge commits) is nie, kan jy iets soos hierdie uitvoer:
$ 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
Van die byna 40,000 vasleggings (commits) in die Git-bronkodegeskiedenis, wys hierdie opdrag die 6 wat by daardie kriteria pas.
|
Tip
|
Voorkom die vertoning van saamsmeltingsvasleggings (merge commits)
Afhangende van die werkvloei (workflow) wat in jou bewaarplek (repository) gebruik word, is dit moontlik dat 'n aansienlike persentasie van die vasleggings in jou log-geskiedenis net saamsmeltingsvasleggings (merge commits) is, wat tipies nie baie insiggewend is nie.
Om te verhoed dat die vertoning van saamsmeltingsvasleggings jou log-geskiedenis bemors, voeg bloot die |