On Wed, 6 Apr 2016 07:43:19 -0700 (PDT) Eli <[email protected]> wrote:
> Hello, > > I'm trying to use Git over HTTP but I'm getting the error > [Wed Apr 06 13:35:15.208592 2016] [cgi:error] [pid 6821] [client ...] > AH01215: Not a git repository: '/var/git/repositories/my-project.git' > > > On the client side I'm trying this: > > git clone http://myhost.com/git/my-project.git/ > Cloning into 'my-project'... > fatal: repository 'http://myhost.com/git/my-project.git/' not found > > On the server side: > > The Apache Server is the version 2.4 and It has this configuration: > SetEnv GIT_PROJECT_ROOT /var/git/repositories > SetEnv GIT_HTTP_EXPORT_ALL > ScriptAlias /git/ /usr/lib/git-core/git-http-backend/ > > <Directory "/usr/lib/git-core"> > Options +ExecCGI > Require all granted > </Directory> > > The project root rirectory /var/git/repositories has the > my-project.git directory that was initialized with the command git > --bare init my-project.git. I also change the owner of the > my-project.git directory to be the same as apache, so, chown -R > apache:apache /var/git/repositories/my-project.git. > > Could you please help me figure out what I'm doing wrong? What I > missed? > > my git version is 1.9.1 Well, the error message you're observing in the Apache error log is generated in the Git's http-backend.c when a call to function enter_repo() which consumes a pathname and a flag and, if that flag is unset, tries to locate the actual Git object database "ahcnored" at that pathname. In the http-backend.c this function is called with that flag unset and it's called before a check is made for whether the repository is exported. So let's study the comment attached to enter_repo(): /* * First, one directory to try is determined by the following algorithm. * * (0) If "strict" is given, the path is used as given and no DWIM is * done. Otherwise: * (1) "~/path" to mean path under the running user's home directory; * (2) "~user/path" to mean path under named user's home directory; * (3) "relative/path" to mean cwd relative directory; or * (4) "/absolute/path" to mean absolute directory. * * Unless "strict" is given, we check "%s/.git", "%s", "%s.git/.git", "% s.git" * in this order. We select the first one that is a valid git repository, and * chdir() to it. If none match, or we fail to chdir, we return NULL. * * If all goes well, we return the directory we used to chdir() (but * before ~user is expanded), avoiding getcwd() resolving symbolic * links. User relative paths are also returned as they are given, * except DWIM suffixing. */ const char *enter_repo(const char *path, int strict) [...] To me, that part about chdir() looks interesting. I'd say that for some reason the git-http-backend process running with the credentials of your web server fails to chdir() there. So the first thing I'd try is to do # su -l apache -s /bin/dash $ cd /var/git/repositories/my-project.git and see if that works OK. The next thing to try would be more involved debugging. I'd write a shell script reading #!/bin/sh set -e -u FNAME="/tmp/whatever.$$" echo "$@" >"$FNAME" id >>"$FNAME" set >>"$FNAME" exec /usr/bin/git-http-backend "$@" , make it executable and stick it instead of the real Git HTTP backend by adjusting the appropriate <Directory> entry of your Apache's virtual host configuration. Then I'd try accessing the repository and see whatever was output into the temporary file -- to make sure the backend sees the correct environment, has the expected credentials and receives sensible command-line options. ...and while we're at it, what OS are you using? Some sort of RH/Fedora/Centos? -- You received this message because you are subscribed to the Google Groups "Git for human beings" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
