git describe fails with “fatal: No names found, cannot describe anything.”

后端 未结 7 1982
梦如初夏
梦如初夏 2020-12-07 22:09

I\'m using git 1.7.1 on Ubuntu 10.10 amd64, and I\'m trying to extract the hash of my repository HEAD to use it in an automated version information that I compile into my pr

相关标签:
7条回答
  • 2020-12-07 22:12

    This command helped me: git fetch -t

    0 讨论(0)
  • 2020-12-07 22:22

    This happens if you don't have any tags in your repository. If the repository does have tags, then you're in a shallow clone (this is the default in CI systems like TravisCI or GitHub Actions).

    To fetch the history (including tags) from within a shallow clone, run

    git fetch --prune --unshallow
    

    For example, in the case of GitHub actions:

    - uses: actions/checkout@v2
    - run: git fetch --prune --unshallow
    

    Afterwards, git describe should work again.

    0 讨论(0)
  • 2020-12-07 22:23

    It sounds like you're expecting git-describe to include the most recent tag and number of commits since that tag. However, the fatal: No names found message means you don't have any tags in your repository. You need to have at least one tag in the commit history in order for git describe to tell you the latest tag.

    Just guessing, but perhaps you tagged a commit somewhere else, but never pushed the tag upstream (maybe you pushed the commit upstream, tagged it later, and didn't repush?). Now a new clone of your upstream is giving you this error (since it doesn't have any tag). If that's the case, you could try git push --tags from the repository that has the tag you want (where git describe is doing what you expect). Then do git pull on the repository that doesn't have the tag.

    0 讨论(0)
  • 2020-12-07 22:28

    I had the similar issue while working on a CI job, the issue was git clone or checkout scm used did not fetch tags while cloning the repo.

    Fetching without tags Fetching upstream changes from https://github.**********

    You can enable fetch tags by selecting "Advanced clone behaviours" and then clicking on fetch tags ..

    0 讨论(0)
  • 2020-12-07 22:34

    If you want the id of your HEAD then you don't need describe, you should just use rev-parse.

    git rev-parse HEAD
    

    If you want an abbreviated hash you can use --short.

    git rev-parse --short HEAD
    

    If you want a "describe" to fall back to an abbreviated hash if it can't find any suitable tags, you can use --always.

    git describe --always
    
    0 讨论(0)
  • 2020-12-07 22:35

    I have had this problem in a CI build environment where the CI tool was performing a shallow clone of the repository. This was frustrating, because in my development environment, the command

    git describe --tags
    

    would give me output like

    2.2.12-7-g8ec9d6c9
    

    whereas in the build environment I would get the "fatal no names found" error. If I tried using the --always tag

    git describe --tags --always
    

    then I would simply get the hash of the latest commit, but not the most recent tag prior to that commit

    8ec9d6c9
    

    Performing a git pull in the build environment wouldn't help, because once the repo has been cloned shallowly, future pulls will not update the tags.

    The solution was to ensure that the initial clone of the repo in the build environment was not a shallow clone (i.e. the git clone command was not used with --depth, --shallow-since or --shallow-exclude parameters).

    0 讨论(0)
提交回复
热议问题