threads / discuss / 6235

fatal: unable to create '.git/index': File exists

Subject: fatal: unable to create '.git/index': File exists

## tl;dr

5 messages between Jan 5, 2007 and Jan 6, 2007.

replies: 4people: 4as markdown or json

Len Brown· Jan 5, 2007, 16:50 UTC · lore

I kicked off a pull. Realized I was on the wrong branch and immediately did a ^C

Now I can't change branches:

# git checkout release fatal: unable to create '.git/index': File exists fatal: unable to create '.git/index': File exists

git reset --hard does not help.

curiously, moving .git/index to /tmp and repeating results in the same error.

clues?

thanks, -Len

Manu· Jan 5, 2007, 17:30 UTC · re: Len Brown · lore

Re: fatal: unable to create '.git/index': File exists

Got this message once. The reason was a git process still had a lock on the index file. Make sure you have no git processes left running from the interruption of git pull.

ps -ux | grep "git"
Manu
On 1/5/07, Len Brown <lenb@kernel.org> wrote:
Show 25 quoted lines
> I kicked off a pull.
> Realized I was on the wrong branch
> and immediately did a ^C
>
> Now I can't change branches:
>
> # git checkout release
> fatal: unable to create '.git/index': File exists
> fatal: unable to create '.git/index': File exists
>
> git reset --hard
> does not help.
>
> curiously, moving .git/index to /tmp and repeating
> results in the same error.
>
> clues?
>
> thanks,
> -Len
> -
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
Johannes Schindelin· Jan 5, 2007, 20:16 UTC · re: Len Brown · lore

Re: fatal: unable to create '.git/index': File exists

Hi,
On Fri, 5 Jan 2007, Len Brown wrote:
Show 8 quoted lines
> I kicked off a pull.
> Realized I was on the wrong branch
> and immediately did a ^C
> 
> Now I can't change branches:
> 
> # git checkout release
> fatal: unable to create '.git/index': File exists
This usually means that .git/index.lock exists. Try removing that file.

However, it _should_ be removed by the atexit() handler, methinks. I have no idea why it does not.

Ciao, Dscho

Fredrik Kuivinen· Jan 6, 2007, 09:24 UTC · re: Johannes Schindelin · lore

Re: fatal: unable to create '.git/index': File exists

On 1/5/07, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
Show 17 quoted lines
> Hi,
>
> On Fri, 5 Jan 2007, Len Brown wrote:
>
> > I kicked off a pull.
> > Realized I was on the wrong branch
> > and immediately did a ^C
> >
> > Now I can't change branches:
> >
> > # git checkout release
> > fatal: unable to create '.git/index': File exists
>
> This usually means that .git/index.lock exists. Try removing that file.
>
> However, it _should_ be removed by the atexit() handler, methinks. I have
> no idea why it does not.

We will get SIGINT when the user hits ^C so I don't think the atexit handler will run. However, we also install a signal handler for SIGINT which removes the lock file, so I don't really see how it can be left around...

There is a small race condition between open and signal as we do
    fd = open(lk->filename, O_RDWR | O_CREAT | O_EXCL, 0666);
    ...
    signal(SIGINT, remove_lock_file_on_signal);
    atexit(remove_lock_file);

in lock_file:lockfile.c. But I think it is very improbable that the user hits ^C between "open" and "signal". It might be worth fixing though.

Are there any other signals we might get when the user hits ^C? SIGPIPE?
- Fredrik
Len Brown· Jan 6, 2007, 03:01 UTC · re: Len Brown · lore

Re: fatal: unable to create '.git/index': File exists

On Friday 05 January 2007 11:50, Len Brown wrote:
Show 15 quoted lines
> I kicked off a pull.
> Realized I was on the wrong branch
> and immediately did a ^C
> 
> Now I can't change branches:
> 
> # git checkout release
> fatal: unable to create '.git/index': File exists
> fatal: unable to create '.git/index': File exists
> 
> git reset --hard
> does not help.
> 
> curiously, moving .git/index to /tmp and repeating
> results in the same error.

rm .git/index.lock seemed to do the trick. Hopefully nothing is toasted by this...

← back to recent threads