深入解读 go-git:纯 Go 实现的 Git 操作库及其在 Devtron 中的落地实践
云原生DevOps运维【免费下载链接】devtronThe only Kubernetes dashboard you need项目地址https://gitcode.com/gh_mirrors/dev/devtron点击查看免费下载导读本文围绕 Devtron 仓库 vendored 的 go-git v5版本号为v5.19.1见 go.mod展开系统讲解这一纯 Go 编写的 Git 实现库的核心设计、安装方式、基本用法与可扩展机制并追溯它在当前仓库中的真实调用链——Devtron 的 GitOps 模块正是借助 go-git 完成仓库初始化、拉取、提交与推送等操作。读完本文你将掌握 go-git 的 plumbing/porcelain 双层 API、常用操作选项的参数语义以及如何在真实项目中用几百行代码替代对git可执行文件的依赖。go-git 是什么纯 Go 的 Git 实现库go-git 是一个使用纯 Go编写、高度可扩展的 Git 实现库见 vendor 目录中的 README。它的核心定位包括底层plumbing与高层porcelain双重 API既可以在底层直接操作对象、引用、索引等 Git 内部结构也可以通过符合 Go 惯用风格的顶层 API 完成日常 Git 操作例如PlainClone、PlainOpen、PlainInit。可插拔的存储后端通过Storer接口go-git 支持内存文件系统、磁盘文件系统乃至自定义存储实现这是它区别于“简单调用 git 命令”的关键设计。在 Devtron 仓库中go-git 以 vendor 形式被完整引入并被 GitOps 模块的 SDK 管理器直接使用说明它在这一项目中承担的是进程内完成 Git 操作的基础设施角色。项目状态与 git 兼容性项目维护状态go-git 项目自 2015 年起持续开发。README 中说明在经历src-d组织相关的法律问题与数月停更后项目已恢复正常维护目前由多位个人贡献者含部分原作者维护并得到新公司 gitsight 的背书其在 gitsight 中作为规模化使用的关键组件见 vendor README。同时README 提到 Keybase、Gitea、Pulumi 等组织/项目也在广泛使用 go-git。与原生 git 的兼容矩阵go-git 的目标是与原生 git 完全兼容所有 porcelain 操作都按 git 的行为实现。由于 git 本身是数十年、数千贡献者构建的庞大工程go-git 仍存在部分功能缺口完整的对比清单记录在仓库内的 COMPATIBILITY.md 中。以下摘录几组关键能力状态仓库创建与获取功能子功能状态说明init基础 /--bare✅init--template/--separate-git-dir/--shared❌clone认证无认证 / access token / 用户名密码 / ssh✅见_examples/clone各示例clone--progress/--single-branch/--depth/--origin/--recurse-submodules/--shared✅快照操作add、status、commit、reset、rm、mv均 ✅add仅支持普通 add不支持其他 flag。分支与合并branch、checkout基本用法、tag、sparse-checkout均 ✅merge为 ⚠️仅支持 fast-forwardstash、mergetool为 ❌。分享与更新fetch、pull仅支持可 fast-forward 解决的合并、push、remote、submodule均 ✅submodule deinit为 ❌。检查与比较show、log、blame、grep均 ✅describe、bisect为 ❌。补丁操作diff✅支持 UnifiedDiff 输出的 Patch 对象apply、cherry-pick、rebase、revert为 ❌。传输协议http(s)://smart、git://、ssh://均 ✅http(s)://dumb、file://部分支持注意该实现会 shell 到系统git二进制并非纯 Go为 ⚠️/❌自定义协议 ✅可替换所有内置实现。索引与协议版本index v2、pack-protocol v1 ✅index v1/v3、pack-protocol v2、multi-pack-index 等 ❌。GPGgit-verify-commit、git-verify-tag均 ✅。实用提示如果你的业务强依赖merge非 fast-forward、rebase、cherry-pick、stash等未支持能力需要评估自行实现或退回调用 git CLI 的方案。安装与引入go-git 的推荐安装方式为 Go modules。在 Devtron 仓库中它的直接依赖声明为github.com/go-git/go-git/v5 v5.19.1见 go.mod同时配套依赖github.com/go-git/go-billy/v5 v5.9.0go.mod。模块启用与禁用两种模式下 import 路径不同import github.com/go-git/go-git/v5 // 启用 go modulesGO111MODULEon 或在 GOPATH 之外 import github.com/go-git/go-git // 未启用 go modules快速上手三个核心示例1. 基础克隆模拟git clone下面的代码等价于git clone https://github.com/go-git/go-git将仓库克隆到本地目录并把进度输出到标准输出_, err : git.PlainClone(/tmp/foo, false, git.CloneOptions{ URL: https://github.com/go-git/go-git, Progress: os.Stdout, }) CheckIfError(err)运行后输出类似Counting objects: 4924, done. Compressing objects: 100% (1333/1333), done. Total 4924 (delta 530), reused 6 (delta 6), pack-reused 3533示例中使用的CheckIfError、Info等辅助函数来自 go-git 官方_examples包仅用于示例演示不是库 API 的一部分。2. 内存克隆不落盘的git loggo-git 最有代表性的能力之一是把仓库直接克隆进内存完全绕开磁盘再遍历 HEAD 的提交历史// 在内存中克隆仓库创建 remote、本地分支并拉取对象 r, err : git.Clone(memory.NewStorage(), nil, git.CloneOptions{ URL: https://github.com/go-git/go-billy, }) CheckIfError(err) // 取 HEAD 指向的分支引用 ref, err : r.Head() CheckIfError(err) // 从 HEAD 取提交历史 cIter, err : r.Log(git.LogOptions{From: ref.Hash()}) CheckIfError(err) // 遍历并打印每个提交 err cIter.ForEach(func(c *object.Commit) error { fmt.Println(c) return nil }) CheckIfError(err)输出效果与git log一致commit ded8054fd0c3994453e9c8aacaf48d118d42991e Author: Santiago M. Mola santimola.io Date: Sat Nov 12 21:18:41 2016 0100 index: ReadFrom/WriteTo returns IndexReadError/IndexWriteError. (#9) commit df707095626f384ce2dc1a83b30f9a21d69b9dfc Author: Santiago M. Mola santimola.io Date: Fri Nov 11 13:23:22 2016 0100 readwriter: fix bug when writing index. (#10) ...这里的memory.NewStorage()就是 Storer 接口的内存实现仓库的 objects 与 refs 全部驻留内存不产生任何磁盘文件。这意味着 go-git 非常适合在 CI/CD 流水线、服务端后台任务中做用完即弃的仓库处理。深入参数Clone / Pull / Fetch / Push 选项解析go-git 的顶层操作都通过 Options 结构体传参源码位于 options.go每个 Options 都实现了Validate()方法用于校验字段并填充默认值。理解这些默认值是正确使用的前提。CloneOptions第 38 行起字段说明默认值URL待克隆的远程仓库地址必填为空时返回ErrMissingURL无Auth访问远程仓库所需的认证信息transport.AuthMethod无RemoteName添加的 remote 名称origin即常量DefaultRemoteNameReferenceName要克隆的远端分支plumbing.HEADSingleBranch为 true 时只 fetch 指定的ReferenceNamefalseMirror镜像克隆映射所有 refs 并配置 refspecfalseNoCheckout克隆后不 checkout HEADfalseDepth限制 fetch 的提交数浅克隆0RecurseSubmodules克隆后是否递归初始化子模块NoRecurseSubmodules0 /DefaultSubmoduleRecursionDepth100ShallowSubmodules子模块只克隆 1 层深度对应--shallow-submodulesfalseProgress接收服务器端人类可读信息的 writernil 时向服务器声明no-progress能力nilTagstag 拉取策略TagFollowing/AllTags/NoTagsAllTagsInsecureSkipTLSHTTPS 下跳过 SSL 校验falseClientCert/ClientKeyHTTPS 双向 TLS 的客户端证书与密钥nilCABundle附加的 CA 证书与系统证书池合并使用nilProxyOptions代理连接配置空Shared本地克隆时通过.git/objects/info/alternates共享对象危险操作falsePullOptions第 140 行起字段说明默认值RemoteName拉取的 remote 名originRemoteURL覆盖远端地址的自定义 URL空ReferenceName拉取的分支空则用 HEADplumbing.HEADSingleBranch/Depth同 CloneOptionsfalse / 0Auth认证信息无RecurseSubmodules是否同时拉取已填充子模块的新提交0Progress进度输出nilForce允许拉取更新不基于本地分支的远端分支falseInsecureSkipTLS/ClientCert/ClientKey/CABundle/ProxyOptionsTLS 与代理相关见上文FetchOptions第 207 行起增加RefSpecs []config.RefSpec自定义 refspec、Prune删除远端已不存在的本地 refTags默认值为TagFollowing跟随 fetch 历史中的 tag。PushOptions第 266 行起关键字段包括RefSpecs指定源对象推送到哪个目标 ref格式为可选的、源对象src、冒号:、目标 refdst空src可用于删除引用未设置时默认使用config.DefaultPushRefSpec。Force即使本地分支不基于远端分支也允许更新远端分支。RequireRemoteRefs仅当远端 ref 当前值等于指定值时允许更新条件更新。FollowTags推送被推 refs 可达的 annotated tags。ForceWithLease带租约的强制推送RefNameHash用于校验远端 ref 广告中的对象 ID。Options map[string]stringpush 时传输给服务器的选项。Atomic原子推送。此外CheckoutOptions第 376 行起支持Hashdetached HEAD、Branch默认master、Create创建新分支、Force丢弃本地改动、Keep保留本地改动与 Force 互斥ResetOptions第 440 行起支持MixedReset默认、HardReset、MergeReset、SoftReset四种模式。在 Devtron 中的真实落地GoGitSdkManagergo-git 在 Devtron 仓库中的实际使用位于 GitOps 模块。Devtron 通过GitCommandManager接口抽象 Git 操作并提供了两套实现默认的GoGitSDKManagerImpl基于 go-git SDK与可选的GitCliManagerImpl基于 git CLI由环境变量USE_GIT_CLI控制切换默认false即默认走 go-git见 GitCommandManager.go。GoGitSDKManagerImplGoGitSdkManager.go把 go-git 的顶层 API 组装成了三个业务方法AddRepo初始化并绑定 remotefunc (impl *GoGitSDKManagerImpl) AddRepo(ctx GitContext, rootDir string, remoteUrl string, isBare bool) error { repo, err : git.PlainInit(rootDir, isBare) if err ! nil { return err } _, err repo.CreateRemote(config.RemoteConfig{ Name: git.DefaultRemoteName, URLs: []string{remoteUrl}, }) return err }git.PlainInit对应git init随后通过config.RemoteConfig创建名为origin的 remote——这正是上面 CloneOptions 中DefaultRemoteName常量在业务侧的体现。Pull拉取目标分支func (impl *GoGitSDKManagerImpl) Pull(ctx GitContext, targetRevision string, repoRoot string) (err error) { _, workTree, err : impl.getRepoAndWorktree(repoRoot) if err ! nil { return err } pullOptions : git.PullOptions{ Auth: ctx.auth.ToBasicAuth(), } if len(ctx.CACert) 0 { pullOptions.CABundle []byte(ctx.CACert) } err workTree.PullContext(ctx, pullOptions) if err ! nil err.Error() already up-to-date { err nil return nil } return err }这里展示了 PullOptions 中Auth与CABundle的实战用法认证信息由BasicAuth.ToBasicAuth()转换为 go-git 的http.BasicAuthTLS 场景则把 CA 证书注入CABundle。值得注意go-git 的 pull 只支持 fast-forward 合并见 COMPATIBILITY.md因此 Devtron 在拉取时先判断already up-to-date错误并吞掉避免无意义的失败上报。CommitAndPush暂存、提交、推送func (impl *GoGitSDKManagerImpl) CommitAndPush(ctx GitContext, repoRoot, targetRevision, commitMsg, name, emailId string) (string, error) { repo, workTree, err : impl.getRepoAndWorktree(repoRoot) if err ! nil { return , err } err workTree.AddGlob() if err ! nil { return , err } commit, err : workTree.Commit(commitMsg, git.CommitOptions{ Author: object.Signature{ Name: name, Email: emailId, When: time.Now(), }, Committer: object.Signature{ Name: name, Email: emailId, When: time.Now(), }, }) if err ! nil { return , err } pushOptions : git.PushOptions{ Auth: ctx.auth.ToBasicAuth(), } if len(ctx.CACert) 0 { pushOptions.CABundle []byte(ctx.CACert) } err repo.PushContext(ctx, pushOptions) return commit.String(), err }这段代码完整覆盖了暂存全部改动AddGlob()→ 以指定身份提交object.Signature同时设置 Author 与 Committer→ 推送的完整链路返回的commit.String()即提交哈希。调用方GitOpsHelperGitOpsHelper.go在此基础上增加了冲突错误识别当推送错误包含failed to push some refs时将其包装为push failed due to conflicts。上下文与认证封装GitContext由 bean.go 定义通过BuildGitContext(ctx).WithCredentials(auth).WithTLSData(...)链式构造见 GitOpsHelper.go把 BasicAuth、CA 数据、TLS 开关统一携带到 go-git 调用中。Devtron 的 GitOps 客户端按提供商分流GitLab / GitHub / Azure DevOps / Bitbucket最终都汇入同一个GitOpsHelper完成实际 Git 操作见 GitOpsClient.go。扩展机制五个可替换的抽象点go-git 的高度可扩展并非口号EXTENDING.md 明确列出了五个可以不改源码就能替换/扩展的抽象点1. Dot Git Storer存储后端负责存储 Git 内部文件objects 与 refs。内置两种实现memory全部数据驻留内存git.Init(memory.NewStorage(), nil)filesystem数据落在操作系统文件系统git.Init(filesystem.NewStorage(osfs.New(/tmp/foo)), nil)。新实现只需实现 storage.Storer 接口组合了EncodedObjectStorer与ReferenceStorer。2. Filesystem工作区文件系统工作区管理基于 go-billy 的文件系统抽象Git 操作作用于具体的 filesystem 实现。内存初始化fs : memfs.New(); git.Init(memory.NewStorage(), fs)磁盘初始化fs : osfs.New(/tmp/foo); git.Init(memory.NewStorage(), fs)。新文件系统如云端存储可实现 go-billy 的 Filesystem 接口。3. Transport Schemes传输协议内置 http/https/ssh/git/file 等协议由transport.Transport接口表示可通过client.InstallProtocol替换内置实现。例如替换 https 实现以跳过 TLS 校验customClient : http.Client{ Transport: http.Transport{ TLSClientConfig: tls.Config{InsecureSkipVerify: true}, }, } client.InstallProtocol(https, githttp.NewClient(customClient))4. Cache对象缓存多种操作依赖对象缓存以获得最佳性能缓存功能由cache.Object接口定义内置cache.ObjectLRU与cache.BufferLRU两种实现可自定义实现替换。5. Hash哈希算法go-git 通过crypto.Hash接口表示哈希函数内置 SHA1github.com/pjbgf/sha1cd与 Go 标准库 SHA256。默认实现可通过hash.RegisterHash注册替换func init() { hash.RegisterHash(crypto.SHA1, sha1.New) }在 Devtron 中启用 go-git 的工程注意点结合仓库源码使用 go-git 时有几点工程经验值得参考认证与 TLS 统一封装Devtron 将 BasicAuth 与 CA 数据集中到GitContext避免在每次调用处重复组装GoGitSdkManager.go。already up-to-date 需显式吞掉go-git 的 pull 在无新提交时会返回该错误字符串业务侧需判断后置为 nilGoGitSdkManager.go。推送冲突识别push 失败时依据错误子串failed to push some refs判断冲突给出更可读的错误信息GitOpsHelper.go。双实现切换通过USE_GIT_CLI环境变量可在 go-git SDK 与 git CLI 之间切换便于在生产环境出现问题时快速降级GitCommandManager.go。功能边界若业务涉及 rebase、非 fast-forward merge、stash、cherry-pick、submodule deinit 等未支持操作需要预先规划替代方案见 COMPATIBILITY.md。总结go-git 以纯 Go 实现、plumbing/porcelain 双层 API、可插拔存储与传输协议这三大设计为 Go 生态提供了不依赖外部二进制的 Git 操作能力。在 Devtron 中它被封装为GitCommandManager的默认实现支撑 GitOps 配置仓库的初始化、拉取与提交推送闭环。对希望在 Go 服务中内嵌 Git 能力的开发者而言先对照 COMPATIBILITY.md 确认功能边界再参考 Devtron 的 GoGitSdkManager.go 组织认证、TLS 与错误处理是一条可以快速复用的落地路径。赞分享云原生DevOps运维【免费下载链接】devtronThe only Kubernetes dashboard you need项目地址https://gitcode.com/gh_mirrors/dev/devtron点击查看免费下载相关推荐深入解析go-git纯Go实现的Git库架构与核心设计深入解析go git纯Go实现的Git库架构与核心设计 go git是一个完全用纯Go语言实现的高度可扩展Git库诞生于2015年。该项目解决了传统Git实版本控制开发工具go-git 深入指南纯 Go 实现的 Git 库、源码剖析与在 cheat 项目中的实战应用go git 深入指南纯 Go 实现的 Git 库、源码剖析与在 cheat 项目中的实战应用 导读 go git 是一个用 纯 Go 编写的高可扩展 Git开发工具Devtron 的 RBAC 授权底座解析 vendored Casbin 及其在 Devtron 中的落地实践Devtron 的 RBAC 授权底座解析 vendored Casbin 及其在 Devtron 中的落地实践 本文以 Devtron 仓库中 vendor云原生DevOps运维上一篇从0到1学操作系统内核开发raspberry-pi-os 完整教程与6大核心课程全解析下一篇torchdiffeq 的 Adams 线性多步法显式与隐式怎么选创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

