Thanks! I just tested it on the example I quoted before, and it works. I misunderstood the reset command. I thought it took you to some previous commit. But now I see it takes you back to before the initial commit if you don't use the "from" command. -Ben On Wed, Jun 11, 2008 at 8:17 PM, Shawn O. Pearce <spearce@xxxxxxxxxxx> wrote: > Ben Lynn <benlynn@xxxxxxxxx> wrote: >> 1. The import/export language poorly handles distinct initial commits >> on the same branch, because given two commits with same branch name, >> it assumes the latter is the descendant of the former (if there are no >> "from" commands). >> >> Normally this is what you want. But if your project, like git, ever >> merges distinct initial commits, then all but the first will >> unexpectedly gain parents, corrupting all their descendants' hashes. > ... >> As a workaround, I have a custom importer that knows that >> git-fast-export omits the "from" command in initial commits. But there >> should be a command to specify that the current commit is an initial >> commit, allowing reliable export of projects such as git. > > fast-export is wrong, and is using the language wrong. fast-import > is correct. Because I said so. :-) > > No, seriously, fast-import came along first and can describe what > you are referring to as the many initial root commits in git.git. > The issue is fast-export is not generating commands to say as much. > > Its quite easily fixable. > > When we output a commit in handle_commit() we just need to reset > the branch if we have no parents. That simple. This is totally > untested, but I think it fixes it. > > > diff --git a/builtin-fast-export.c b/builtin-fast-export.c > index 1dfc01e..d0a462f 100644 > --- a/builtin-fast-export.c > +++ b/builtin-fast-export.c > @@ -188,6 +188,8 @@ static void handle_commit(struct commit *commit, struct rev_info *rev) > mark_object(&commit->object); > if (!is_encoding_utf8(encoding)) > reencoded = reencode_string(message, "UTF-8", encoding); > + if (!commit->parents) > + printf("reset %s\n", (const char*)commit->util); > printf("commit %s\nmark :%d\n%.*s\n%.*s\ndata %u\n%s", > (const char *)commit->util, last_idnum, > (int)(author_end - author), author, > > -- > Shawn. > -- 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