threads / discuss / 1980

git push to a local directory with no .git in it

Subject: git push to a local directory with no .git in it

## tl;dr

3 messages between Sep 29, 2005 and Sep 30, 2005.

replies: 2people: 2as markdown or json

Richard Curnow· Sep 29, 2005, 23:25 UTC · lore
Background: I have to use plain FTP to upload content to my web site.  I keep a
local mirror of the entire site, then use an automated upload mechanism to do
the FTP step.

To release a git repository onto my site, I want to 'git push' from my working area to the release area in the local mirror. So what ends up as

    http://www.rpcurnow.force9.co.uk/git/mairix.git

lives in ~/homepage/git/mairix.git locally. That directory contains HEAD, refs, objects, hooks; I don't have a .git subdirectory in the middle.

If I cd to ~/gitwork/mairix (which is a regular working area) and do
    git push ~/homepage/git/mairix.git master:master
I get
fatal: /home/richard/homepage/git/mairix.git doesn't appear to be a git directory
presumably because there is no .git in it.
I could cd to ~/homepage/git/mairix.git and do things like
    GIT_DIR=. gitk --all

but what's the equivalent of this GIT_DIR trick when it's the remote end of a 'git push' that has the problem?

Cheers Richard

Junio C Hamano· Sep 30, 2005, 00:05 UTC · re: Richard Curnow · lore

Re: git push to a local directory with no .git in it

Richard Curnow <rc@rc0.org.uk> writes:
Show 5 quoted lines
> I get
>
> fatal: /home/richard/homepage/git/mairix.git doesn't appear to be a git directory
>
> presumably because there is no .git in it.
Please don't presume, but dig.
        $ git grep -n 'doesn.t appear to be'
        receive-pack.c:275:		die("%s doesn't appear to be a git directory", dir);
And the lines around there are:
	/* chdir to the directory. If that fails, try appending ".git" */
	if (chdir(dir) < 0) {
		if (chdir(mkpath("%s.git", dir)) < 0)
			die("unable to cd to %s", dir);
	}
	/* If we have a ".git" directory, chdir to it */
	chdir(".git");
	putenv("GIT_DIR=.");
	if (access("objects", X_OK) < 0 || access("refs/heads", X_OK) < 0)
		die("%s doesn't appear to be a git directory", dir);
	write_head_info();

We chdir to mairix.git/, and then try to chdir to .git beneath it _if_ _exists_; we do not care if the second chdir fails. So if you do not have mairix.git/.git, that's OK. We will stay in mairix.git/ directory and then set the GIT_DIR there.

If you do not have mairix.git/objects or mairix.git/refs/heads/ then that's when you get that error message.

	$ cd /home/richard/homepage/git/mairix.git
        $ ls -ld objects refs refs/heads
would tell us more.
        
Richard Curnow· Sep 30, 2005, 22:51 UTC · re: Junio C Hamano · lore

Re: git push to a local directory with no .git in it

Junio C Hamano <junkio <at> cox.net> writes:
> 
> Please don't presume, but dig.
Yes, sorry.  It was late...
> 
> If you do not have mairix.git/objects or mairix.git/refs/heads/
> then that's when you get that error message.

In fact, it turned out that I did still had a .git under mairix.git, but I'd mv'd its contents up to the mairix.git level and forgotten to delete the .git directory. Doh.

Thanks for your help, anyway.  It was a very strong clue what to look for.
Richard

← back to recent threads