使用LibGit2Sharp推送带标签者与日期的附注标签失败问题排查
问题原因及解决办法
问题原因
你遇到的核心问题是推送参数传递错误:
在调用Push方法时,你传入了createdTag.Target.Sha(附注标签指向的提交哈希)作为推送目标,这会让Git在远程仓库创建一个轻量标签——因为这种操作本质是把指定提交哈希直接关联到远程标签引用上,不会同步附注标签本身包含的签名、日期、描述等元数据对象。
附注标签是Git中的独立对象,包含完整的元数据,需要直接推送标签引用本身,而非它指向的提交。
解决办法
修改Push方法的调用逻辑,直接推送附注标签的规范引用,无需传入目标提交SHA:
var remote = _repository.Network.Remotes[Origin]; var credentials = _gitCredentialsResolver(); _repository.Network.Push( remote, createdTag.CanonicalName, // 直接推送附注标签的规范引用 new PushOptions { CredentialsProvider = (_, _, _) => new UsernamePasswordCredentials { Username = credentials.UserName, Password = credentials.Password.ConvertToPlainText() } });
也可以通过明确的引用规范字符串来推送,效果一致:
var remote = _repository.Network.Remotes[Origin]; var credentials = _gitCredentialsResolver(); // 格式为「本地引用:远程引用」,此处本地与远程引用名称一致 var pushRefSpec = $"{createdTag.CanonicalName}:{createdTag.CanonicalName}"; _repository.Network.Push( remote, pushRefSpec, new PushOptions { CredentialsProvider = (_, _, _) => new UsernamePasswordCredentials { Username = credentials.UserName, Password = credentials.Password.ConvertToPlainText() } });
修改后重新推送,远程仓库的标签会保留附注标签的所有元数据,克隆仓库后也能正常查看标签者、日期及描述信息。
内容的提问来源于stack exchange,提问作者bas
相关产品推荐
相关产品推荐

