#Git

Git Error "Schwerwiegend Repository nicht gefunden" beim clonen über http

Beim Einrichten eines Read only Git Repositories bin ich über den Fehler Schwerwiegend: Repository 'http://wega/testrepo.git/' nicht gefunden gestolpert. Das Repo befindet sich auf einem Web Server auf dem der User git das Verzeichnis lesen und schreiben kann. Der www-data ist Mitglied in der Gruppe git und darf nur lesend auf die gehosteten Repos zugreifen.

git@wega:/var/www$ ls -lh
insgesamt 4,0K
drwxr-x--- 3 git git 4,0K  11. Feb 14:41 git
git@wega:/var/www$ ls -lh git/
insgesamt 4,0K
drwxr-xr-x 7 git git 4,0K  11. Feb 14:50 testrepo.git

Git Repository auf dem Web Server anlegen

Das Repo wurde mit der Git Option --bare erzeugt und auf den Server kopiert.

marcel@puck:~/Git$ git clone --bare Blog testrepo.git
Klone in Bare-Repository 'testrepo.git' ...
Fertig.
marcel@puck:~/Git$ scp -r testrepo.git/ root@wega:/var/www/git/

Wenn man nun die Adresse des Webserver mit dem Unterverzeichnis des Repos aufruft, wird das Directory Listing richtig angezeigt.

Index of /testrepo.git
[ICO]	Name	Last modified	Size	Description
[PARENTDIR]	Parent Directory	 	- 	 
[ ]	HEAD	2023-02-11 14:41 	21 	 
[DIR]	branches/	2023-02-11 14:41 	- 	 
[ ]	config	2023-02-11 14:41 	118 	 
[ ]	description	2023-02-11 14:41 	73 	 
[DIR]	hooks/	2023-02-11 14:49 	- 	 
[DIR]	info/	2023-02-11 14:50 	- 	 
[DIR]	objects/	2023-02-11 14:50 	- 	 
[ ]	packed-refs	2023-02-11 14:41 	159 	 
[DIR]	refs/	2023-02-11 14:41 	- 	 
Apache/2.4.55 (Debian) Server at wega Port 80

Git Repository über http clonen

Möchte man das Repo aber jetzt über http clonen, wird das mit der Fehlermeldung “Schwerwiegend Repository nicht gefunden” abgebrochen.

marcel@puck:~$ git clone http://wega/testrepo.git
Klone nach 'testrepo'...
Schwerwiegend: Repository 'http://wega/testrepo.git/' nicht gefunden

Der Grund dafür ist, dass Git zusätzliche Dateien erzeugen muss, damit man über http clonen kann. Diese Dateien müssen jedes mal, wenn sich das** Repository ändert, mit dem Befehl git update-server-info **aktualisiert werden.

git@wega:/var/www/git/testrepo.git$ git update-server-info

Jetzt funktioniert das clonen über http.

marcel@puck:~$ git clone http://wega/testrepo.git/
Klone nach 'testrepo'...

Git Server Info automatisch mit Git Hook updaten

Praktischerweise bringt Git einen Beispiel Hook mit, der diese Dateien automatisch nach jedem Push aktualisiert. Um den Hook zu aktivieren, muss nur die Endung .sample entfernt werden.

git@wega:/var/www/git/testrepo.git$ cat hooks/post-update.sample 
#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".

exec git update-server-info
git@wega:/var/www/git/testrepo.git$ mv hooks/post-update.sample hooks/post-update