C++静态数组插入原理:从内存连续性理解挪动操作

C++静态数组插入原理:从内存连续性理解挪动操作

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 2:59:42 阅读更多 →
mirrord copy_target 详解:用副本 Pod 稳定调试不可靠的 Kubernetes 目标,以及 scale_down 整负载替换

mirrord copy_target 详解:用副本 Pod 稳定调试不可靠的 Kubernetes 目标,以及 scale_down 整负载替换

开发工具云原生CLI 【免费下载链接】mirrord Run any process, on your machine or in an AI agents environment, as if it were a pod in your Kubernetes cluster: real env vars, DNS, network, traffic. 项目地址: https://gitcode.com/gh_mirrors/mi/mirrord …

2026/10/13 2:59:42 阅读更多 →
贪心算法实战:智力大冲浪任务调度与惩罚最小化

贪心算法实战:智力大冲浪任务调度与惩罚最小化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 2:59:42 阅读更多 →

最新新闻

以太坊智能合约可升级性实战:代理模式、存储布局与UUPS升级方案详解

以太坊智能合约可升级性实战:代理模式、存储布局与UUPS升级方案详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 3:40:54 阅读更多 →
PTA 7-102 喊山:BFS+vector求解无向无权图最远节点

PTA 7-102 喊山:BFS+vector求解无向无权图最远节点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 3:40:54 阅读更多 →
2024年Windows DLL注入技术实战评估与EDR绕过分析

