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

5 messages from 2007-01-05 to 2007-01-06. Participants: Len Brown, Manu, Johannes Schindelin, Fredrik Kuivinen.
Thread: https://gitlist.dev/t/6235

## Len Brown, 2007-01-05 16:50

Subject: fatal: unable to create '.git/index': File exists
Message-ID: <200701051150.09968.lenb@kernel.org>
URL: https://gitlist.dev/e/200701051150.09968.lenb%40kernel.org

```
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, 2007-01-05 17:30

Subject: Re: fatal: unable to create '.git/index': File exists
Message-ID: <f898cca90701050930l21338b88t1bd75e037beeca05@mail.gmail.com>
URL: https://gitlist.dev/e/f898cca90701050930l21338b88t1bd75e037beeca05%40mail.gmail.com
In-Reply-To: <200701051150.09968.lenb@kernel.org>

```
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:
> 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, 2007-01-05 20:16

Subject: Re: fatal: unable to create '.git/index': File exists
Message-ID: <Pine.LNX.4.63.0701052115161.22628@wbgn013.biozentrum.uni-wuerzburg.de>
URL: https://gitlist.dev/e/Pine.LNX.4.63.0701052115161.22628%40wbgn013.biozentrum.uni-wuerzburg.de
In-Reply-To: <200701051150.09968.lenb@kernel.org>

```
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.

Ciao,
Dscho

```

## Len Brown, 2007-01-06 03:01

Subject: Re: fatal: unable to create '.git/index': File exists
Message-ID: <200701052201.39727.lenb@kernel.org>
URL: https://gitlist.dev/e/200701052201.39727.lenb%40kernel.org
In-Reply-To: <200701051150.09968.lenb@kernel.org>

```
On Friday 05 January 2007 11:50, 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
> 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...

```

## Fredrik Kuivinen, 2007-01-06 09:24

Subject: Re: fatal: unable to create '.git/index': File exists
Message-ID: <4c8ef70701060124u3fa1dddfp5347a006c4ebb13d@mail.gmail.com>
URL: https://gitlist.dev/e/4c8ef70701060124u3fa1dddfp5347a006c4ebb13d%40mail.gmail.com
In-Reply-To: <Pine.LNX.4.63.0701052115161.22628@wbgn013.biozentrum.uni-wuerzburg.de>

```
On 1/5/07, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
> 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

```
