Git Version Control op de Command Line voor iOS Devs

Het is ons allemaal overkomen: we veranderen iets in onze code en plotseling lijkt alles "verbroken" te zijn. Dit is wanneer versiebeheer een zegen is - als u weet hoe u het moet gebruiken. In deze zelfstudie leren we Git gebruiken vanaf de opdrachtregel.

Xcode en andere moderne IDE's hebben basisopties voor Git ingebouwd in hun grafische gebruikersinterface, maar je krijgt alleen controle op hoog niveau van je repo (Git-repository) via de opdrachtregel. Als u geavanceerde codering of Git-beheer uitvoert, is het belangrijk om vertrouwd te zijn met de opdrachtregel. Als u nog nooit de opdrachtregel hebt gebruikt, wilt u misschien mijn andere zelfstudie over het onderwerp bekijken:

Over versiebeheer

Voordat we aan de slag gaan, moeten we bekijken wat precies Version Control is. EEN Versiecontrolesysteem is een softwareoplossing waarmee u eenvoudig revisies van uw code en andere gegevens kunt opslaan, zodat u terug kunt gaan naar eerdere versies, wijzigingen kunt bekijken die zijn aangebracht en updates kunt delen met bijdragers. 

Er zijn veel voordelen en use cases voor versiebeheer. Bijvoorbeeld door de wijzigingen te bekijken ("begaat") voor uw project, kunt u identificeren wie een bepaald stukje code heeft geschreven en waarom.U kunt ook alle wijzigingen ongedaan maken die bleken te zijn of de functionaliteit te breken.

Het meest gebruikte versiebeheersysteem van vandaag is Git, dus dat is degene die we in deze post zullen bekijken. Houd er echter rekening mee dat er ook andere veelgebruikte systemen zijn, bijvoorbeeld SVN en Mercurial. 

Sleutelbegrippen en concepten

  • bewaarplaats of repo-bevat alle code voor een enkel project, samen met de volledige wijzigingsgeschiedenis van elk bestand.
  • werkmap-wanneer u uw code bewerkt, brengt u wijzigingen aan in uw werkdirectory. Als u deze wijzigingen in de repo wilt opslaan, moet u een plegen. Als alle wijzigingen in de werkdirectory zijn toegewezen aan de repo, is de werkdirectory dat schoon.
  • plegen-een groep wijzigingen in bronbestanden. Meestal worden deze wijzigingen gegroepeerd, zodat elke commit betrekking heeft op een enkele bugfix of functie.
  • tak-het werk aan een project kan worden georganiseerd in filialen. Hiermee kan één ontwikkelaar of groep ontwikkelaars aan één functie werken, terwijl een andere ontwikkelaar aan een andere functie werkt. 
  • samensmelten-brengt de veranderingen in twee takken bij elkaar. Dit kan vaak automatisch door Git worden gedaan, maar als dat er is conflicten, misschien moet je Git handmatig vertellen hoe je de bestanden samenvoegt.

Repository Management Services

Wanneer u versiebeheer gebruikt, maakt u een bewaarplaats, of repo, en het is het meest gebruikelijk om deze repo op a te hosten Repository Management Service. Voor deze tutorial zullen we onze repo nergens hosten, zodat u zich kunt concentreren op het feitelijk gebruiken van versiebeheer. Als u wilt, kunt u echter deze repository-beheerservices lezen en moet u deze kennis kunnen gebruiken als u dat wilt. 

Een paar voorbeelden hiervan zijn GitHub, Bitbucket, GitLab en Coding, en ze worden veel gebruikt door ontwikkelaars over de hele wereld. Ik en vele anderen gebruiken GitHub omdat het een groot aantal open-sourceprojecten herbergt. GitHub-repos zijn standaard openbaar, maar u kunt privé-repo's maken voor een maandelijks bedrag.

Ermee beginnen

Een applicatie maken

Om te beginnen, moet u een nieuwe applicatie maken in Xcode. Voor deze app kun je elke gewenste sjabloon gebruiken en als je een huidige app hebt met een Git-repository, kun je deze ook gebruiken voor deze zelfstudie.

Hier is hoe de IDE er moet uitzien voordat u eindelijk uw project maakt (wanneer u de locatie moet bepalen om het project op te slaan):

Zorg ervoor dat de doos die zegt Maak Git repository op mijn Mac wordt gecontroleerd, omdat dit ervoor zorgt dat uw project intern de repo heeft. Later, als u ervoor kiest een repository-beheersysteem te gebruiken, kunt u dit doen Duwen al deze code, en elke plegen je hebt ooit gemaakt zal verschijnen.

