commitizen / cz-cli

The commitizen command line utility. #BlackLivesMatter
http://commitizen.github.io/cz-cli/
MIT License
16.7k stars 547 forks source link

Git-generated trailers are not preserved #820

Open CJKay opened 3 years ago

CJKay commented 3 years ago

Commitizen's --hook option truncates the COMMIT_EDITMSG file. This wipes the Signed-off-by trailer generated by Git's -s flag, as well as any other trailers that might have been there before running Commitizen, and forces us to amend our commits after the fact.

We have a temporary workaround in our hook for this, which might offer some insight:

#!/bin/bash

file="$1"
type="$2"

if [ -z "$type" ]; then # only run on new commits
    #
    # Save any commit message trailers generated by Git.
    #

    trailers=$(git interpret-trailers --parse "$file")

    #
    # Execute the Commitizen hook.
    #

    (exec < "/dev/tty" && npx --no-install git-cz --hook) || true

    #
    # Restore any trailers that Commitizen might have overwritten.
    #

    printf "\n" >> "$file"

    while IFS= read -r trailer; do
        git interpret-trailers --in-place --trailer "$trailer" "$file"
    done <<< "$trailers"
fi

Version: cz-cli@4.2.2, cz-conventional-changelog@3.3.0

manang commented 2 years ago

can you tell me where I have to put this config file? Thanks

CJKay commented 2 years ago

can you tell me where I have to put this config file? Thanks

This needs to be in your prepare-commit-msg Git hook (.git/hooks/prepare-commit-message, or .husky/prepare-commit-message if you use Husky [we do]).