Eenvoudige versiecontrole met Git

Heb je ooit aan een project gewerkt dat zo onpraktisch was, je was bang om een ​​bestand bij te werken of een functie toe te voegen? Misschien was het probleem dat je geen versiecontrolesysteem gebruikte. In de tutorial van vandaag leren we de basis van wat misschien wel de beste VCS ter wereld is: Git.

Wat is Git?

Git is een open-source code management tool; het is gemaakt door Linus Torvalds toen hij de Linux-kernel aan het bouwen was. Vanwege die roots moest het heel snel zijn; dat is het, en gemakkelijk om het even onder de knie te krijgen. Met Git kunt u aan uw code werken met de gemoedsrust dat alles wat u doet omkeerbaar is. Het maakt het gemakkelijk om met nieuwe ideeën in een project te experimenteren en geen zorgen te maken over het breken van iets. The Git Parable, van Tom Preston-Werner, is een geweldige introductie tot de termen en ideeën achter Git.

Waarom zou ik Git gebruiken??

U moet beslist een revisiecontrolesysteem gebruiken; zoals we al zeiden, dit geeft je de vrijheid om te doen wat je wilt met je code en geen zorgen te maken over het overtreden ervan. Dus als je je bewust bent van de voordelen van het gebruik van een revisiecontrolesysteem, waarom zou je git dan gebruiken? Waarom niet SVN of Perforce of een andere? Om eerlijk te zijn, heb ik de verschillen niet te nauw onderzocht; bekijk WhyGitIsBetterThanX.com voor nuttige informatie.

Hoe kom ik aan de set-up?

Git is vrij eenvoudig te krijgen: op een Mac is het waarschijnlijk het gemakkelijkst om het git-osx-installatieprogramma te gebruiken. Als je MacPorts hebt geïnstalleerd, wil je misschien Git er doorheen krijgen; je kunt instructies vinden op de GitHub-helpsite. (En ja, we zullen het hebben over GitHub). In Windows is de eenvoudigste manier om te beginnen met rollen het gebruik van het msysgit-installatieprogramma. Als je echter Cygwin hebt, kun je Git daar ook doorheen sturen.

Hoe gebruik ik Git?

Inmiddels zou je Git geïnstalleerd moeten hebben; als je een Mac hebt, open je een terminal; als je op Windows bent open je de Git Bash (van msysgit) of je Cygwin prompt. Vanaf hier zouden er geen OS-verschillen moeten zijn.

Configuratie

We beginnen met een beetje configuratie. Elke commit die je maakt zal je naam en e-mailadres hebben om de 'eigenaar' van de commit te identificeren, dus begin met het geven van die waarden. Voer hiervoor de volgende opdrachten uit:

 git config --global user.name "Uw naam" git config --global user.email "[email protected]" 

Het is ook leuk om tekstkleuren in te schakelen, alleen om het lezen in de terminal te vergemakkelijken.

 git config --global color.diff auto git config --global color.status auto git config --global color.branch auto

git init

Nu Git weet wie je bent, laten we ons voorstellen dat we een eenvoudige PHP-webapp maken. (Natuurlijk, hoe groter het project, hoe helderder Git straalt, maar we leren de tools gewoon, toch?) We hebben een lege map met de naam 'mySite'. Eerste focus op die map (met behulp van de opdracht cd). Om met Git te beginnen, moet je het git init commando uitvoeren; Zoals je zou kunnen raden, initialiseert dit een Git-repository in die map, en voegt daar een .git-map aan toe. Een repository is een soort van geschiedenisboek. Het bevat alle eerdere versies van uw code, evenals de huidige versie.

Merk op dat uw terminalpad is toegevoegd met (master). Dat is de branche waar je momenteel aan werkt. Tak? Zie uw project als een boom; je kunt verschillende functies op verschillende takken maken en alles blijft gescheiden en veilig.

git add

We zijn begonnen aan onze applicatie te werken.