2024年Windows DLL注入技术实战评估与EDR绕过分析

1. 为什么“14种DLL注入技术”这个标题本身就是一个危险信号在某次内部红蓝对抗复盘会上,我听到一位资深渗透测试工程师说:“别急着数有多少种注入方法,先问一句——你到底想解决什么问题?”这句话让我记了三年。今天重看“14种DL…

2026/10/13 3:40:54 阅读更多 →
Linux运维必知:五种场景下重置root密码的完整实操指南

Linux运维必知:五种场景下重置root密码的完整实操指南

凌晨两点,你坐在空荡荡的机房里,或者对着远程控制台屏幕发呆——ssh连不上,sudo密码不对,root密码试了几十遍全部失败,而服务器上还跑着明天一大早要演示的环境。这不是段子,是每个Linux运维和管理员迟早会…

2026/10/13 3:40:54 阅读更多 →
Python文件读写全指南:从open底层到编码与大文件处理

Python文件读写全指南:从open底层到编码与大文件处理

读写文件是Python里最基础也最绕不开的操作。无论你是在写自动化脚本、处理日志,还是给项目做配置加载,几乎每天都要跟open、read、write这几个函数打交道。很多人觉得这个功能简单,实际用起来才发现坑不少:路径写错报FileNotFoun…

2026/10/13 3:40:54 阅读更多 →
被动审计实战:用icedump与nticedump实现内网资产盘点与风险发现

被动审计实战:用icedump与nticedump实现内网资产盘点与风险发现

简介:这份zip合集提供icedump 6.026与nticedump 1.14两套经典调试工具的完整文件包,面向系统程序员、逆向工程师与安全研究人员,覆盖用户态进程内存分析和Windows NT内核级转储两大场景。压缩包共含410个文件,整体仅2.62MB&#x…

2026/10/13 3:39:53 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →