2 回答
TA贡献1891条经验 获得超3个赞
首先,我没有足够的声誉来评论Pedro的答案,但他的方法在阶段失败了,因为实际上没有在存储上创建分支(从未调用存储库)。CheckoutStorer
其次,这是我第一次听说dir,所以不,不会为该dir中的分支创建记录。.git/loggit branch
这就引出了实际的解决方案,即作为 go-git 存储库分支的示例提供的解决方案。
要创建分支(脱离 HEAD):
Info("git branch test")
branchName := plumbing.NewBranchReferenceName("test")
headRef, err := r.Head()
CheckIfError(err)
ref := plumbing.NewHashReference(branchName, headRef.Hash())
err = r.Storer.SetReference(ref)
CheckIfError(err)
签出分支
Info("git checkout test")
w, err := r.Worktree()
CheckIfError(err)
err = w.Checkout(&git.CheckoutOptions{Branch: ref.Name()})
CheckIfError(err)
但是,这样,在 中没有此分支的配置,因此应该有对函数的调用,但这确实是可笑的不直观的。.git/configrepo.Branch
TA贡献1827条经验 获得超4个赞
我做到了:
创建对新分支的本地引用
branchName := "new-branch"
localRef := plumbing.NewBranchReferenceName(branchName)
创建分支
opts := &gitConfig.Branch{
Name: branchName,
Remote: "origin",
Merge: localRef,
}
if err := repo.CreateBranch(opts); err != nil {
return err
}
如果您确实需要更改为该分支...只是做一个结帐(不记得它是否实际更改为创建的分支与创建)
获取工作树
w, err := repo.Worktree()
if err != nil {
return rest.InternalServerError(err.Error())
}
收款处
if err := w.Checkout(&git.CheckoutOptions{Branch: plumbing.ReferenceName(localRef.String())}); err != nil {
return nil
}
如果要跟踪远程分支
创建远程引用
remoteRef := plumbing.NewRemoteReferenceName("origin", branchName)
跟踪远程
newReference := plumbing.NewSymbolicReference(localRef, remoteRef)
if err := repo.Storer.SetReference(newReference); err != nil {
return err
}
- 2 回答
- 0 关注
- 252 浏览
添加回答
举报