Repository navigation
cz check range sometimes failed in GitLab CI #593
Description
Activity
Is it possible that the git repo doesn't setup remote 🤔
I run command
git remote -vin the CI , and it shows that the remote has been setup.Hmmm... As I'm not able to reproduce it, I don't have any clue on how we could fix it. But we can keep it open till you or someone encounter this issue again with more detail
Actually,this issue has come up again.
Do you mean after merging back to the master branch? If that's the case, your
HEADwill on onmasterso the result seem to be expected.@SsuperL Please try
cz --no-raise 3 check --rev-range master... it's output the message with a zero return codehttps://commitizen-tools.github.io/commitizen/bump/#easy-way
cz --no-raise 3 check --rev-range master..
I'll try it.Thank you!
@SsuperL did you try to
git fetchbefore your command ? its seems GitLab CI dont fetch every branch@SsuperL did you try to
git fetchbefore your command ? its seems GitLab CI dont fetch every branch
No, but it only appeared on some machines. And the commandgit branch -rshows branchorigin/masterexists.do you have remote
originand branchmaster?5 remaining items
Hi, I am having the same issue outside of CI. When I
git pushwith thepre-pushpre-commit hook, I get the following:fatal: ambiguous argument 'origin/HEAD..HEAD': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git <command> [<revision>...] -- [<file>...]'Whereas if I skip the verification everything works fine.
Unfortunately the repo is private and I can't share the url, but the configs are:
default_install_hook_types: - pre-commit - pre-push default_language_version: python: python3.9 repos: - repo: https://github.com/commitizen-tools/commitizen rev: v2.42.1 hooks: - id: commitizen-branch stages: [ push ]
And the hook (which should not matter) is:
#!/usr/bin/env bash # File generated by pre-commit: https://pre-commit.com # ID: 138fd403232d2ddd5efb44317e38bf03 # start templated INSTALL_PYTHON=/Users/lucabaggi/.local/share/pipx/venvs/pre-commit/bin/python ARGS=(hook-impl --config=.pre-commit-config.yaml --hook-type=pre-push) # end templated HERE="$(cd "$(dirname "$0")" && pwd)" ARGS+=(--hook-dir "$HERE" -- "$@") if [ -x "$INSTALL_PYTHON" ]; then exec "$INSTALL_PYTHON" -mpre_commit "${ARGS[@]}" elif command -v pre-commit > /dev/null; then exec pre-commit "${ARGS[@]}" else echo '`pre-commit` not found. Did you forget to activate your virtualenv?' 1>&2 exit 1 fi
Hi, I am having the same issue outside of CI. When I
git pushwith thepre-pushpre-commit hook, I get the following:fatal: ambiguous argument 'origin/HEAD..HEAD': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git <command> [<revision>...] -- [<file>...]'Whereas if I skip the verification everything works fine.
Unfortunately the repo is private and I can't share the url, but the configs are:
default_install_hook_types: - pre-commit - pre-push default_language_version: python: python3.9 repos: - repo: https://github.com/commitizen-tools/commitizen rev: v2.42.1 hooks: - id: commitizen-branch stages: [ push ]
And the hook (which should not matter) is:
#!/usr/bin/env bash # File generated by pre-commit: https://pre-commit.com # ID: 138fd403232d2ddd5efb44317e38bf03 # start templated INSTALL_PYTHON=/Users/lucabaggi/.local/share/pipx/venvs/pre-commit/bin/python ARGS=(hook-impl --config=.pre-commit-config.yaml --hook-type=pre-push) # end templated HERE="$(cd "$(dirname "$0")" && pwd)" ARGS+=(--hook-dir "$HERE" -- "$@") if [ -x "$INSTALL_PYTHON" ]; then exec "$INSTALL_PYTHON" -mpre_commit "${ARGS[@]}" elif command -v pre-commit > /dev/null; then exec pre-commit "${ARGS[@]}" else echo '`pre-commit` not found. Did you forget to activate your virtualenv?' 1>&2 exit 1 fi
Have you tried
git fetch? That works for me.Have you tried git fetch ? That works for me.
Does not for me... Perhaps it can mess up if I have
git push --forcepreviously?Hello, if I run
cz check --rev-range origin/main..HEADit works. I noticed that the pre-commit hook has--rev-range origin/HEAD..HEADwhich is an invalid ref. Perhaps when the repo has multiple branches the reference becomes invalid? Will try to make a reprex soon.Reacted by Santiago Fraire Willemoes, Charles Aracil, golegario96 and Daniel Black- added a commit that references this issue
on Mar 29, 2023 The following fixed it for me:
git remote set-head origin -a
Eventually found a semi-good explanation at: https://learnku.com/articles/71493
(My issue is actually when I'm trying to run
git pushwith the pre-push hook enabled, which then gives a similar error on ambiguity.)Reacted by Elijas Dapšauskas, marlon, daymade, Damien Storm, Mike-F-G and andyinnoChecking older or related issues to access the tool's status.
-
Access
masterbranch on GitLab CI : Only the current branch commits are accessible + shallow history, fetching is needed for any branch- Settings / CI/CD / Git shallow clone:
The number of changes to fetch from GitLab when cloning a repository. Lower values can speed up pipeline execution. Set to 0 or blank to fetch all branches and tags for each job(default: 50) - Comparing with another branch or even using the current branch or the merge request target branch needs fetching
- Variables : By default, the
*_SHAvariables are the ones for detecting the commit's / pipeline's context - Predefine variables: https://docs.gitlab.com/ee/ci/variables/predefined_variables.html)
- Settings / CI/CD / Git shallow clone:
-
The
CI_COMMIT_BEFORE_SHAvariable can be used to compare a CI with the previously pushed commit, but handlings are needed:- Limitations: Value is
000..in specific cases, and might be unknown if the commit was amended and force-pushed - Example: https://gitlab.com/RadianDevCore/tools/gcil/-/blob/45897937b0f2104967921101241cf067ef4beceb/.gitlab-ci.yml#L217
- Limitations: Value is
-
origin/HEAD..HEADpush issues : fix(pre-commit-hooks)!: allow empty ranges in 'commitizen-branch' #1209
-
Having the same issue as new user in 2025; git fetch did not help
Having the same issue as new user in 2025; git fetch did not help
Hey could you please provide an example so that we could try to reproduce and see what's happening? Thanks!
Triage from #1964: This is caused by GitLab CI's shallow clone —
origin/masterisn't present in the runner's local refs — not a commitizen bug. Workaround: setGIT_DEPTH: 0in your.gitlab-ci.yml(orgit fetch --unshallow/git fetch origin master:masterbefore runningcz check --rev-range). Suggesting we close this.Verification update (re #1964)
Reproduced against current master (4.15.1):
git clone --depth=1of the default branch —cz check --rev-range origin/master..HEADworks fine (origin/masteris present).- A more accurate GitLab-runner simulation (shallow + single-branch fetch missing
masterrefs) reproduces the exact failure:fatal: ambiguous argument 'origin/master..HEAD': unknown revision or path not in the working tree (exit 23) - Mitigations confirmed working:
git fetch --unshallow origin master:master— fixesmaster..HEADgit fetch origin master:refs/remotes/origin/master— fixesorigin/master..HEADwithout unshallowing
Verdict: NOT A BUG / CI ENVIRONMENT.
The failure is purely a GitLab-CI shallow-clone artifact:
origin/masterisn't a fetched ref in the runner's local repo. Commitizen passes the rev-range togit log, which errors as expected.Workaround for the user's GitLab pipeline:
variables: GIT_DEPTH: "0" # or sufficient depth to include the merge base # or script: - git fetch origin master:refs/remotes/origin/master - cz check --rev-range origin/master..HEAD
Closing-eligible.
(One improvement we could make in commitizen itself: catch the
git logerror incz check --rev-rangeand surface a clearer message like"Could not resolve rev-range '<range>': did you forget to fetch the base branch in CI?". Optional.)Closing as not a bug: reproduced as a CI shallow-clone artifact. Workarounds (
GIT_DEPTH: 0orgit fetch origin master:refs/remotes/origin/master) confirmed working. See verification comment above.




Description
Run
cz check --range origin/master..HEADto check commits in CI occasionally fails.And it worked after I retried the job.But sometimes it didn't work after retrying multiple times.
I couldn't find out the reason ,
Steps to reproduce
lint:
retry: 1
script:
- cz version
- cz check --rev-range origin/master..HEAD
Current behavior
cz check --rev-range origin/master..HEADfailed. Outputs attached below:Desired behavior
cz check --rev-rangecan run successfully in gitlab CI.Screenshots
Environment
commitizen version: 2.34.0
python version: 3.7.5
operating system: Linux