【问题标题】:Unknown status type returned by go-gitgo-git 返回的未知状态类型
【发布时间】:2026-01-17 07:00:02
【问题描述】:

我正在尝试使用go-git library 获取在git 存储库中检查的文件的状态。

所以我正在运行这段代码 sn-p:

    var status = git.Status{}
    var fileStatus *git.FileStatus
    fileStatus = status.File(fullPathToApp)
    fmt.Printf("%v\n", fileStatus.Staging)
    fmt.Printf("%v\n", fileStatus.Worktree)

我得到的只是两个 63 被打印出来

63
63

这在 git status 方面对应什么?

我似乎无法与StatusCodedocumentation 建立直接关系。

顺便说一句,fullPathToApp 指向的文件是干净的,即它被跟踪和提交。

【问题讨论】:

    标签: git go go-git


    【解决方案1】:

    我认为你需要先打开存储库和工作树

        r, err := git.PlainOpen(pathToRepo)
        if err != nil {
            log.Fatal(err)
        }
    
        w, err := r.Worktree()
        if err != nil {
            log.Fatal(err)
        }
    

    然后获取状态

        ws, err := w.Status()
        if err != nil {
            log.Fatal(err)
        }
    

    要获取状态,您只需输入存储库中的文件名

        fmt.Printf("%q\n", ws.File("filename").Staging)
        fmt.Printf("%q\n", ws.File("filename").Worktree)
    

    我似乎无法与 StatusCode 的文档直接相关。

    返回的状态码是一个字节

    63 = ?

    【讨论】:

    • 谢谢,这真的很有帮助。遵循您的示例后,我可以打印两次?;问题是根据docs ? --> Untracked。但是该文件已正确签入git 并且未修改;为什么我得到的问号是对应于Untracked 的状态码?
    • 当我尝试打印状态时,如 fmt.Printf("%#v\n", ws) 出于某种原因,我得到一个空结构 git.Status{} 来说明重要的事情
    • 在打印我的存储库&git.Repository{Storer:(*filesystem.Storage)(0xc000492780), r:map[string]*git.Remote{}, wt:(*chroot.ChrootHelper)(0xc000450ae0)} 时,我的遥控器列表似乎也是空的;我错过了任何步骤吗?可能是身份验证?
    • 顺便说一句,这是一个私人仓库
    • 嗨@pkaramol,从你最初的问题来看,我想说你提到的这些额外点是在你解决了最初的问题之后出现的,你同意吗?在这种情况下,您可以更彻底地调查您身边发生的事情,如果您仍然有问题,也许可以问另一个问题。干杯