git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Yann Dirson <dirson@bertin.fr>
To: Junio C Hamano <gitster@pobox.com>
Cc: git list <git@vger.kernel.org>
Subject: Re: [BUG] Cannot push some grafted branches
Date: Wed, 12 Dec 2012 09:44:32 +0100	[thread overview]
Message-ID: <20121212094432.6e1e48c8@chalon.bertin.fr> (raw)
In-Reply-To: <7vd2yg8ngk.fsf@alter.siamese.dyndns.org>

On Tue, 11 Dec 2012 10:15:23 -0800
Junio C Hamano <gitster@pobox.com> wrote:

> Yann Dirson <dirson@bertin.fr> writes:
> 
> > There seems to be some bad interactions between git-push and grafts.
> > The problem seems to occur when a commit that exists in the remote
> > repo is subject to a graft in the local repo, and we try to push one
> > of the fake parents.
> 
> History tweaking by grafts is only visible inside your local
> repository and objects are not rewritten, and grafts are not
> transferred across repositories.  They were invented to be used as a
> stop-gap measure until you filter-branch the history before
> publishing (or if you do not publish, then you can keep using your
> local grafts).
> 
> Isn't this well known?  Perhaps we would need to document it better.

I am well aware of that, and did not intend to push any grafted commit.
I am attempting to push a well-formed commit, which happens to be used as
a grafted commit's fake parent, and my interpretation is that git reacts
as if it was considering that the remote already had that commit, possibly
because it would not ignore grafts when deciding which commits are already
known to the remote.

> What you can do is to use "replace" instead and publish the replace
> refs, I think.  Object transfer will then follow the true parenthood
> connectivity and people who choose to use the same replacement as
> you do can fetch the replace ref from you (this will grab objects
> necessary to complete the alternative history) and install it.

I am only using grafts as a temporary and lightweight drafting area,
before setting the results in stone - although in my case it will be
with filter-branch rather than replace, but the idea is the same.  I just
got bitten when attempting to push a valid branch while the grafts were in
effect, when in fact they should have had no influence at all.

In fact, I even looked for a way to specify an alternate (or supplementary)
grafts file for this drafting work, so only well-controlled git invocations
would see them, whereas the others would just ignore them, and could not find
any - nor could I identify an existing way of disabling the use of grafts by
other means than moving it out of the way.  In this respect, they seem to be
lacking a few features, when compared to "replace" refs, but they have different
uses, and just using the latter as a drafting area is just not adequate.

I thought about adding support for a GIT_GRAFTS_FILE envvar, which would
default to $GITDIR/info/grafts, or maybe with a more general addition of a
GIT_EXTRA_GRAFT_FILES envvar, but I'm not sure the latter would be that useful.

-- 
Yann Dirson - Bertin Technologies

  reply	other threads:[~2012-12-12  8:44 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-11 14:39 [BUG] Cannot push some grafted branches Yann Dirson
2012-12-11 18:15 ` Junio C Hamano
2012-12-12  8:44   ` Yann Dirson [this message]
2012-12-12 10:54     ` Yann Dirson
2012-12-12 19:57     ` Junio C Hamano
2012-12-17  7:52       ` Yann Dirson
2012-12-17  8:56         ` Junio C Hamano
2012-12-17 10:30           ` Yann Dirson
2012-12-17  8:43       ` Thomas Rast
2012-12-17 10:40         ` Yann Dirson
2012-12-17 13:43           ` Christian Couder
2012-12-17 14:02             ` Yann Dirson
2012-12-17 20:03             ` Andreas Schwab
2012-12-17 21:14               ` Junio C Hamano
2012-12-18 11:00                 ` Yann Dirson
2012-12-18 12:03                   ` Johannes Sixt
2012-12-18 12:49                     ` Thomas Rast
2012-12-18 13:41                       ` Yann Dirson
2012-12-18 14:31                         ` Thomas Rast
2012-12-18 16:24                         ` Jeff King
2012-12-19  7:13                           ` Johannes Sixt
2012-12-19 13:06                             ` Jeff King
2012-12-18 16:09                   ` Junio C Hamano
2012-12-19  8:29                     ` Yann Dirson
2012-12-19 13:12                     ` Thomas Rast
2012-12-19 20:07                       ` Junio C Hamano
2012-12-21 12:47                         ` Michael J Gruber
2012-12-21 16:58                           ` Junio C Hamano
2012-12-22 16:38                             ` Michael J Gruber

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:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

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

  git send-email \
    --in-reply-to=20121212094432.6e1e48c8@chalon.bertin.fr \
    --to=dirson@bertin.fr \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* 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

	https://80x24.org/mirrors/git.git

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).