Voordat we verder gaan, moeten we onze eerste commit doen. Een commit is gewoon een verwijzing naar een plek in uw codegeschiedenis. Voordat we dat kunnen doen, moeten we echter alle bestanden verplaatsen waarvan we willen dat ze deel uitmaken van deze commit naar het verzamelgebied. Het verzamelgebied is een plek om bestanden te bewaren voor je volgende commit; misschien wil je niet al je huidige wijzigingen vastleggen, dus zet je wat in de enscenering. We kunnen dat doen met behulp van de opdracht Toevoegen

 git add . 

De . betekent gewoon alles toevoegen. Je zou specifieker kunnen zijn als je wilde.

 git add * .js git add index.php 

Git commit

Nu we onze bestanden hebben geënsceneerd, laten we ze vastleggen. Dit wordt gedaan met het commando

 Git commit 

Dit omvat alle bestanden in onze verzamelplaats en markeert die code als een punt in de geschiedenis van ons project. Als u geen opties toevoegt aan de bovenstaande opdracht, krijgt u zoiets als dit.

Elke commit moet een begeleidend bericht bevatten, zodat u weet waarom die code is vastgelegd. Met deze editor kunt u uw bericht schrijven en zien wat er in deze commit staat. Uit de bovenstaande afbeelding kunt u zien dat deze commit bestaat uit vier nieuwe bestanden. De editor die u gebruikt om het bericht te schrijven is Vim; Als je niet bekend bent met VIM, weet dan dat je moet drukken op i (voor invoegen) voordat je je bericht kunt typen. In de bovenstaande opname heb ik het bericht 'Initial Commit' toegevoegd. Nadat je je bericht hebt geschreven, druk je op escape en typ je: wq (opslaan en afsluiten). Je zult dan zien dat je commit plaatsvindt.

U kunt een paar opties gebruiken om commits sneller te maken. Ten eerste kunt u met -m uw bericht inline toevoegen.

 git commit -m "initial commit" 

Vervolgens kunt u - hiermee kunt u het staginggebied overslaan; nou niet echt. Git zal alle gemodificeerde bestanden automatisch rangschikken en vastleggen wanneer u deze optie gebruikt. (vergeet niet dat het geen nieuwe bestanden zal toevoegen). Samen zou je deze commando's als volgt kunnen gebruiken:

 git commit -am 'update to index.php' 

Dus hoe vertelt Git dat het zich onderscheidt? In plaats van ze te nummeren, gebruikt Git de code-inhoud van de commit om een ​​SHA1-hash van 40 tekens te maken. Het mooie hieraan is dat, aangezien het de code gebruikt om de hash te maken, geen twee hashes in je project hetzelfde zijn tenzij de code in de commits identiek is.

git status

De git status commando geeft je de mogelijkheid om de huidige status van je code te zien. We hebben net een commit gedaan, dus git status zal ons laten zien dat er niets nieuws is.

Als we blijven werken aan ons imaginaire project, zie je dat onze status verandert. Ik ga onze index.php bewerken en een ander bestand toevoegen. Nu, rennen git status geeft ons dit:

De update is onderverdeeld in twee categorieën: "gewijzigd, maar niet bijgewerkt," en "niet-gerangschikte bestanden." Als we uitvoeren

 git voeg userAuthentication.php git status toe 

u ziet dat er nu een gedeelte 'Veranderingen om vast te leggen' is. Dit geeft een lijst van bestanden die aan het verzamelgebied zijn toegevoegd. Ik ga deze veranderingen met deze verbinden:

 git commit -am 'gebruikersauthenticatiecode toegevoegd' 

Nu aan het rennen git status laat ons een schone werkmap zien.

git branch / git checkout

Hier is een scenario: we werken met plezier aan ons project als we opeens een groots idee hebben. Dit idee is zo revolutionair dat het ons project drastisch zal veranderen. We moeten het proberen, maar we willen deze onveilige, eerste-opstartcode niet in onze geteste en echte code stoppen. Wat te doen? Dit is waar git branch zal enorm behulpzaam zijn. Laten we ons project vertakken zodat als ons grote idee niet lukt, er geen schade wordt aangericht.

 git branch 

