Git
Chapters ▾ 2nd Edition

A1.1 Git in andere omgevingen - Grafische interfaces

Als je het hele boek gelezen hebt, zal je erg veel geleerd hebben over het gebruik van Git op de commando regel. Je kunt met lokale bestanden werken, je repository verbinden met andere via een netwerk, en effectiever werken met anderen. Maar daarmee houdt het verhaal niet op; Git wordt normaalgesproken gebruikt als onderdeel van een groter ecosysteem, en het werkstation is niet altijd de beste manier om ermee te werken. We zullen nu een kijkje nemen naar andere soorten omgevingen waar Git nuttig kan zijn, en hoe andere applicaties (inclusief de jouwe) zij aan zij samenwerken met Git.

Grafische interfaces

De natuurlijke omgeving van Git is het werkstation. Nieuwe mogelijkheden verschijnen daar het eerst, en alleen op de commandoregel is de volle kracht van Git volledig tot je beschikking. Maar platte tekst is niet de beste keuze voor alle taken; soms heb je gewoon een visuele representatie nodig, en sommige gebruikers voelen zich veel meer op hun gemak bij een point-and-click interface.

Het is belangrijk op te merken dat verschillende interfaces zijn toegesneden op andere workflows. Sommige clients laten slechts een verzameling zorgvuldig uitgekozen onderdelen van Git zien, dit om een specifieke manier van werken te ondersteunen die de auteurs ervan beschouwen als effectief. Vanuit dat oogpunt gezien zijn geen van deze gereedschappen “beter” te noemen dan een ander, ze zijn gewoonweg beter in staat om hun specifieke doel te dienen. Merk ook dat er niets is wat deze grafische clients kunnen doen wat niet vanaf de commando-regel te doen zou zijn; de commando-regel is nog steeds de plaats waar je de meeste mogelijkheden en controle hebt als je met je repositories werkt.

gitk en git-gui

Als je Git installeert, krijg je de visuele gereedschappen erbij, zijnde gitk en git-gui.

gitk is een gereedschap waarmee je de geschiedenis grafisch kan bekijken. Zie het als een krachtige grafische schil over git log en git grep. Dit is het gereedschap die je gebruikt als je iets probeert te vinden wat in het verleden heeft plaatsgevinden, of de historie van je project probeert te laten zien.

Gitk is het eenvoudigste aan te roepen vanaf de commando-regel. Gewoon cd gebruiken om een Git repository in te gaan en dan dit typen:

$ gitk [git log options]

Gitk accepteert veel opties van de commando-regel, de meeste daarvan worden doorgegeven aan de onderliggende git log actie. Een van de meest nuttige hiervan is de --all vlag, die gitk vertelt om commits te laten zien die vanuit elke ref bereikbaar zijn, niet alleen HEAD. De interface van Gitk ziet er zo uit:

De `gitk` historie viewer.
De gitk historie viewer.

Bovenaan is iets wat eruit ziet als de uitvoer van git log --graph; elke stip staat voor een commit, de lijntjes stellen ouderrelaties voor, en refs worden getoond als gekleurde vierkantjes. De gele stip stelt HEAD voor, en de rode stippen stellen wijzigingen voor die nog een commit moeten worden. Onderaan is een voorstelling van de geselecteerde commit; de commentaren en patch staan links en een samenvatting staat rechts. Hiertussen staat een verzameling van mogelijkheden om in de geschiedenis te zoeken.

git-gui daarentegen is primair een gereedschap om commits samen te stellen. Ook dit is het eenvoudigste om aan te roepen van de commando-regel:

$ git gui

En het ziet er ongeveer zo uit:

Het `git-gui` commit gereedschap.
Het git-gui commit gereedschap.

Links staat de index; wijzigingen die nog niet zijn gestaged staan bovenaan, wijzigingen die zijn gestaged staan onderaan. Je kunt volledige bestanden tussen deze twee stadia verplaatsen door op hun icoontjes te klikken, of je selecteert een bestand voor bekijken door op de naam te klikken.

Rechtsboven wordt de diff getoond, hier worden de veranderingen getoond voor het bestand dat op dat moment is geselecteerd. Je kunt individuele hunks stagen (of individuele regels) door in dit gebied rechts te klikken.

Rechtsonder is het gedeelte waar het bericht en acties kunnen worden ingetypt. Tik je bericht in de tekst-box en klik op “Commit” om iets vergelijkbaars te doen als git commit. Je kunt er ook voor kiezen om de laatste commit te amenderen door de “Amend” radio knop te klikken, wat het “Staged Changes” gedeelte vult met de inhoud van de laatste commit. Daarna kan je eenvoudigweg bepaalde wijzigingen kunt stagen of unstagen, het commit bericht wijzigen en weer “Commit” klikken om de oude commit te vervangen met een nieuwe.

gitk en git-gui zijn voorbeelden van taak-georiënteerde gereedschappen. Elk van deze is toegesneden op een specifieke doel (respectievelijk geschiedenis bekijken en commits maken), en zaken die niet nodig zijn voor die taak zijn weggelaten.

GitHub voor Mac en Windows

GitHub heeft twee workflow-georiënteerde clients gemaakt: een voor Windows en een voor Mac. Deze clients zijn goede voorbeelden van workflow-georiënteerde gereedschappen - inplaats van alle functionaliteit van Git beschikbaar te stellen, hebben ze zich gericht op een beperkte set van algemeen gebruikte functies die goed samenwerken. Ze zien er zo uit:

GitHub voor Mac.
GitHub voor Mac.
GitHub voor Windows.
GitHub voor Windows.

