Skip to contentSkip to conversation

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

DISCUSSION Len Brown 4 participants 5 messages Jun 15, 2016

lore
Share & tools
lore

Len Brown

author
#0 lore raw

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

#1 lore raw

Hi,

Quoted 8 lines · Len Brown

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

#2 lore raw
Quoted 10 lines · Johannes Schindelin

Hi,

Quoted 6 lines · Len Brown

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

Now I can't change branches:

Quoted 7 lines
Quoted 2 lines
# 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

#3 lore raw
In reply to Len Brown

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

Quoted 25 lines · Len Brown

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,

(quoted diff) +0 -2
-Len
-

To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

author
#4 lore raw
In reply to Len Brown
Quoted 10 lines · Len Brown

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
Quoted 5 lines

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