I am currently setting up some git repositories on a Ubuntu LTS 14.04 machine with Apache 2.4.7.
This is the apache config:
SetEnv GIT_PROJECT_ROOT /var/www/html/git
SetEnv GIT_HTTP_EXPORT_ALL 1
SetEnv REMOTE_USER $REDIRECT_REMOTE_USER
ScriptAliasMatch \
"(?x)^/git/(.*/(HEAD | \
info/refs | \
objects/(info/[^/]+ | \
[0-9a-f]{2}/[0-9a-f]{38} | \
pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
git-(upload|receive)-pack))$" \
/usr/lib/git-core/git-http-backend
<Location /git/oswald.git>
Options +ExecCGI
AuthType Basic
DAV on
AuthName "Git"
AuthUserFile /etc/apache2/git_paragon_passwd
Require valid-user
Order allow,deny
Allow from all
</Location>
The test repository is under /var/www/html/git/oswald.git
. In the repository I have set the config property
http.receivepack=true
The file git-daemon-export-ok
is present.
If I now try to clone with:
git clone https://server/git/oswald.git
after authentication I get:
fatal: https://server/git/oswald.git/info/refs not valid: is this a git repository?
(git 2.1.0 client, on the server git 1.9.1).
I tried several things, so if I don't use git-http-backend and go via WebDAV I can clone but not push, with git-http-backend I cannot even clone.
If I change the last line of ScriptAliasMatch
from
/usr/lib/git-core/git-http-backend
to
/usr/lib/git-core/git-http-backend/$1
as stated in the man page of git-http-backend, I get
fatal: repository 'https://server/git/oswald.git/' not found
with the error.log from Apache:
AH00130: File does not exist: /usr/lib/git-core/git-http-backend/oswald.git/info/refs
Does anybody have an idea what is wrong? I have already spent a lot of time going through forums, but no suggestions there did help so far.
A simple CGI program to serve the contents of a Git repository to Git clients accessing the repository over http:// and https:// protocols. The program supports clients fetching using both the smart HTTP protocol and the backwards-compatible dumb HTTP protocol, as well as clients pushing using the smart HTTP protocol.
Yet, that's exactly what developer Ephi Gabay did with his experimental proof-of-concept GIC: a chat client written in Node. js using Git as its backend database. GIC is by no means intended for production use. It's purely a programming exercise, but it's one that demonstrates the flexibility of open source technology.
Git can use four distinct protocols to transfer data: Local, HTTP, Secure Shell (SSH) and Git.
Is Apache's CGI module enabled? Try running sudo a2enmod cgi
and then restarting Apache.
I had the exact same issue, which ended up being caused by the fact that the CGI module was disabled. In my case, the above command picked and enabled the "cgid" module.
I believe you need the trailing $1
if you're using ScriptAliasMatch
, but should omit the $1
(but keep the trailing slash) if you're using ScriptAlias
.
You may also need to add a Directory
block that looks something like this:
<Directory "/usr/lib/git-core">
Options +ExecCgi -MultiViews +SymLinksIfOwnerMatch
AllowOverride none
Order allow,deny
Allow from all
Require all granted
</Directory>
For other people running into similar problems with this specific error:
fatal: https://server/git/oswald.git/info/refs not valid: is this a git repository?
I eventually found what was causing this issue for me on CentOS 6.5: SELinux. Try running the following command:
setenforce 0
If that fixes your issue, then you have a permissions issue with ACLs. Granted, by running the above command, you've turned off a whole host of permissions checks, but it can at least tell you whether this is what's causing your problem. For more information, check out the documentation here.
Turn the checks back on by running
setenforce 1
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With