Ze zijn ontworpen om zoveel mogelijk op dezelfde manier er uit te zien en te werken, dus we zullen ze in dit hoofdstuk als een enkel product behandelen. We zullen hier geen gedetailleerde behandeling geven van deze gereedschappen (ze hebben hun eigen documentatie), maar een snel overzicht van de “changes” view (waar je het meeste van je tijd zult besteden) is op zijn plaats.

  • Links staat de lijst van repositories die de client volgt (trackt); je kunt een repository toevoegen (hetzij door het te clonen of door deze lokaal toe te voegen) door het “+” icoon te klikken die boven dit gebied staat.

  • In het midden is een commit-invoer gebied, dit stelt je in staat om een commit bericht in te voeren, en de bestanden die hierin mee moeten te selecteren. (In Windows is de commit historie hier direct onder getoond; op Mac is het een aparte tab.)

  • Rechts is een diff view, waar wordt getoond wat er in je werk directory is gewijzigd, of welke wijzigingen er in de geselecteerde commit zitten.

  • Het laatste waar je op kunt letten is de “Sync” knop rechtsboven, wat de belangrijkste manier is waarmee je over het netwerk communiceert.

Je hebt geen GitHub account nodig om deze middelen te gebruiken. Alhoewel ze zijn ontworpen om de service van GitHub en aangeraden workflows in de aandacht te brengen, werken ze prima met elke willekeurige ander repository, en zullen netwerk operaties met alle Git hosts uitvoeren.

Installatie

GitHub voor Windows kan worden gedownload van https://windows.github.com, en GitHub voor Mac van https://mac.github.com. Als de applicatie voor het eerst wordt aangeroepen, voeren ze je door alle instellingen die nodig zijn om Git te laten werken, zoals het invoeren van je naam en email adres, en beide stellen verstandige standaard instellingen voor, voor veel gebruikte configuratie opties, zoals caches voor inloggegevens en CRLF gedrag.

Beide zijn “overwinteraars” (“evergreen”) - updates worden gedownload en geïnstalleerd terwijl de applicaties in gebruik zijn. Bij deze installatie zit ook een versie van Git ingesloten, wat betekent dat je je waarschijnlijk geen zorgen hoeft te maken om het ooit handmatig te hoeven updaten. Op Windows heeft de client een shortcut om Powershell aan te roepen met Posh-git, waar we later in dit hoofdstuk meer over zullen vertellen.

De volgende stap is om de applicatie een aantal repositories te geven om mee te werken. De client toont je een lijst met repositories waar je toegang toe hebt op GitHub, en je kunt ze in één stap clonen. ALs je al een lokale repository hebt, kan je de directory hiervan vanuit de Finder of Windows Explorer in de GitHub client slepen, en het zal in de lijst van repositories aan de linkerkant worden opgenomen.

Aangeraden workflow

Als het eenmaal is geïnstalleerd en geconfigureerd, kan je de GitHub client voor veel reguliere Git taken gebruiken. De tool is gemaakt met de workflow die “GitHub Flow” heet in gedachten. We zullen dit in meer detail behandelen in “De GitHub flow”, maar de achterliggende gedachte is dat (a) je naar een branch gaat committen, en (b) dat je vrij regelmatig met een remote repository zult gaan synchroniseren.

Branch beheer is een van de gebieden waar deze twee tools afwijken. Op Mac, is er een knop bovenaan in de window voor het maken van een nieuwe branch:

``Create Branch'' knop op Mac.
“Create Branch” knop op Mac.

In Windows wordt dit gedaan door de naam van de nieuwe branch in de branch-switching widget in te typen:

Een branch aanmaken in Windows.
Een branch aanmaken in Windows.

Als je branch eenmaal is aangemaakt, is het maken van nieuwe commits min of meer rechttoe-rechtaan. Maak een aantal wijzigingen in je werk directory, en als je naar de GitHub client window gaat, zal het je laten zien welke bestanden zijn veranderd. Vul een commit bericht in, selecteer de bestanden die je erin wilt plaatsen, en klik op de “Commit” knop (ctrl-enter of ⌘-enter).

De belangrijkste manier waarmee je met andere repositories samenwerkt via het netwerk is via de “Synch” functie. Git heeft intern verschillende operaties voor pushen, fetchen, mergen en rebasen, maar de GitHub clients vatten die allemaal samen in een multi-stap functie. Hier is wat er gebeurt als je de Sync-knop klikt:

  1. git pull --rebase. Als dit mislukt omdat er een merge conflict is, val dan terug op git pull --no-rebase.

  2. git push.

Dit is de meeste gebruikelijke volgorde van netwerk commando’s als je op deze manier werkt, dus als je ze in een commando samenpropt bespaart het je veel tijd.

Samenvatting

Deze gereedschappen zijn zeer geschikt voor de workflows waarvoor ze zijn ontworpen. Ontwikkelaars zowel als niet-ontwikkelaars kunnen op deze manier binnen een paar minuten met elkaar samenwerken op een project, en veel van de best practices voor dit soort van workflows zijn in de gereedschappen ingebakken. Echter, als je workflow hiervan afwijkt, of als je meer controle wilt over hoe en welke netwerk operaties er gedaan worden, raden we je een andere client of de commando-regel aan.

Andere GUIs

Er zijn een aantal andere grafische Git clients, en ze variëren van gespecialiseerde gereedschappen gemaakt voor één specifiek doel tot aan applicaties die probereen alles wat Git kan beschikbaar te stellen. De officiële Git website heeft een onderhouden lijst van de meest populaire clients op http://git-scm.com/downloads/guis. Een uitgebreidere lijst is beschikbaar op de Git wiki, op https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools#Graphical_Interfaces.