De terminal openen

Om naar de opdrachtregel te gaan, moet je de terminal openen. U kunt dit op twee manieren doen. Je kunt openen Lanceerplatform, en daar kun je het vinden Terminal pictogram in de anders map op de eerste pagina van Launchpad. Of je kunt slaan Command-Space op je toetsenbord en zoek naar Terminal in Spotlight.

Zodra u de terminal opent, ziet u ongeveer het volgende.

Dit wordt de "opdrachtprompt" genoemd; u ​​ziet de huidige map, uw gebruikersnaam gevolgd door a $.

Okee! U bent nu klaar om te leren hoe u versiebeheer op de terminal gebruikt.

Terminal Commands Cheat Sheet

Hier zijn enkele van de basisopdrachten waarover ik schreef in mijn zelfstudie over hoe u aan de slag kunt met Terminal. U moet deze weten om de terminal effectief te kunnen gebruiken. 

Helpen

  • helpen-zoals de naam doet vermoeden, kunt u deze opdracht in de terminal typen om een ​​lijst met verschillende opdrachten te krijgen.
  • man -vergelijkbaar met het vorige commando, deze opdracht vertelt je precies wat een commando doet (en geeft je volledige documentatie) zonder dat je daarvoor op Google hoeft te zoeken.

Bestandsbeheer

  • ls-geeft een overzicht van alle inhoud in de huidige map. Deze opdracht is handig als u de Finder niet wilt gebruiken om door bestanden te bladeren - u kunt ze eenvoudig weergeven met deze opdracht in uw terminal.
  • CD -deze opdracht wordt gebruikt om mappen te wijzigen. Als je schrijft CD alleen, u verlaat de huidige map. Na gebruik ls (om de mappen te zien), kunt u de naam schrijven van de map die u wilt invoeren.

Voorkeuren wijzigen

  • defaults -deze opdracht wordt gebruikt om standaard systeeminstellingen te wijzigen, waarvan sommige niet kunnen worden gewijzigd zonder de terminal te gebruiken.
  • caffeinate-zoals de naam al doet vermoeden, wordt dit commando gebruikt om te voorkomen dat je Mac dimt, uitschakelt of slaapt. Om dit te beëindigen, hoeft u alleen maar op te drukken Besturing C.

Tekstbewerking

  • vim -dit is een van mijn favorieten. U kunt tekstbestanden bewerken met de standaard TextEdit (of een op een GUI gebaseerde editor), maar vim is in feite een teksteditor met opdrachtregel, dat wil zeggen, het werkt volledig binnen de terminal.

Netwerken

  • ping -Met deze opdracht kunt u de reactietijd van de server van een opgegeven URL of IP-adres controleren. Dit is misschien niet handig voor elke ontwikkelaar, maar het is leuk om te weten.

beheerder

  • sudo -een manier om de gebruikersrechten te overschrijven en een superuser van de computer te worden. U wordt gevraagd om een ​​beheerderswachtwoord wanneer u het gebruikt.

Verschillende Git-opdrachten

Nu je wat basisterminocommando's hebt gezien, laten we eens kijken naar de verschillende dingen die je met Git kunt doen. Ik zal ze niet allemaal behandelen, maar ik zal je leren over de belangrijkste die je zult gebruiken in de dagelijkse ontwikkeling. Als u ooit meer informatie nodig heeft, kunt u gewoon hardlopen help in uw terminal voor details, en als dat niet genoeg is, kunt u voor volledige documentatie uitvoeren man git om de handleidingpagina te krijgen.

Dit is hoe de helppagina's eruitzien:

Een project maken

  • git clone remote-repo-link-als u een repository wilt klonen vanuit een repository-beheerservice, kunt u deze opdracht samen met de URL gebruiken om een ​​lokale kopie op uw computer te krijgen.
  • git init-als u een nieuwe repository maakt vanuit een bestaande map, kunt u deze opdracht gebruiken. Het initialiseert de huidige map als een nieuwe repo. Meestal zou u dit doen wanneer u voor de eerste keer een project aanmaakt.

Veranderingen toeschrijven

  • git status-vertelt u welke bestanden in uw werkmap zijn gewijzigd. Als je bestanden hebt gewijzigd, is het misschien tijd om een ​​commit te maken!
  • git commit -am "useful commit message"-wanneer u enkele wijzigingen in uw project hebt aangebracht (bijvoorbeeld wanneer u een eenvoudige functie hebt voltooid of een bugfix hebt gemaakt), moet u uw wijziging toewijzen. Zorg voor een beknopte en duidelijke commit-boodschap, omdat dit andere ontwikkelaars helpt te begrijpen wat u hebt gedaan en waarom.
  • git voeg filename toe of git add --all-als je een nieuw bestand aan je repo toevoegt, moet je het aan de repo toevoegen voordat je het commit. Gebruik de toevoegen commando. 

