网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
用到的包
import (
"github.com/go-git/go-git/v5"
"github.com/go-git/go-git/v5/plumbing"
githttp "github.com/go-git/go-git/v5/plumbing/transport/http"
)
用密码或者AccesToken克隆
if gitAccessToken == "" {
// 用用户名和密码拉取
gitAuthName = gitUserName
gitAuthPass = gitUserPass
} else {
// 用AccessToken拉取
gitAuthName = "noemptystr"
gitAuthPass = gitAccessToken
}
var branch string
auth := &githttp.BasicAuth{
Username: gitAuthName,
Password: gitAuthPass,
}
\_, err := git.PlainClone(git_path, false, &git.CloneOptions{
URL: gitUrl,
Auth: auth,
Progress: os.Stdout,
ReferenceName: plumbing.NewBranchReferenceName(branch),
SingleBranch: true,
})
已知分支的情况
可以单独拉取指定分支
if gitBranch != "" {
\_, err := git.PlainClone(gitPath, false, &git.CloneOptions{
//gitPath为本地克隆目标位置
URL: gitUrl,
Auth: auth,
Progress: os.Stdout,
ReferenceName: plumbing.NewBranchReferenceName(branch),
SingleBranch: true, //只拉取一个分支
})
if err != nil {
fmt.Println("克隆失败:", err)
} else {
fmt.Println("克隆成功")
}
}
未知分支的情况
只能先拉取完整仓库,再找到最后一次提交分支的信息,最后切换到该分支
func cloneHEAD(auth \*githttp.BasicAuth, gitUrl string, git_path string) {
remoteRepo, err := git.PlainClone(git_path, false, &git.CloneOptions{
URL: gitUrl,
Auth: auth,
Progress: os.Stdout,
})
//拉取完整仓库
if err != nil {
fmt.Println("克隆失败:", err)
return
}
// 获取远程仓库的引用
remote, err := remoteRepo.Remote("origin")
![img](https://img-blog.csdnimg.cn/img_convert/05afed9420a421085a8d72530a8009fb.png)
![img](https://img-blog.csdnimg.cn/img_convert/36185814a709a40765c00263835e5fd1.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618658159)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
cs/618658159)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**