# Wat is GIT

## Momentopnames

De kijk van Git op data kan worden uitgelegd als een reeks momentopnames (snapshots) van een miniatuur-bestandssysteem. Elke keer dat je **commit** (de status van je project in Git opslaat) wordt er als het ware foto van de toestand van al je bestanden op dat moment genomen en wordt er een verwijzing naar die foto opgeslagen. Git slaat ongewijzigde bestanden niet elke keer opnieuw op, alleen een verwijzing naar het eerdere identieke bestand dat het eerder al opgeslagen had.

<figure><img src="https://1633044495-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCY7jofLvHZLUwlQLNxqF%2Fuploads%2FfsHEIEZ6Q48NW4DVydJh%2FSnapshots.png?alt=media&#x26;token=a7f3a6f4-f453-4fb0-9d4c-53d0e360367c" alt=""><figcaption><p>Momentopnames van Git</p></figcaption></figure>

## Bijna alle handelingen zijn lokaal

Voor de meeste handelingen in Git zijn alleen lokale bestanden en hulpmiddelen nodig. Dit betekent ook dat er maar heel weinig is dat je niet kunt doen als je offline bent.&#x20;

## Git heeft integriteit

Alles in Git krijgt een controlegetal (checksum) voordat het wordt opgeslagen en er wordt later met dat controlegetal naar gerefereerd. Dat betekent dat het onmogelijk is om de inhoud van een bestand of directory te veranderen zonder dat Git er weet van heeft.

## Git voegt normaal gesproken alleen data toe

Bijna alles wat je in Git doet, leidt tot toevoeging van data in de Git database. Het is daarom erg moeilijk om het systeem iets te laten doen wat je niet ongedaan kan maken.

## De drie toestanden

Git heeft drie hoofdtoestanden waarin bestanden zich kunnen bevinden: gecommit (**commited**), gewijzigd (**modified**) en voorbereid voor een commit (**staged**):&#x20;

* **Committed** houdt in dat alle data veilig opgeslagen is in je lokale database.&#x20;
* **Modified** betekent dat je het bestand hebt gewijzigd maar dat je nog niet naar je database gecommit hebt.&#x20;
* **Staged** betekent dat je al hebt aangegeven dat de huidige versie van het aangepaste bestand in je volgende commit meegenomen moet worden.

Dit brengt ons tot de drie hoofdonderdelen van een Git-project: de **Git directory**, de **Working Tree (**&#x64;e werk directory),  en de **Staging Area** (wachtrij voor een commit).

<figure><img src="https://1633044495-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCY7jofLvHZLUwlQLNxqF%2Fuploads%2FaRWhb4NaZX4a8tsAIrCl%2FToestanden.png?alt=media&#x26;token=9d984836-795c-4894-a4ac-e7c76bb6c5a0" alt=""><figcaption><p>Git toestanden</p></figcaption></figure>

De **Git directory** bevat alle info van je project en zijn verschillende versies die werden bijgehouden.  Dit is het belangrijkste deel van Git, deze directory wordt gekopieerd wanneer je een repository kloont vanaf een andere computer. De volledige repository wordt opgeslagen in een map “.git” die je terugvindt in de map waarin je je project initialiseert.

In de **Working Directory** plaats je een bepaalde versie van het project. Deze bestanden worden uit de Git directory gehaald en op de harde schijf geplaatst, dit noem je de **checkout**, waar jij ze kunt gebruiken of bewerken.

De **Staging Area** is een bestand, dat zich normaalgesproken in je Git directory bevindt, waar informatie opgeslagen wordt over wat in de volgende commit meegaat. Welke aanpassingen je dus wilt bijhouden in de Git directory. Door een **Commit** uit te voeren van de Staging Area, maak je een nieuwe snapshot. Vanaf dan heb je dus een bepaalde versie in de Git directory die je altijd opnieuw kan oproepen.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dbh-ict.gitbook.io/inleiding-git-github/versiebeheer/wat-is-git.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