Repository Branches

  • git branch branch-name?-met deze opdracht kunt u de huidige branches vermelden of een nieuwe maken.
  • git samenvoegen branch-name-voeg de huidige tak samen met de aangegeven tak. Hiermee wordt de code in de huidige branch gecombineerd met de genoemde branch.
  • git uitchecken branch-name-overschakelen naar de aangegeven tak. Dit zal eenvoudig de huidige tak opzij zetten en de andere tak actief maken.

Repository Management Systemen

  • git push-werkt de repository bij in het repository-beheersysteem. Nadat u klaar bent met het aanbrengen van wijzigingen en er zeker van bent dat uw code goed werkt, kunt u uw code zo pushen dat andere leden de code kunnen zien en eraan kunnen trekken.
  • git pull-werkt uw lokale werkkopie van de repo bij met de nieuwste updates die naar het repositorybeheersysteem zijn gepusht. Het is een goed idee om dit te doen voordat u wijzigingen aanbrengt als u in een team werkt.

Dit zijn enkele van de belangrijkste opdrachten die u in versiebeheer zult gebruiken om aan de slag te gaan, maar voordat we deze tutorial beëindigen, laten we een paar hiervan uitgebreid bekijken met het Xcode-project dat we eerder hebben gemaakt.

Voorbeeld van het gebruik van Git met een Xcode-project

Laten we nu een paar voorbeelden bekijken van het gebruik van command-line Git met het Xcode-project dat we eerder in deze tutorial hebben gemaakt. Merk op dat we de bovenstaande terminalopdrachten zullen gebruiken, dus zorg ervoor dat je ernaar blijft verwijzen of onthoud ze.

Navigeren naar de projectdirectory

Voordat we beginnen, moet je naar de projectdirectory navigeren met de bovenstaande commando's (hint: gebruik de CD en ls commando's). Als je er eenmaal bent, ren dan ls en zorg ervoor dat je zoiets hebt als dit:

Ta-da! Nu bevindt u zich in uw projectdirectory en bent u klaar om alles te doen wat u nodig hebt voor uw project. Volg gewoon ons terwijl we ons committeren en vertakken.

plegen

Het vastleggen van uw code is wat u het vaakst zult doen tijdens het programmeren. Zodra u een werkende wijziging aanbrengt, kunt u het beste samen met gedetailleerde opmerkingen vastleggen.

Een verandering maken

Maak om te beginnen een wijziging in het Xcode-project. Voor de mijne voeg ik de volgende regel dummy-code toe in mijn viewDidLoad () methode:

laat foobar = "foo"

De status verkrijgen

Nadat u klaar bent met het toevoegen (of aftrekken) van een of twee regels code, bent u klaar om de status van uw project te controleren. Hiertoe plakt u de volgende opdracht (minus de $ prompt) in uw Terminal-venster:

$ git-status

Je ziet zoiets als dit:

Het bestand dat je hebt gewijzigd, is rood gemarkeerd, wat aangeeft dat het niet-gecommiteerde wijzigingen bevat.

Bestanden toevoegen aan staginggebied

Als u alleen bepaalde bestanden wilt vastleggen, kunt u dit doen via een "staging-gebied" waar alleen die bestanden worden vastgelegd. Om alle gewijzigde bestanden toe te voegen aan het "verzamelgebied" hoeft u alleen de volgende regel code uit te voeren:

$ git add -A

De -EEN vlag die u ziet, betekent dat alle bestanden die u hebt gewijzigd, worden toegevoegd (-EEN is voor iedereen, en je kunt ook schrijven git add --all). 

Om te zien dat uw bestanden gereed zijn om te binden, voert u eenvoudigweg het volgende nogmaals uit:

$ git-status

Je ziet zoiets als dit:

Zien? Hetzelfde rode bestand is nu groen, wat aangeeft dat je het met succes hebt voorbereid om te committen. 

Committen van uw code

Als laatste, om eindelijk uw code te committen, volstaat het om de volgende opdracht in uw terminal uit te voeren en tussen de aanhalingstekens een bericht in te voegen.

$ git commit -m "Mijn allereerste commit."

De -m vlag vertelt de Terminal dat u een bericht aan uw bestand zult toevoegen, en het is vrij belangrijk om duidelijk te zijn met dit bericht. Deze berichten zijn cruciaal voor het bijhouden van de wijzigingen in uw project.

