Gitk
Gitk is een grafische repositorybrowser. Deze was de eerste in zijn soort. Gitk kan worden gezien als een GUI-schil voor git log
. Deze is nuttig om de geschiedenis van een repository te verkennen en te visualiseren. Gitk is geschreven in tcl/tk, waardoor het overdraagbaar is naar alle besturingssystemen. gitk
wordt door Paul Mackerras onderhouden als een onafhankelijk project, los van de Git core. Voor het gemak van eindgebruikers worden stabiele versies gedistribueerd als onderdeel van de Git-suite. Git kan een nuttig leermiddel zijn voor nieuwkomers bij Git.
Gitk overview
Gitk kan een nuttig leermiddel zijn voor mensen die nieuw zijn op het gebied van versiebeheer, of voor mensen die overstappen van een ander versiebeheersysteem zoals Subversion. Gitk is een handig hulpprogramma dat is inbegrepen bij Git core. Het biedt een grafische gebruikersinterface die helpt bij het visualiseren van de interne werking van Git. Andere populaire grafische Git-interfaces zijn git-gui en Atlassians eigen Sourcetree.
Gebruik
Gitk wordt op dezelfde manier aangeroepen als git log
. Als je de opdracht gitk
uitvoert, wordt de Gitk UI gestart, die er ongeveer als volgt uitziet:
In het venster linksboven worden de commits naar de repository weergegeven, met de meest recente informatie bovenaan. Rechtsonder wordt de lijst weergegeven met bestanden waarop de geselecteerde commit van invloed is. In het venster linksonder worden de details van de commit en de volledige diff weergegeven. Als je in het venster rechtsonder op een bestand klikt, wordt de diff in het paneel linksonder op de relevante sectie gericht.
Gitk geeft de huidige status van de repository weer. Als de status van de repository wordt gewijzigd door afzonderlijk gebruik via de opdrachtregel, zoals het wijzigen van branches, moet Gitk opnieuw worden geladen. Gitk kan opnieuw worden geladen via het menu File -> Reload.
gerelateerd materiaal
Een volledige Git-repository verplaatsen
Oplossing bekijken
Git leren met Bitbucket Cloud
Gitk geeft standaard de huidige geschiedenis van commits weer. Gitk heeft verschillende opdrachtregelopties die kunnen worden doorgegeven bij de initialisatie. Deze opties beperken in de eerste plaats de lijst van gemaakte commits tot de weergave op het hoogste niveau van Gitk. De algemene uitvoeringsvorm met deze revisieopties is als volgt:
Opties
gitk [<options>] [<revision range>] [--] [<path>…]
<revision range>
Een revisiebereik in de vorm '
kan worden doorgegeven om alle revisies tussen
en to
weer te geven. Ook kan één revisie worden doorgegeven.
<path>…
Beperkt commits tot een specifiek bestandspad. Om paden te isoleren van revisienamen, gebruik je '--' om de paden te scheiden van eventuele voorgaande opties.
--all
Toont alle branches, tags en referenties.
--branches[=<pattern>] --tags[=<pattern>] --remotes[=<pattern>]
Displays the selected item (branches, tags, remotes) as if they were mainline commits. When <pattern>
is passed, further limits refs to ones matching the specified pattern
--since=<date>
Geeft commits weer die recenter zijn dan de opgegeven datum.
--until=<date>
Geeft commits weer die ouder zijn dan de opgegeven datum.
--date-order
Sorteert commits op datum.
--merge
Toont commits die conflicterende bestanden wijzigen die zijn geïdentificeerd tijdens een merge
--left-right
Geeft informatieve labels weer die aangeven van welke kant diff commits afkomstig zijn. Commits vanaf de linkerkant worden voorafgegaan door een < symbool en commits van de rechterkant door een > symbool.
--ancestry-path
Met een reeks weer te geven commits (bijv. commit1..commit2 or commit2 commit1
), worden alleen commits weergegeven die direct in de stamboomketen tussen commit1
en commit2
voorkomen, d.w.z. commits die zowel afstammelingen zijn van commit1
als voorouders van commit2
. (Zie 'Vereenvoudiging van geschiedenis' in git-log(1)
voor een gedetailleerdere uitleg.)
L<start>,<end>:<file>
Krachtige opties waarmee je de geschiedenis van een bepaald bereik aan coderegelnummers kunt traceren.
Discussion & examples
Om waardevolle resultaten te kunnen leveren, heeft Gitk een onderliggende repository nodig met een gecommitte geschiedenis. De volgende code is een reeks bash-opdrachten waarmee een nieuwe repo wordt aangemaakt met twee branches die commits hebben en zijn samengevoegd tot één branche.
mkdir gitkdemo &&
cd gitkdemo &&
git init . &&
echo "hello world" > index.txt &&
git add index.txt &&
git commit -m "added index.txt with hello world content"
Deze demo-repository is een goed voorbeeld om met Gitk te verkennen. Deze opdrachtreeks creëert een nieuwe repo met 1 commit en een index.txt
-bestand. Laten we nu Gitk
aanroepen om de repo te onderzoeken.
Can Gitk compare two commits?
Als we doorgaan met onze demo-repository, kunnen we nu een extra commit aanmaken:
echo "prpended content to index" >> index.txt &&
git commit -am "prepended content to index"
Zodra de volgende opdrachten zijn uitgevoerd, moet gitk
opnieuw worden geladen. Laad gitk
opnieuw vanaf de opdrachtregel of met de GUI en ga naar File -> Reload
. Eenmaal herladen zouden we onze nieuwe commit
moeten zien.
We kunnen zien dat de referentie van de main
-branch nu naar de nieuwe commit verwijst. Om deze twee commits te vergelijken gebruiken we het geschiedenispaneel linksboven. Klik in het geschiedenispaneel op een commit die de basis van de diff gaat vormen. Eenmaal geselecteerd, klik je met de rechtermuisknop op een tweede commit om een contextmenu te openen.
Dit contextmenu biedt de volgende opties
Diff this -> selected
Diff selected -> this
Als je een van deze opties selecteert, verschijnt er een diff (verschil) tussen de twee commits in het paneel linksonder, wat er in ons voorbeeld als volgt uitziet:
De diff-uitvoer laat zien dat index.txt
tussen de twee commits een nieuwe regel met 'prepended content to index' bevat.
How to use Gitk to compare two branches
Laten we verder gaan met onze voorbeeld-repo en een nieuwe branch aanmaken.
git checkout -b new_branch &&
echo "new branch content" > new_branch_file.txt &&
git add new_branch_file.txt &&
git commit -m "new branch commit with new file and prepended content" &&
echo "new branch index update" >> index.txt &&
git commit -am "new branch commit to index.txt with new content"
Met de volgende opdrachtenreeks wordt een nieuwe branch aangemaakt met de naam new_branch
en wordt het bestand new_branch_file.txt
eraan toegevoegd. Daarnaast is er nieuwe inhoud toegevoegd aan index.txt
en is er een extra commit gemaakt voor die update. We hebben nu een nieuwe branch die twee commits verder is dan de hoofdbranch. We moeten Gitk opnieuw laden om deze wijzigingen weer te geven.
Dit is een geweldige gelegenheid om het branchingmechanisme van Git te bespreken. Gitk geeft de commits weer als een rechte reeks commits. De term branch impliceert dat we een 'branch' of vertakking in de tijdlijn mogen verwachten. Git-branches zijn anders dan andere versiebeheersystemen. In Git is een branch een pointer naar een commit. De pointer wordt naar commits verplaatst terwijl ze worden aangemaakt. Wanneer je een git-branch
aanmaakt, verander je niets in de structuur van de repository of de bronstructuur. Je creëert alleen maar een nieuwe pointer.
Om de commits te kunnen vergelijken die tussen de twee branches verschillen, moet Gitk worden gestart met een gespecificeerd revisiebereik. Wanneer gitk main..new_branch
wordt uitgevoerd, wordt Gitk geopend met alleen de commits tussen de twee branch-refs
Dit is een krachtig hulpmiddel om branches te vergelijken.
Gitk vs. Git Gui
Git Gui is een andere op Tcl/Tk gebaseerde grafische gebruikersinterface voor Git. Waar Gitk zich richt op het navigeren en visualiseren van de geschiedenis van een repository, richt Git Gui zich op het verfijnen van individuele commits
, het annoteren van afzonderlijke bestanden en toont deze geen projectgeschiedenis. Git Gui biedt ook menuacties om Git te starten voor een verkenning van de geschiedenis. Git Gui wordt ook aangeroepen vanaf de opdrachtregel door git gui
uit te voeren.
Gitk summary
Kortom, Gitk is een grafische interface-schil voor git log
. Gitk is ongelooflijk krachtig voor het visualiseren en verkennen van de geschiedenis van een repository. Gitk is ook een nuttig hulpmiddel om de interne aspecten van Git te leren kennen.
Deel dit artikel
Volgend onderwerp
Aanbevolen artikelen
Bookmark deze resources voor meer informatie over soorten DevOps-teams of voor voortdurende updates over DevOps bij Atlassian.