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