Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Commit is running twice when using commitizen with husky. #844

Open
asjadanis opened this issue Aug 15, 2021 · 12 comments
Open

Commit is running twice when using commitizen with husky. #844

asjadanis opened this issue Aug 15, 2021 · 12 comments

Comments

@asjadanis
Copy link

asjadanis commented Aug 15, 2021

I am trying to configure husky hooks with commitizen and lint-staged. This seems to trigger commit twice when I run yarn cz but when I run git commit it runs just once as expected. I have added githooks under the .husky folder and the configuration can be seen below. I have already seen the issue mentioned on readme and renamed my script to cz but it doesn't seem to be running as expected.

{
  "scripts": {
    "cz": "cz",
    "dev": "nodemon --watch '**/*.ts' --exec 'ts-node' src/server.ts",
    "lint": "eslint . --ext .ts",
    "lint-and-format": "eslint . --ext .ts --fix",
    "prettier-format": "prettier --config .prettierrc 'src/**/*.ts' --write",
    "test": "echo \"Error: no test specified\" && exit 1",
    "prepare": "husky install",
    "build": "tsc",
    "start": "NODE_ENV=production yarn build && node dist/server.js"
  },
  "lint-staged": {
    "src/**/*.ts": [
      "yarn prettier-format",
      "yarn lint-and-format"
    ],
    "*.ts": "eslint --cache --fix"
  },
  "config": {
    "commitizen": {
      "path": "cz-conventional-changelog"
    }
  },
  "dependencies": {
    "express": "^4.17.1"
  },
  "devDependencies": {
    "@types/express": "^4.17.13",
    "@typescript-eslint/eslint-plugin": "^4.29.1",
    "@typescript-eslint/parser": "^4.29.1",
    "commitizen": "^4.2.4",
    "cz-conventional-changelog": "^3.3.0",
    "dotenv": "^10.0.0",
    "eslint": "^7.32.0",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-prettier": "^3.4.0",
    "lint-staged": ">=10",
    "nodemon": "^2.0.12",
    "prettier": "^2.3.2",
    "ts-node": "^10.2.0",
    "typescript": "^4.3.5",
    "husky": ">=6"
  }
}

pre-commit

image

prepare-commit-msg

image

@imchamarac
Copy link

Hey @asjadanis, I'm kinda having the same issue, have you found a workaround for this?

@yecine06
Copy link

yecine06 commented Nov 9, 2021

I have the same problem i didn't find how to solve. Event if 'im not using husky and having a classic hook the command is run twice

@oxodesign
Copy link

@asjadanis did you find any solution to this?

@danielmahon
Copy link

same issue, runs twice using regular git hook or husky

YogeshUmeshVaity added a commit to YogeshUmeshVaity/nest-commitizen-commitlint that referenced this issue Jan 3, 2022
@techmunk
Copy link

This may or may not help people here, but we only run commitizen when no commit message is provided.

This means commitizen will not run with git commit -m, nor with git commit --amend, or for git merge commits etc... See https://git-scm.com/docs/githooks#_prepare_commit_msg for a full list of values the second arg can have.

  # Only run commitizen if no commit message was already provided.
  if [ -z "${2-}" ]; then
    export CZ_TYPE="${CZ_TYPE:-fix}"
    export CZ_MAX_HEADER_WIDTH=$COMMITLINT_MAX_WIDTH
    export CZ_MAX_LINE_WIDTH=$CZ_MAX_HEADER_WIDTH
    # By default git hooks are not interactive. exec < /dev/tty allows a users terminal to interact with commitizen.
    exec < /dev/tty && "$(dirname "$0")/git-cz.js" --hook
  fi

Not sure if this is the problem people here are facing, but it might help someone.

@vsanse
Copy link

vsanse commented May 27, 2022

This may or may not help people here, but we only run commitizen when no commit message is provided.

This means commitizen will not run with git commit -m, nor with git commit --amend, or for git merge commits etc... See https://git-scm.com/docs/githooks#_prepare_commit_msg for a full list of values the second arg can have.

  # Only run commitizen if no commit message was already provided.
  if [ -z "${2-}" ]; then
    export CZ_TYPE="${CZ_TYPE:-fix}"
    export CZ_MAX_HEADER_WIDTH=$COMMITLINT_MAX_WIDTH
    export CZ_MAX_LINE_WIDTH=$CZ_MAX_HEADER_WIDTH
    # By default git hooks are not interactive. exec < /dev/tty allows a users terminal to interact with commitizen.
    exec < /dev/tty && "$(dirname "$0")/git-cz.js" --hook
  fi

Not sure if this is the problem people here are facing, but it might help someone.

Thanks @techmunk. You are a life saver

@roman-supy-io
Copy link

this worked for me to make them both work at the same time:
prepare-commit-msg

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

if [ $2 == "template" ]; then
  exec < /dev/tty && npx cz --hook || true
fi

@ontoneio
Copy link

Hi @roman-supy-io ,

Just curious if you mind clarifying how you achieved this? Where is "template" coming from in the CLI? Is it something like git commit -m "template" or is it a flag? Like git commit --template?

@INT31302
Copy link

Hi @roman-supy-io ,

Just curious if you mind clarifying how you achieved this? Where is "template" coming from in the CLI? Is it something like git commit -m "template" or is it a flag? Like git commit --template?

$2 is template when run git commit not like git commit -m

@huantaoliu
Copy link

huantaoliu commented Feb 24, 2023

watching this

@thedath
Copy link

thedath commented Mar 18, 2023

@techmunk cz is running when I pass a commit message.
Screenshot 2023-03-18 at 10 36 32 PM

@Zhengqbbb
Copy link
Contributor

ref: #934 (comment)

git config --local core.editor cat

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests