【问题标题】:Why might git describe always return `fatal: No tags can describe SHA1` after I converted a svn repo to a git repo?为什么在我将 svn 存储库转换为 git 存储库后 git describe 总是返回“致命:没有标签可以描述 SHA1”?
【发布时间】:2021-01-12 11:01:56
【问题描述】:

我正在尝试将 svn 存储库转换为 git 存储库。因此,我遵循了之前SO question 的第二个(最受好评的)答案。我只是通过将 svn 标签转换为 git 标签并创建了带注释的标签,而不是轻量级标签,如下所示:

git checkout -b tag_v1 remotes/tags/v1
git checkout master
git tag -a v1 tag_v1 -m "release"
git branch -D tag_v1

我转换repo后,尝试描述git标签,如下:

git describe

但是,我只收到以下错误消息:

fatal: No tags can describe <SHA>

此外,当我尝试查看从与标签相关的提交到当前 HEAD 的祖先路径时,

git rev-list --ancestry-path <SHA RELATED TO TAG>..<SHA RELATED TO HEAD>

我收到一个空响应。根据this SO question 接受的答案,我确保获取所有远程分支。作为对第二个(最受好评的答案)的回应,我还确保每个标签都与提交消息相关联。 Git show针对特定标签显示:

tag A
Tagger: foo
Date:   bar

release

commit d1c276a83a4e21dc26e019905db9a237e1366013 (tag: A)
Author: baz
Date:   bazbaz

    Created a tag for version 2.8.0

有人知道为什么git describe 总是返回错误消息吗?我很感激任何提示或建议!

【问题讨论】:

  • 请注意,latest 版本(Git 分支上由 SVN 主干转换产生的最后一次提交)的标记只能描述最新 版本,而不是任何早期版本。但是如果你有旧版本的标签,例如,对于转换为 Git 提交的第一个 SVN 提交,这些标签应该能够描述任何以后的 Git 提交。所以我不确定你为什么会收到这个错误。如果您使用git tag -l 列出所有标签,哪些标签会针对哪些版本显示?

标签: git svn version-control


【解决方案1】:

经过长时间的反复试验,我想我已经找到了这个问题的答案。将 svn 存储库迁移到 git 存储库时创建标签的代码指示为每个标签创建分支,如下所示

git checkout -b tag_v1 remotes/tags/v1
git checkout master
git tag -a v1 tag_v1 -m "release"
git branch -D tag_v1

这些分支实际上再也不会合并到主分支中,对我来说似乎是“孤立的”。我认为git describe 因此在它们之间找不到路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多