mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Norbert Nemec <>
To: "" <>
Subject: fast-import on existing branches
Date: Fri, 8 Mar 2019 10:50:29 +0000	[thread overview]
Message-ID: <> (raw)

Hi there,

I've struggled for quite some time to sort out documented, intended and actual behavior of git fast-import. Unless I'm completely mistaken, it seems to be a straightforward bug, but if that is the case, I am really surprised why nobody else has stumbled over it before:

I managed to use fast-import for a chain of commits onto a new branch into an empty repository.
I managed to use fast-import to create a new branch starting from an existing parent using the 'from' command as documented.

What I failed to do is to add commits on top of an existing branch in a new fast-import stream. As it seems, the variant of using 'commit' without 'from' only works on branches that were created within the same fast-import stream!

The different approaches I tried (each with new fast-import stream on existing repo with existing branch)
* 'commit' without 'from'
-> Error: "Not updating <branch> (new tip <hash> does not contain <hash>)
And indeed looking into the repo afterwards, a new commit exists without any parent.
* 'commit' with 'from' both naming the same branch
-> Error: "Can't create a branch from itself"
The only workarounds that I could find are to either explicitly looking up the top commit on the target branch and hand that to fast-import or create a temporary branch with a different name.

Looking through the code of fast-import.c, I can indeed lookup_branch and new_branch only deal with internal data structures and the only point were read_ref is called to actually read existing branches from the repo is in update_branch to check whether the parent was set correctly. What is missing is a call to read_ref in either lookup_branch or new_branch (probably both have to be reworked in some way to handle this cleanly). From all I can see a fix should be fairly straightforward to implement, but I am really not sure whether I have the full picture on this.

(I found all of this struggling with which appears to contains a complex and not fully correct mechanism to determine the 'initalParent' that appears to implement just such a workaround.)

I would be grateful for any input on this issue! Greetings,

             reply	other threads:[~2019-03-08 10:50 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-08 10:50 Norbert Nemec [this message]
2019-03-08 15:40 ` fast-import on existing branches Elijah Newren
2019-03-08 17:33   ` Norbert Nemec
2019-03-11 19:46     ` Elijah Newren
2019-03-12  9:18       ` Norbert Nemec

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:

  List information:

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \ \ \ \

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).