登录
首页 >  Golang >  Go问答

go-git将文件错误标记为Untracked,正确应该是Unmodified

来源:stackoverflow

时间:2024-03-15 14:03:29 428浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《go-git将文件错误标记为Untracked,正确应该是Unmodified》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

问题内容

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

这是我尝试运行的代码:

repo, err := git.plainopen(fullpathtorepo)
    if err != nil {
        return false, fmt.errorf("error: unable to open repository %s\n%s", fullpathtorepo, err)
    }

    worktree, err := repo.worktree()
    if err != nil {
        return false, fmt.errorf("error: unable to open worktree for repository %s\n%s", fullpathtorepo, err)
    }
    worktreestatus, err := worktree.status()
    if err != nil {
        return false, fmt.errorf("error: unable to retrieve worktree status for repository %s\n%s", fullpathtorepo, err)
    }
    fmt.printf("%q\n", worktreestatus.file("releases/filename").worktree)
    fmt.printf("%q\n", worktreestatus.file("/users/panteliskaramolegkos/myrepo/filename/releases/faros.yaml").worktree)
    return worktreestatus.isclean(), nil

即我正在尝试使用我想要检查的文件的完整路径和相关(到存储库)路径。

在这两种情况下打印出来的内容如下:

`?`
`?`

但是根据文档,这对应于 untracked 文件。

特定文件已正确提交并签入。

为什么我收到错误的状态代码?


解决方案


解决方法:

var fileStatusMapping = map[git.StatusCode]string{
        git.Unmodified:         "",
        git.Untracked:          "Untracked",
        git.Modified:           "Modified",
        git.Added:              "Added",
        git.Deleted:            "Deleted",
        git.Renamed:            "Renamed",
        git.Copied:             "Copied",
        git.UpdatedButUnmerged: "Updated",
}

func (r *Repo) FileStatus(filename string) (string, string, error) {
        w, err := r.worktree()
        if err != nil {
                return "", "", err
        }
        s, err := w.Status()
        if err != nil {
                return "", "", err
        }
        if s != nil {
                var untracked bool
                if s.IsUntracked(filename) {
                        untracked = true
                }
                fileStatus := s.File(filename)
                if !untracked && fileStatus.Staging == git.Untracked &&
                        fileStatus.Worktree == git.Untracked {
                        fileStatus.Staging = git.Unmodified
                        fileStatus.Worktree = git.Unmodified
                }
                return fileStatusMapping[fileStatus.Staging], fileStatusMapping[fileStatus.Worktree], nil
        }
        return "", "", nil
}

注意:故意在 s.file() 之前调用 s.isuntracked()

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>