Gewoon het takcommando uitvoeren zonder de opties zullen onze takken opnoemen; op dit moment hebben we alleen de master branch, wat is wat elke git repository begint. Om een ​​nieuwe branch te maken, voegt u de naam van uw nieuwe branch toe na de opdracht.

 git branch bigIdea 

Wanneer u een nieuw filiaal maakt, gaat u er niet automatisch naar over. Merk op dat onze terminal nog steeds zegt (meester). Dit is waar we takken comrade commando gebruiken git uitchecken.

 git checkout bigIdea 

(Tip: je kunt een filiaal maken en er in één keer naartoe schakelen met deze opdracht: git checkout -b branch naam.) Zoals je ziet, zijn we nu op de bigIdea branch. Laten we een storm coderen. Git-status zal ons werk laten zien.

Laten we onze veranderingen vastleggen:

 git add. git commit -m 'De Kiler-functie toegevoegd' 

Oké, genoeg van deze functie voor nu; laten we teruggaan naar onze meestertak; maar voordat we dit doen, wil ik je onze huidige projectmap laten zien.

Schakel nu terug naar de hoofdtak; je weet hoe:git checkout master. Bekijk opnieuw onze projectfolder.

Nee, ik heb niets gedaan; die twee bestanden maken alleen deel uit van de bigIdea branch, dus we weten niet eens dat ze bestaan ​​uit de master branch. Dit werkt niet alleen voor complete bestanden, maar ook voor de kleinste wijzigingen in bestanden.

git fuseren

Ok, dus we hebben in die vrije tijd hard aan die bigIdea-vestiging gewerkt. In feite, na een andere commit, ziet het er zo lief uit dat we besloten hebben dat het goed genoeg is om lid te worden van de master branch. Dus hoe doen we het?

De git fuseren commando is gemaakt voor precies dit doel. Terwijl je in de hoofdtak zit, probeer je dit eens:

 git merge bigIdea 

Het is zo makkelijk; nu, alles op de bigIdea branch is een onderdeel van de master branch. Je kunt nu de bigIdea branch verwijderen, als je wilt.

 git branch -d bigIdea

Ik wil vermelden dat als je een filiaal niet hebt samengevoegd, Git je dit met deze opdracht niet zal laten verwijderen; je moet in de optie een hoofdletter D gebruiken. Dit is slechts een veiligheidsmaatregel.

git log / gitk

U zult waarschijnlijk op een bepaald moment tijdens uw project naar uw commit-geschiedenis willen kijken. Dit kan eenvoudig worden gedaan met de opdracht log.

 git log 

Dit zal een lijst met alle commits die je in een project hebt gemaakt, weergeven in omgekeerde volgorde. Je kunt hier een behoorlijk stuk informatie krijgen:

  • de commit-auteur
  • de commit hash
  • de datum en tijd
  • het bericht

Absoluut informatief, maar eerder droog, niet? We kunnen de dingen een beetje opvrolijken met de grafiekoptie.

 git log --graph 

Nu kunnen we de boomstructuur zien, een soort van. Hoewel we hun namen niet krijgen, kunnen we elk van de takken zien en welke commits er op zijn gedaan. Als je gewend bent om in een terminal te werken, ben je hier misschien wel goed mee. Echter, als (voorafgaand aan deze ervaring) het woord terminal slaat je eerst als iets dodelijks, adem eenvoudig: er is een app voor. Probeer dit:

 gitk --all 

Dit is de grafische repository-browser. Je kunt rondkijken in je commits, precies zien wat er in een bestand is veranderd tijdens een commit, en nog veel meer. (Je zult opmerken dat ik een paar commits heb toegevoegd voor het samenvoegen, alleen om de boomstructuur herkenbaarder te maken.)

GitHub

Nu dat je een redelijke kennis van Git onder je riem hebt, laten we eens kijken naar enkele van de samenwerkingsonderdelen van Git. Git is een geweldige manier om code met anderen te delen en samen aan projecten te werken. Er zijn een aantal Git repository-hosting sites. We zullen er slechts één bekijken: GitHub.

