当前位置: 首页 > wzjs >正文

湖南专业网站建设莆田网站建设优化

湖南专业网站建设,莆田网站建设优化,网站开发的教学视频,免费软文发布平台go-git是golang上纯go实现的git客户端,可用来同步文件到git仓库。 为什么不用gitee官方openapi,因为我需要强制推送覆盖,官方api不支持。 下面是一个通过xml.gz文件到gitee的代码示例 package clientimport ("fmt""gin-epg…

go-git是golang上纯go实现的git客户端,可用来同步文件到git仓库。

为什么不用gitee官方openapi,因为我需要强制推送覆盖,官方api不支持。

下面是一个通过xml.gz文件到gitee的代码示例

package clientimport ("fmt""gin-epg/internal/app/common/util""io""os""path/filepath""strings""time""gin-epg/internal/app/store""github.com/go-git/go-git/v5""github.com/go-git/go-git/v5/config""github.com/go-git/go-git/v5/plumbing/object""github.com/go-git/go-git/v5/plumbing/transport/http"
)// SyncXmlGzToGitee 同步多个 XML.gz 文件到 Gitee,每次同步时强制覆盖历史提交记录
func SyncXmlGzToGitee() error {url := ""userName := ""password := ""// 获取配置值repoUrl, err := util.GetConfigValue("sync.repoUrl")repoUserName, err := util.GetConfigValue("sync.repoUserName")repoPassword, err := util.GetConfigValue("sync.repoPassword")if repoUrl != nil {url = repoUrl.(string)}if repoUserName != nil {userName = repoUserName.(string)}if repoPassword != nil {password = repoPassword.(string)}if url == "" || userName == "" || password == "" {return fmt.Errorf("配置错误,请检查 sync.repoUrl、sync.repoUserName 和 sync.repoPassword 是否正确")}fileNames := []interface{}{"e9.xml.gz","e7.xml.gz","e.xml.gz",}// 创建 gitee同步目录tempDirPath := filepath.Join(os.TempDir(), "gitee-sync")if err := os.MkdirAll(tempDirPath, os.ModePerm); err != nil {return fmt.Errorf("创建临时目录失败: %v", err)}fmt.Printf("临时目录路径: %s\n", tempDirPath)// 创建存储工具下载目录tempDir := filepath.Join(os.TempDir(), "xmltvsync")if err := os.MkdirAll(tempDir, os.ModePerm); err != nil {return fmt.Errorf("创建临时目录失败: %v", err)}fmt.Printf("存储工具下载目录路径: %s\n", tempDir)// 初始化 OSS 存储服务ossService := store.GlobalStoreService// 初始化或打开本地临时仓库repoPath := filepath.Join(tempDirPath, "repo")fmt.Printf("Git 仓库路径: %s\n", repoPath)// 清理旧的仓库目录(如果存在)if _, err := os.Stat(repoPath); !os.IsNotExist(err) {if err := os.RemoveAll(repoPath); err != nil {return fmt.Errorf("清理旧的仓库目录失败: %v", err)}fmt.Printf("旧的仓库目录已清理: %s\n", repoPath)}repo, err := git.PlainOpen(repoPath)if err != nil {if strings.Contains(err.Error(), "repository does not exist") {// 如果仓库不存在,则初始化一个新的仓库repo, err = git.PlainInit(repoPath, false)if err != nil {return fmt.Errorf("初始化 Git 仓库失败: %v", err)}fmt.Printf("Git 仓库初始化成功: %s\n", repoPath)} else {return fmt.Errorf("打开 Git 仓库失败: %v", err)}}// 获取工作树worktree, err := repo.Worktree()if err != nil {return fmt.Errorf("获取工作树失败: %v", err)}fmt.Printf("工作树获取成功\n")// 遍历需要同步的文件列表for _, fileInterface := range fileNames {fileName, ok := fileInterface.(string)if !ok {fmt.Printf("配置 sync.filesToSync 中包含非字符串项,跳过该项: %v\n", fileInterface)continue}localFilePath := filepath.Join(tempDir, fileName)tempFilePath := filepath.Join(repoPath, fileName)// 下载文件if err := ossService.DownloadToFile(fileName, localFilePath); err != nil {fmt.Printf("下载文件 %s 失败: %v\n", fileName, err)continue}fmt.Printf("文件下载成功: %s\n", localFilePath)// 复制文件到 Git 仓库目录if err := copyFile(localFilePath, tempFilePath); err != nil {fmt.Printf("复制文件 %s 失败: %v\n", fileName, err)continue}fmt.Printf("文件复制成功: %s\n", tempFilePath)// 添加文件到索引if _, err := worktree.Add(fileName); err != nil {fmt.Printf("添加文件 %s 到 Git 失败: %v\n", fileName, err)continue}fmt.Printf("文件 %s 添加到索引成功\n", fileName)}// 获取当前时间并格式化currentTime := time.Now().Format("2006-01-02 15:04:05")// 提交更改commitHash, err := worktree.Commit(fmt.Sprintf("同步 XML.gz 文件 - %s", currentTime), &git.CommitOptions{Author: &object.Signature{Name:  "sync",Email: "sync@example.com",When:  time.Now(),},})if err != nil {return fmt.Errorf("提交更改失败: %v", err)}fmt.Printf("提交成功,提交哈希: %s\n", commitHash)// 添加远程仓库(如果尚未添加)remoteName := "origin"if _, err := repo.Remote(remoteName); err != nil {if err == git.ErrRemoteNotFound {// 添加远程仓库_, err := repo.CreateRemote(&config.RemoteConfig{Name: remoteName,URLs: []string{url},})if err != nil {return fmt.Errorf("添加远程仓库失败: %v", err)}fmt.Printf("远程仓库添加成功\n")} else {return fmt.Errorf("检查远程仓库失败: %v", err)}}// 强制推送到远程仓库if err := repo.Push(&git.PushOptions{RemoteName: remoteName,RefSpecs: []config.RefSpec{config.RefSpec("refs/heads/master:refs/heads/master"),},Auth: &http.BasicAuth{Username: userName,Password: password,},Force: true,}); err != nil {return fmt.Errorf("强制推送失败: %v", err)}fmt.Printf("强制推送成功\n")return nil
}// copyFile 复制文件
func copyFile(src, dst string) error {in, err := os.Open(src)if err != nil {return err}defer in.Close()out, err := os.Create(dst)if err != nil {return err}defer out.Close()_, err = io.Copy(out, in)return err
}

这里需要强制推送,没有git历史可以减少仓库体积。不能用go-git v4版,v4版不支持强制推送。

若需要兼容win7 golang1.20 需要降低go-git版本至github.com/go-git/go-git/v5 v5.9.0

可在go.mod文件中修改版本后执行 go mod tidy


文章转载自:

http://pf2OSzqX.smpmn.cn
http://J3o6wg6p.smpmn.cn
http://63763L2n.smpmn.cn
http://6ei58NaI.smpmn.cn
http://F0Yf1hQ8.smpmn.cn
http://YWzzEcKt.smpmn.cn
http://pF0PaARY.smpmn.cn
http://oc97DNln.smpmn.cn
http://sLXpJUDY.smpmn.cn
http://b0BweV1c.smpmn.cn
http://0ZO58rYU.smpmn.cn
http://C5kTi6BX.smpmn.cn
http://L7nI7rIt.smpmn.cn
http://HFtCo5G3.smpmn.cn
http://LBaoe7fV.smpmn.cn
http://E0xpiXMQ.smpmn.cn
http://IPsbyM1K.smpmn.cn
http://7h8po3jx.smpmn.cn
http://m3rUZcQ1.smpmn.cn
http://ZeIiGjUO.smpmn.cn
http://HhKKi90f.smpmn.cn
http://7KVsQsmD.smpmn.cn
http://p5CjOCDa.smpmn.cn
http://OMpPwP3Z.smpmn.cn
http://pzW2WGL5.smpmn.cn
http://BYQn6MEZ.smpmn.cn
http://8nTC6h4H.smpmn.cn
http://6UD5FCqd.smpmn.cn
http://ywoxSIUd.smpmn.cn
http://oVKG4KM6.smpmn.cn
http://www.dtcms.com/wzjs/652305.html

相关文章:

  • 建设一个充电站需要多少钱临沂做网站找哪家好
  • 咸阳做网站公司电话做设计兼职网站
  • 太原网站建设vhuashi濮阳市城乡一体化示范区主任
  • 庆阳网站设计费用手工制作网站
  • 网站前台的功能模块企业三合一建站公司具体该怎么找
  • godaddy如何创建网站怎么查域名的注册人
  • 线上渠道推广怎么做企业新网站seo推广
  • 游戏平台网站制作网站内容和备案不一样
  • 西安建站wordpress 编辑权限 发文章
  • 电子商务网站的建设方式免费企业cms建站系统
  • 中国最好的建设网站零基础视频制作剪辑培训
  • 网站建设技术教程视频项目建设进度
  • 零售客户电商网站登录厦门网站建站公司
  • 那里可以建设网站做短链的网站
  • 福建省建设资格管理中心网站广州建筑集团有限公司品牌
  • 青岛三吉互联网站建设公司自己做网站去哪买服务器
  • 广东智能网站建设费用最新新闻热点事件看法
  • 怎样能创建一个网站wordpress 爬虫 视频
  • 高端响应式网站网络营销企业有哪些公司
  • wordpress the7 建站做网商必备网站
  • 惠州建网站公司网站举报平台建设情况
  • 一起做网站17广州沈阳网页设计收费标准
  • 做网站后的收获哪些网站的简历做的比较好
  • 宁夏网站设计99作文网
  • 网站建设的英文牡丹江到林口
  • 如何建立公司网站网页win10 做网站服务器
  • 高端婚纱摄影网站深圳网站建设搜q479185700
  • 泰州做网站的什么叫网站建设四网合一
  • 北京环保网站建设备案的网站可以改域名吗
  • 总做总结 网站维护的收获wordpress 批量插件