Skip to content

Verschil tussen git init en git init --bare

1. git init — normale repository (working repository)

Wanneer je dit doet:

git init

krijg je een repository met een working tree.

Structuur:

project/
├── .git/
│   ├── objects/
│   ├── refs/
│   └── HEAD
├── file1.txt
├── file2.txt

Belangrijk:

  • De map .git/ bevat de repository database.
  • De bestanden in de map zelf zijn de working tree.

Dus:

.git  = git database
rest  = werkbestanden

Dit gebruik je wanneer je code ontwikkelt.

Voorbeeld workflow:

git init
git add .
git commit -m "first commit"

Hier kun je bestanden bewerken, committen en testen.


2. git init --bare — bare repository

Wanneer je dit doet:

git init --bare repo.git

krijg je een repository zonder working tree.

Structuur:

repo.git/
├── HEAD
├── objects/
├── refs/
├── config

Dus:

GEEN werkbestanden
alleen git database

Dit type repository is bedoeld als server repository waar anderen naar pushen.


3. Waarom bestaat een bare repo?

Een centrale repository heeft geen werkbestanden nodig.

Een bare repo voorkomt ook conflicten.

Stel je voor dat een server een gewone repo heeft:

server/project/

En iemand pusht terwijl daar ook bestanden staan. Dan kan git de working tree overschrijven.

Daarom gebruiken servers meestal:

repo.git

Alleen git-data.


4. Mijn server setup

Op de server, b.v. klima.git:

mkdir -p /home/pi/repos/
cd /home/pi/repos/
git init --bare klima.git

Dan op je lokale machine:

git remote add origin ssh://pi@dev.public-risk.org:/home/pi/repos/klima.git
alternatief ipv pi@dev.public-risk.org, indien wireguard vpn aan staat:
pi@10.8.0.1
of indien in /etc/hosts de regel 10.8.0.1 vpn voorhanden:
pi@vpn
ip adres van de hetzner server mag ook:
pi@89.167.39.46

daarna eerste push:

git push origin main

5. Waarom de naam .git?

Bare repos krijgen vaak de extensie .git:

project.git

Dit is alleen conventie, maar helpt herkennen dat het een server repository is.


6. Samenvatting

Kenmerk git init git init --bare
Working files ja nee
.git map ja repo zelf
Bedoeld voor ontwikkeling server
Push target meestal niet ja
Voorbeeld laptop project centrale repo op server

7. Hoe GitHub / GitLab werken

Wanneer je een repository aanmaakt op GitHub gebeurt intern:

git init --bare

Dus GitHub repositories zijn in feite bare repositories op een server.


8. post receive hook

In de bare repository kan een hook staan, bv voor klima.git:

/home/pi/repos/klima.git/hooks/post-receive

Die automatisch een deploy uitvoert na een git push. In mijn geval deployt hij naar /home/pi/ShinyApps/klima (voor klima.git)