index file screwed up

3 messages, 2 authors, 2016-06-15 · open the first message on its own page

index file screwed up

From: Chuck Lever <hidden>
Date: 2016-06-15 22:42:07

i was working with a version of git that had a bug in add_cache_entry() 
that introduced a sorting error in my index.

[cel@dexter main]$ stg refresh -f
Refreshing patch "git-switch-branch"...AUTHORS: unmerged 
(098c1d3e9fe5c39b859ccff6c7d36d2c193d1b62)
AUTHORS: unmerged (098c1d3e9fe5c39b859ccff6c7d36d2c193d1b62)
COPYING: unmerged (d60c31a97a544b53039088d14fe9114583c0efc3)
COPYING: unmerged (d60c31a97a544b53039088d14fe9114583c0efc3)
INSTALL: unmerged (8d2bebd9d1824f1b7af5cfe6fbd11f9cbfde6d74)
INSTALL: unmerged (8d2bebd9d1824f1b7af5cfe6fbd11f9cbfde6d74)
MANIFEST.in: unmerged (581d0be2a5fb3569b06681b7d559f1279aa4104b)
MANIFEST.in: unmerged (581d0be2a5fb3569b06681b7d559f1279aa4104b)
README: unmerged (184ded8e08cb92a14b79c79f9919469ba352ab70)
README: unmerged (184ded8e08cb92a14b79c79f9919469ba352ab70)
...
fatal: git-write-tree: verify_merged: not able to write tree
stg refresh: git-write-tree failed

[cel@dexter main]$


how do i recover?

Re: index file screwed up

From: Linus Torvalds <torvalds@osdl.org>
Date: 2016-06-15 22:42:07


On Wed, 28 Sep 2005, Chuck Lever wrote:
i was working with a version of git that had a bug in add_cache_entry() 
that introduced a sorting error in my index.

[cel@dexter main]$ stg refresh -f
Refreshing patch "git-switch-branch"...AUTHORS: unmerged 
(098c1d3e9fe5c39b859ccff6c7d36d2c193d1b62)
AUTHORS: unmerged (098c1d3e9fe5c39b859ccff6c7d36d2c193d1b62)
COPYING: unmerged (d60c31a97a544b53039088d14fe9114583c0efc3)
COPYING: unmerged (d60c31a97a544b53039088d14fe9114583c0efc3)
INSTALL: unmerged (8d2bebd9d1824f1b7af5cfe6fbd11f9cbfde6d74)
INSTALL: unmerged (8d2bebd9d1824f1b7af5cfe6fbd11f9cbfde6d74)
MANIFEST.in: unmerged (581d0be2a5fb3569b06681b7d559f1279aa4104b)
MANIFEST.in: unmerged (581d0be2a5fb3569b06681b7d559f1279aa4104b)
README: unmerged (184ded8e08cb92a14b79c79f9919469ba352ab70)
README: unmerged (184ded8e08cb92a14b79c79f9919469ba352ab70)
...
fatal: git-write-tree: verify_merged: not able to write tree
stg refresh: git-write-tree failed

[cel@dexter main]$

how do i recover?
You don't. Your index is toast.

Let's hope you didn't write any unsorted trees with _earlier_ (non-merge) 
commits.

Do this:

 - build a new and trustworthy git somewhere else (from a tar-file if 
   nothing else). Install it.

 - get rid of the index and any half-way data in your working tree (you 
   might want to save any diffs with "git diff HEAD" first, but I suspect  
   you don't really care, since the changes came from some stg stuff, so
   you can always re-create them, no?)

	git reset --hard HEAD

 - run fsck, to verify that all your trees are sorted (if they aren't, you 
   be screwed, but "git-convert-objects" should be able to fix it for 
   you - possibly with some additional logic).

	git-fsck-objects --full

 - restart and try again.

That _should_ get you running again.

		Linus

Re: index file screwed up

From: Chuck Lever <hidden>
Date: 2016-06-15 22:42:07

Linus Torvalds wrote:
On Wed, 28 Sep 2005, Chuck Lever wrote:
quoted
i was working with a version of git that had a bug in add_cache_entry() 
that introduced a sorting error in my index.

[cel@dexter main]$ stg refresh -f
Refreshing patch "git-switch-branch"...AUTHORS: unmerged 
(098c1d3e9fe5c39b859ccff6c7d36d2c193d1b62)
AUTHORS: unmerged (098c1d3e9fe5c39b859ccff6c7d36d2c193d1b62)
COPYING: unmerged (d60c31a97a544b53039088d14fe9114583c0efc3)
COPYING: unmerged (d60c31a97a544b53039088d14fe9114583c0efc3)
INSTALL: unmerged (8d2bebd9d1824f1b7af5cfe6fbd11f9cbfde6d74)
INSTALL: unmerged (8d2bebd9d1824f1b7af5cfe6fbd11f9cbfde6d74)
MANIFEST.in: unmerged (581d0be2a5fb3569b06681b7d559f1279aa4104b)
MANIFEST.in: unmerged (581d0be2a5fb3569b06681b7d559f1279aa4104b)
README: unmerged (184ded8e08cb92a14b79c79f9919469ba352ab70)
README: unmerged (184ded8e08cb92a14b79c79f9919469ba352ab70)
...
fatal: git-write-tree: verify_merged: not able to write tree
stg refresh: git-write-tree failed

[cel@dexter main]$

how do i recover?

You don't. Your index is toast.

Let's hope you didn't write any unsorted trees with _earlier_ (non-merge) 
commits.
well, i did get this working, but i "cheated."

first i switched back to a known good version of git.  then, before i 
received your advice, i replaced the damaged index file with a file 
system snapshot backup from a couple of hours earlier.  after a couple 
of "stg refresh" commands, things seem back to normal.

it could be useful to have a few backup versions of the index file (like 
index.1, index.2, etc) and have write-tree rotate them before writing 
out a new index.

btw, the git version was my own, using a trie/list cache.  it mostly 
works, except for this little sorting bug.
Do this:

 - build a new and trustworthy git somewhere else (from a tar-file if 
   nothing else). Install it.

 - get rid of the index and any half-way data in your working tree (you 
   might want to save any diffs with "git diff HEAD" first, but I suspect  
   you don't really care, since the changes came from some stg stuff, so
   you can always re-create them, no?)

	git reset --hard HEAD

 - run fsck, to verify that all your trees are sorted (if they aren't, you 
   be screwed, but "git-convert-objects" should be able to fix it for 
   you - possibly with some additional logic).

	git-fsck-objects --full

 - restart and try again.

That _should_ get you running again.

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

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help