Tomas Carnecky <tom@xxxxxxxxxxxxx> wrote: > git version 1.6.6.78.gbd757c > > HEAD points to a non-existent branch refs/heads/master. Normal checkout > origin fails with: > error: Entry '.cvsignore' would be overwritten by merge. Cannot merge. > (the working tree does indeed contain this file). So I tried checkout -m > and git crashed. Workaround for me was reset --hard origin; checkout > origin. I have the repository backed up in case someone wants to try > themselves. > > $ gdb `which git` > GNU gdb 6.8 > Copyright (C) 2008 Free Software Foundation, Inc. > License GPLv3+: GNU GPL version 3 or later > <http://gnu.org/licenses/gpl.html> > This is free software: you are free to change and redistribute it. > There is NO WARRANTY, to the extent permitted by law. Type "show copying" > and "show warranty" for details. > This GDB was configured as "i386-pc-solaris2.11"... > (gdb) run checkout -m origin > Starting program: /export/home/tomc/local/git/bin/git checkout -m origin > warning: Lowest section in /lib/libpthread.so.1 is .dynamic at 00000074 > > Program received signal SIGSEGV, Segmentation fault. > 0x080788fa in cmd_checkout (argc=0, argv=0x8047538, prefix=0x0) at > builtin-checkout.c:450 > 450 merge_trees(&o, new->commit->tree, work, > (gdb) list > 445 ret = reset_tree(new->commit->tree, > opts, 1); > 446 if (ret) > 447 return ret; > 448 o.branch1 = new->name; > 449 o.branch2 = "local"; > 450 merge_trees(&o, new->commit->tree, work, > 451 old->commit->tree, &result); > 452 ret = reset_tree(new->commit->tree, > opts, 0); > 453 if (ret) > 454 return ret; > (gdb) p o > $1 = {branch1 = 0x8047650 "origin", branch2 = 0x0, subtree_merge = 0, > buffer_output = 1, verbosity = 0, diff_rename_limit = -1, > merge_rename_limit = -1, call_depth = 0, obuf = {alloc = 0, len = 0, buf > = 0x81643ac ""}, current_file_set = { > items = 0x0, nr = 0, alloc = 0, strdup_strings = 1}, > current_directory_set = {items = 0x0, nr = 0, alloc = 0, strdup_strings > = 1}} > (gdb) p new > $2 = {name = 0x8047650 "origin", path = 0x8166438 "refs/heads/origin", > commit = 0x8168f48} > (gdb) p work > $3 = (struct tree *) 0x8174f90 > (gdb) p old > No symbol "old" in current context. > (gdb) p result > $4 = (struct tree *) 0xfefc81be > (gdb) > > -- > To unsubscribe from this list: send the line "unsubscribe git" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > Does this patch help? --- >From b2203bded22db1a496ee3c9f6f5f4a384a8ccefa Mon Sep 17 00:00:00 2001 From: Daniel Baranski <mjucde@xxxxx> Date: Wed, 6 Jan 2010 08:58:21 +0100 Subject: [PATCH] checkout -m: Fix SEGFAULT if HEAD is not valid. Signed-off-by: Daniel Barański <mjucde@xxxxx> --- builtin-checkout.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/builtin-checkout.c b/builtin-checkout.c index 64f3a11..0ab59b2 100644 --- a/builtin-checkout.c +++ b/builtin-checkout.c @@ -422,7 +422,8 @@ static int merge_working_tree(struct checkout_opts *opts, struct merge_options o; if (!opts->merge) return 1; - parse_commit(old->commit); + if (!parse_commit(old->commit)) + die("Couldn't parse commit '%s'", old->path); /* Do more real merge */ -- 1.6.5.6 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html