【问题标题】:How to checkout a new local branch using go-git?如何使用 go-git 签出新的本地分支?
【发布时间】:2020-09-28 22:37:52
【问题描述】:

当我尝试使用工作树结帐时;它不起作用,代码返回错误

err = worktree.Checkout(&git.CheckoutOptions{
    Create: true,
    Branch: "main",
})
if err != nil {
    log.Fatal("Cannot create 'main' branch\n" + err.Error())
}

输出:

[FATA] Cannot create 'main' branch
reference not found

我在使用时遇到同样的错误

repository.CreateBranch(&config.Branch{
    Name: "main",
})

【问题讨论】:

    标签: go go-git


    【解决方案1】:

    虽然 GitHub will soon rename master to main 是真的,但 Git 存储库(在 GitHub 上或不在 GitHub 上)的默认分支目前仍然是 master

    所以先试试吧:

    err = worktree.Checkout(&git.CheckoutOptions{
        Create: true,
        Branch: "master",
    })
    

    但如果目标是创建一个新分支,请确保 repo 已初始化或已签出到有效分支。
    例如,见repository_test.go

        r, _ := Init(memory.NewStorage(), nil)
        testBranch := &config.Branch{
            Name:   "foo",
            Remote: "origin",
            Merge:  "refs/heads/foo",
        }
        err := r.CreateBranch(testBranch)
    

    OP capsci 在 cmets 中添加:

    我尝试在创建分支期间删除 Merge,但在签出时出现“reference not found”错误(带和不带创建选项)

    我最终在hairyhenderson/gomplate PR 1217 中使用了hack:

    h := plumbing.NewSymbolicReference(plumbing.HEAD, plumbing.ReferenceName("refs/heads/main")) 
    err = storer.SetReference(h); 
    

    git.Init(storer, fs) 之后的这两行,我很高兴。

    【讨论】:

    • 感谢@VonC,但以上没有帮助。我所做的新提交仍然在“主”分支上
    • @capsci 您最初的问题(18 个月前)是关于错误,而不是关于提交掌握。无论如何,一旦你创建了分支(使用我的答案中的代码),你仍然需要先签出它,然后创建提交:他们将继续新的分支(因为签出)
    • 嗨@VonC,很抱歉在 18 个月后更新此内容
    • 嗨@VonC,我应该更好地解释这个问题。基本上,我试图在一个空的仓库中签出一个新的“主”分支。 repo, err := git.Init(memory.NewStorage(), memfs.New()) err = repo.CreateBranch(&config.Branch{Name:”main”,Merge: "refs/heads/foo"}) worktree,err := repo.Worktree() err = worktree.Checkout(&git.CheckoutOptions{Branch: “main”}) 当我结帐新创建的分支(在 CheckoutOptions 中设置或不设置“创建”)时,我仍然收到“未找到引用”错误。你能告诉我我还缺少什么吗?
    • @capsci 对于测试,我会避免 Merge "refs/heads/foo" 部分:当您刚刚初始化存储库时,我确信不会找到特定的引用(“foo”分支) .
    猜你喜欢
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 2017-10-09
    • 2014-01-17
    • 2021-06-27
    • 2020-12-02
    相关资源
    最近更新 更多