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