Nu, je hebt je allereerste commit gemaakt! U bent op de goede weg om uw code eenvoudiger en veiliger te maken.

branches

Het tweede belangrijkste wat u als ontwikkelaar zult doen is filialen maken, samenvoegen en gebruiken om uw code te sorteren en functies te isoleren voordat u ze naar klanten implementeert.

Een nieuwe vestiging creëren

Standaard bevindt u zich in wat wij de 'hoofd'-branche noemen. Dat is de hoofdtak waar uiteindelijk alles in terecht moet komen. Best practice, vooral werken met een team, is om te werken aan nieuwe belangrijke functies in hun eigen filialen, die weer samengevoegd worden tot master wanneer ze voltooid zijn..

Om te oefenen met takken werken, laten we een nieuwe tak maken. Voer hiervoor de volgende opdracht uit:

$ git branch my-first-branch

Je kunt de branch een naam geven die je maar wilt. 

Om de nieuwe branch te zien, kunt u typen:

$ git branch

Wanneer u dat commando uitvoert, ziet u zoiets als dit:

Merk op dat je twee takken kunt zien: meester en my-first-tak (of hoe je je branch noemde). Bovendien ziet u dat er een sterretje staat bij de meester branch, wat aangeeft dat u zich momenteel in dat filiaal bevindt.

Een huidige vestiging uitchecken

Als u ooit naar een ander bestaand filiaal moet overschakelen, moet u dit doen uitchecken die tak. Wanneer u dit doet, verlaat u de huidige branch en blijft al zijn code intact (samen met uw lokale wijzigingen), maar uw werkdirectory wordt gevuld met de code van de branch die u heeft uitgecheckt.

Probeer het uit met de volgende opdracht:

$ git check mijn mijn eerste filiaal

U zou een bevestiging moeten krijgen die er ongeveer zo uitziet:

Nu ga je naar deze tak en het zou een schone lei moeten zijn. Om dit te bevestigen, voer git status om te controleren of er gewijzigde bestanden zijn. 

Takken samenvoegen

Nadat u klaar bent met het aanbrengen van wijzigingen, voegt u normaal gesproken de branch samen tot de master branch. We hebben nog geen wijzigingen aangebracht, dus laten we dat nu doen voordat we de twee vestigingen samenvoegen.

Breng nog een wijziging aan in het Xcode-project. Voor de mijne voeg ik de volgende regel dummy-code toe in mijn viewDidLoad () methode:

let gooey = "fooey"

U kunt elke gewenste wijziging aanbrengen. Zorg ervoor dat u weet welk bestand en welke wijziging u heeft aangebracht.

Nadat dat is gebeurd, voert u de volgende regel code opnieuw uit:

$ git-status

Nu zou je de bestandsnaam in het rood moeten zien, en je moet je committen voordat je deze verandering terugvoert naar je hoofdtak. Ik vertrouw erop dat je weet hoe je dat moet doen, dus laten we doorgaan naar de volgende stap. Controleer nogmaals of de commit succesvol was git status.

Inmiddels had je de code moeten invoeren, dus laten we ons klaarmaken om de twee takken samen te voegen. Voer eerst de volgende opdracht uit:

$ git checkout master

Dit commando schakelt naar de meester om zich voor te bereiden om samen te voegen met de andere tak die we hebben gemaakt. Ten slotte, om samen te voegen, voert u de volgende opdracht uit:

$ git voeg mijn-eerste-filiaal samen

U zou een bevestiging moeten krijgen die er als volgt uitziet:

Nu zijn uw wijzigingen van de feature branch terug samengevoegd in de master. Als de mastertak is gewijzigd sinds de vertakking is gemaakt, probeert Git automatisch de wijzigingen in de featureteksten te combineren met de master. Als dit niet automatisch gebeurt, wordt u gevraagd om eventuele conflicten handmatig op te lossen.

Nu weet u hoe takken samen te voegen, ze te maken en ertussen te schakelen met alleen de Terminal!

Conclusie

Zoals je ziet, is het niet zo moeilijk om versiebeheer met je project te doen, en de beloningen zijn het zeker waard. Versiebeheer is een beproefde methode voor kernontwikkeling en u moet ermee bekend zijn als u in een professionele context wilt werken. 

Ik hoop dat dit bericht je het vertrouwen heeft gegeven om dagelijks versiebeheer te gebruiken. Als je meer wilt weten over Git, bekijk dan hier onze geanimeerde instructievideo's op Envato Tuts+.