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 關注
- 303 瀏覽
添加回答
舉報