Ga naar de GitHub-aanmeldingspagina en maak een account aan. Je hebt een publieke SSH-sleutel nodig, dus laten we dat nu meteen maken! (Opmerking: u heeft de sleutel niet nodig tijdens het aanmelden, u kunt deze later toevoegen.)

Open je terminal en typ dit:

 ssh-keygen -t rsa -C "[email protected]" 

De t-optie wijst een type toe en de optie C voegt een opmerking toe, traditioneel uw e-mailadres. U wordt vervolgens gevraagd waar u de sleutel wilt opslaan; gewoon raken enter zal doen (dat bewaart het bestand naar de standaardlocatie). Voer vervolgens twee keer een wachtwoord in. Nu heb je een sleutel; laten we het aan GitHub geven.

Haal eerst uw sleutel uit het bestand; de terminal heeft u verteld waar de sleutel werd opgeslagen; open het bestand, kopieer de sleutel (let op dat u geen nieuwe regels of witruimte toevoegt). Open uw GitHub-accountpagina, ga naar SSH-openbare sleutels en klik op 'Nog een openbare sleutel toevoegen'. Plak in uw sleutel en sla deze op. Je bent klaar om te gaan! U kunt uw authenticatie testen door dit uit te voeren:

 ssh [email protected] 

U wordt om uw wachtwoord gevraagd; om te voorkomen dat je dit telkens moet typen als je verbinding maakt met GitHub, kun je dit automatiseren. Ik zou je kunnen vertellen hoe je dit moet doen, maar ik heb waarschijnlijk per ongeluk plagiaat gepleegd: de GitHub Help heeft een eenvoudig Engels artikel over hoe het te doen.

Git Clone

Dus nu ben je ingesteld met GitHub; laten we een project pakken. Hoe zit het met jQuery? Als u naar het jQuery GitHub-project gaat, vindt u de git-kloon-URL. Voer dit uit:

 git clone git: //github.com/jquery/jquery.git 

Hiermee wordt een jQuery-map gemaakt en wordt de volledige jQueryrepository naar uw computer gekopieerd. Nu hebt u een volledige geschiedenis van het project; bekijk het met gitk -all.

git push

Dus laten we zeggen dat je aan een project hebt gewerkt, het lokaal met git beheert. Nu wil je het delen met een vriend of de wereld. Log in op GitHub en maak een nieuwe repository aan. GitHub geeft je een openbare kloon-URL (voor anderen die je project willen downloaden) en een persoonlijke kloon-URL (voor jezelf).

Kom dan terug naar je project in de terminal en geef dit een werveling:

 git remote add origin [email protected]: andrew8088 / Shazam.git 

Een afstandsbediening is een projectrepository op een externe locatie. In dit geval geven we deze afstandsbediening een naam van de bron en deze onze privé-kloon-URL. (Uiteraard moet je mijn URL vervangen door die van jezelf.) Nu het project weet waar het naartoe gaat ...

 git push origin master 

Dit duwt de hoofdtak naar de oorspronkelijke afstandsbediening. Je project is nu beschikbaar voor de wereld! Ga terug naar je projectpagina en zie je project.

git pull

U bevindt zich misschien aan de andere kant van een project: u bent een bijdrager in plaats van de eigenaar. Wanneer de eigenaar een nieuwe commit naar de repository pusht, kunt u gebruiken git pull om de updates te krijgen. Git trek is eigenlijk een combo-tool: het draait git fetch (de wijzigingen ophalen) en git fuseren (ze samenvoegen met uw huidige kopie).

 git pull 

Je bent ingesteld!

Nou, er is zoveel meer dat je kunt leren over Git; hopelijk heb je genoeg opdrachten geleerd om je volgende project slimmer te beheren. Maar stop hier niet; bekijk deze bronnen om een ​​Git-meester te worden!

  • Git, GitHub en sociale codering (YUI-theater)
  • GitHub Learning Center
  • Gitcasts.com: screencasts op Git
  • De Git-site
  • Mijn openbare Git Evernote-boek
  • Volg ons op Twitter of abonneer je op de Nettuts + RSS Feed voor de beste tutorials voor webontwikkeling op internet.