git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: cherry-pick / pre-commit hook?

From
Junio C Hamano <gitster@pobox.com>
Date
Dec 28, 2010, 18:16 UTC
Message-ID
<7vy679wynd.fsf@alter.siamese.dyndns.org>
In-Reply-To
<20101227093729.GB1201@burratino>
Jonathan Nieder <jrnieder@gmail.com> writes:
Show 16 quoted lines
> Dave Abrahams wrote:
>
>> if you're going to have a "pre-commit hook" concept,
>> but not run that hook for some kinds of commits, then that fact needs
>> to be documented.
>
> True, and thanks for a reminder.  Suggested wording?
>
> The current githooks(5) says
>
>  pre-commit
> 	This hook is invoked by git commit, and can be bypassed with
> 	--no-verify option.
>
> and leaves the question of whether it is invoked by git cherry-pick
> unanswered.

Yeah, but do we want to answer it in this section, or in git-cherry-pick's manual page?

After all "pre-commit" was _not_ about "before doing anything that creates a commit", but was about "before git-commit creates a commit". Changing that definition is fine as long as we have a good way to explain it to the users and more importantly a simple rule that the users can understand, and that rule _could_ be "anything that creates a new commit".

In reality "anything that creates a new commit" cannot be that simple rule, however. For example, "git pull" does attempt to create a new merge commit, but failing it because the work done by the other person you are pulling from does not conform _your_ standard defined by your hook is not a sane default.

I think the basic direction could be (I haven't thought things through, just a strawman):

 - Allow --verify/--no-verify to all commands that possibly create a new
   commit, and run pre-commit hook where an updated index is about to be
   made into a commit (for some commands this may not be very easy);
 - The guideline of picking the default would probably look like this:
   (1) for existing commands, keep the current behaviour;
   (2) for a new command, --verify should be the default if the command is
       primarily about letting the user do what s/he would/could/should
       have done as "git commit" in the first place (e.g. cherry-picking
       one's own commit from a separate branch or rebasing one's own
       unpublished branch on top of updated upstream), and --no-verify
       otherwise (i.e. taking other's work and using it in a context
       different from the original).
Previous: Dave AbrahamsNext: Jakub Narebski
Message 9 of 11 in “cherry-pick / pre-commit hook?”
  1. Dave AbrahamsDec 8, 2010
  2. Jonathan NiederDec 8, 2010
  3. Dave AbrahamsDec 8, 2010
  4. Jonathan NiederDec 8, 2010
  5. Dave AbrahamsDec 27, 2010
  6. Jonathan NiederDec 27, 2010
  7. Junio C HamanoDec 27, 2010
  8. Dave AbrahamsDec 27, 2010
  9. Junio C HamanoDec 28, 2010
  10. Jakub NarebskiDec 28, 2010
  11. Dave AbrahamsDec 29, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.