git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Christopher Tiwald <christiwald@gmail.com>
To: Hilco Wijbenga <hilco.wijbenga@gmail.com>
Cc: Git Users <git@vger.kernel.org>
Subject: Re: On using receive.denyNonFastForwards and advice.pushNonFastForward
Date: Mon, 9 Jul 2012 01:13:15 -0400	[thread overview]
Message-ID: <20120709051315.GA62124@gmail.com> (raw)
In-Reply-To: <CAE1pOi1M-fdMJtZw9MNL2R6zWvpXvWVo4ros_NSCQtLmQb6TOQ@mail.gmail.com>

From: Christopher Tiwald <christiwald@gmail.com>
To: Hilco Wijbenga <hilco.wijbenga@gmail.com>
Cc: Git Users <git@vger.kernel.org>
Bcc: 
Subject: Re: On using receive.denyNonFastForwards and
 advice.pushNonFastForward
Reply-To: 
In-Reply-To: <CAE1pOi1M-fdMJtZw9MNL2R6zWvpXvWVo4ros_NSCQtLmQb6TOQ@mail.gmail.com>

On Sun, Jul 08, 2012 at 02:26:50PM -0700, Hilco Wijbenga wrote:
> I was wondering how hard it would be to make "git push" more adamant
> about not pushing non-ff updates. So I wanted to see the effects of
> receive.denyNonFastForwards and advice.pushNonFastForward. (By the
> way, why is one plural and the other singular? That doesn't seem
> consistent?)

'advice.pushNonFastForward' doesn't control whether or not
the remote accepts non-fast-forward updates. Rather, it controls whether
or not advice displays when 'git push' errors because the user attempted
a non-fast-forward update. As of 1.7.11 (f25950f3), it was supplemented
with 'advice.pushNonFFCurrent', 'advice.pushNonFFDefault', and
'pushNonFFMatching'. Setting the original 'advice.pushNonFastForward'
config option to 'false' will disable all three of these situational
hints. None of them will affect the actual operation of 'git push'.

As for this series of commands, none of these are non-fast-forward
updates (i.e. a situation where a pushed branch tip is behind its remote
counterpart):

> HERE=$(pwd) &&
> git init --bare remote-repo &&
> cd remote-repo/ &&
> git config --add receive.denyNonFastForwards true &&
> cd .. &&
> git clone file://$HERE/remote-repo local-repo &&
> cd local-repo/ &&
> git config --add advice.pushNonFastForward true &&
> echo "1" > one.txt &&
> git add -A . && git commit -m 1 && git push origin master &&

This is the inital push to the remote:

$ git log --graph --oneline
* 32bbda2 1

$ git diff master origin/master ;# noop

> git checkout -b next &&
> echo "a" > two.txt &&
> git add -A . && git commit -m 2 &&
> git checkout master &&
> echo "2" > one.txt &&
> git add -A . && git commit -m 3 && git push origin master &&

This is a standard fast-forward update to the remote:

$ git log --graph --oneline
* 0176f87 3
* 32bbda2 1

$ git diff master origin/master ;# noop

> git merge next &&
> git push

This is also a standard fast-forward update to the remote:

$ git log --graph --oneline
*   b881618 Merge branch 'next'
|\
| * 843a285 2
* | 0176f87 3
|/
* 32bbda2 1

$ git diff master origin/master ;# noop

If you want to see a true non-fast-forward error from this point, try
this:

git reset --hard HEAD~1 &&
echo "non-ff" > one.txt &&
git add . && git commit -m 4 && git push origin master

You should get something like this (the advice will change based on your
version of git):

[master cf28ce8] 4
1 file changed, 1 insertion(+), 1 deletion(-)
To /tmp/remote-repo
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to '/tmp/remote-repo'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for
details.

The "hint" lines at the end are configured by the 'advice' options
described above.

--
Christopher Tiwald

  reply	other threads:[~2012-07-09  5:13 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-08 21:26 On using receive.denyNonFastForwards and advice.pushNonFastForward Hilco Wijbenga
2012-07-09  5:13 ` Christopher Tiwald [this message]
2012-07-09  8:36 ` Matthieu Moy

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

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

  git send-email \
    --in-reply-to=20120709051315.GA62124@gmail.com \
    --to=christiwald@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=hilco.wijbenga@gmail.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.
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 NNTP newsgroup(s).