kohya_ss 仓库中 sd-scripts 子模块的更新实战指南(dev / main 分支)

发布时间:2026/9/15 13:00:32
kohya_ss 仓库中 sd-scripts 子模块的更新实战指南(dev / main 分支) kohya_ss 仓库中 sd-scripts 子模块的更新实战指南dev / main 分支【免费下载链接】kohya_ss项目地址: https://gitcode.com/GitHub_Trending/ko/kohya_ss导读kohya_ss 是一个基于 Gradio 的 Stable Diffusion / SDXL / FLUX 训练图形界面它的训练引擎并不在本仓库内而是通过git 子模块submodule方式将上游kohya-ss/sd-scripts嵌入到sd-scripts/目录中。本文以 examples/pull kohya_ss sd-scripts updates in.md 为核心完整讲解如何把本地子模块更新到上游最新的 dev 或 main 分支、如何在父仓库中记录这次更新并结合仓库内的.gitmodules配置、启动脚本与 AGENTS.md 约定帮你安全、可复现地完成每一次训练引擎升级。为什么 kohya_ss 要把 sd-scripts 做成子模块在动手执行命令之前先理解这个仓库的结构能避免更新过程中的大部分困惑。子模块的定义与指向仓库根目录下的 .gitmodules 明确定义了这个子模块[submodule sd-scripts] path sd-scripts url https://github.com/kohya-ss/sd-scripts.git也就是说sd-scripts/目录并不是 kohya_ss 自己维护的代码而是上游kohya-ss/sd-scripts仓库的一个固定提交commit的检出版本。父仓库只记录应该指向哪个提交并不把子模块的代码直接纳入自身版本控制。官方对子模块的边界约定仓库根目录的 AGENTS.md 中明确写着sd-scripts/is agit submodulepointing at upstream kohya-ss/sd-scripts. Never edit files inside it — GUI-side changes only. If a fix requires a sd-scripts change, describe it as a snippet in the PR body instead of committing to the submodule.这告诉我们两条重要规则不要直接修改sd-scripts/内部的文件GUI 侧的改动只应发生在 kohya_ss 自身的代码里如果某个修复需要改动 sd-scripts正确的做法是在 PR 描述中以代码片段形式给出而不是把改动提交进子模块。更新子模块的目标是跟随上游最新代码而不是在其上做本地定制。此外 AGENTS.md 还强调 GUI 代码应当通过 sd-scripts 的 CLI / 库接口来调用不要从kohya_gui/直接触及子模块内部实现这也是更新后 GUI 依然稳定的前提。首次获取为什么安装时要带 --recursive子模块的内容默认不会随父仓库自动检出因此 kohya_ss 的所有安装文档如 docs/Installation/pip_linux.md、docs/Installation/uv_linux.md、docs/installation_docker.md都要求使用递归克隆git clone --recursive https://github.com/bmaltais/kohya_ss.git启动脚本也内置了子模块的初始化兜底逻辑。以 gui-uv.sh 为例脚本在启动前会执行git submodule update --init --recursivegui-uv.bat 中同样有一句注释Make sure we are on the right sd-scripts commit随后执行git submodule update --init --recursive。这条命令的作用是把子模块初始化并检出到父仓库记录的提交保证你拿到的是与当前 GUI 版本匹配的训练引擎。理解这一点后下面的更新流程就顺理成章了更新 把 sd-scripts 切到上游新提交 让父仓库记下新提交。更新到上游 dev 分支推荐流程examples/pull kohya_ss sd-scripts updates in.md 给出的第一套命令用于把子模块更新到上游最新的开发分支cd sd-scripts git fetch git checkout dev git pull origin dev cd .. git add sd-scripts git commit -m Update sd-scripts submodule to the latest on dev逐条拆解这套命令的实际作用命令作用说明cd sd-scripts进入子模块目录后续 git 操作都在子模块自己的仓库上下文中执行git fetch拉取上游远端的最新引用只更新本地的远端跟踪分支不改变工作区git checkout dev切换到 dev 分支如果当前处于其他分支或游离 HEAD会先完成切换git pull origin dev合并上游 dev 分支的最新提交等价于git fetch 合并将本地 dev 推进到上游最新cd ..回到父仓库kohya_ss根目录后续操作的对象是父仓库git add sd-scripts把子模块的新提交记录加入暂存区子模块在父仓库中表现为一个特殊的 gitlink 条目git add更新的是这个指针git commit -m ...在父仓库中提交这次子模块指针更新这样其他协作者克隆/拉取后才能拿到同样的子模块版本更新到上游 main 分支稳定版流程如果你希望跟随稳定分支而不是开发分支使用 examples/pull kohya_ss sd-scripts updates in.md 给出的第二套命令cd sd-scripts git fetch git checkout main git pull origin main cd .. git add sd-scripts git commit -m Update sd-scripts submodule to the latest on main与 dev 流程的唯一区别是把分支从dev换成了main。main 通常是 sd-scripts 的稳定主线dev 则包含较新的开发特性选择哪条取决于你需要的功能是否已合入 stable。例如 README.md 的更新记录中提到Upgraded thesd-scriptssubmodule to v0.11.1说明子模块版本是跟随上游发版节奏迭代的——若你只想要稳定的训练行为优先跟随 main若需要实验性功能或上游最新修复再考虑 dev。更新前后的检查与验证更新不是执行完命令就结束建议配合以下检查确认状态正确。查看当前子模块指向在父仓库根目录执行git submodule status输出格式为commit path。如果 commit 前没有前缀-号说明子模块已正确检出若出现-前缀则代表尚未初始化或未检出。例如当前仓库实际检出的状态形如-6721028c79ee85a78b3a06dfd8954dae310a1cce sd-scripts查看父仓库中子模块指针的差异更新并git add sd-scripts之后可以用git diff --submodulelog这条命令会显示父仓库中记录的 sd-scripts 指针从哪个提交变到了哪个提交并列出期间的提交日志方便确认这次升级究竟带来了哪些训练引擎改动。更新后强制刷新子模块内容如果在别的机器上拉取了父仓库的新提交但sd-scripts/目录没有随之更新可以使用git submodule update --init --recursive这与 gui-uv.sh / gui-uv.bat 启动前执行的命令完全一致是把子模块同步到父仓库记录版本的通用手段。常见问题与避坑要点结合仓库约定与 git 子模块的通用行为以下是更新过程中最容易踩的坑直接改了子模块内部文件AGENTS.md 明确禁止在sd-scripts/内做本地修改。若只是跟随上游不要在任何文件上做本地改动否则git pull可能因本地冲突而失败若确实发现上游 bug应在 kohya_ss 的 PR 中给出修复片段而不是提交到子模块。忘记在父仓库提交指针变化只执行cd sd-scripts git pull而不做cd .. git add sd-scripts git commit父仓库记录的仍然是旧提交下次git submodule update会把子模块打回原形。原文档把回到父仓库并提交作为固定一步正是为此。游离 HEADdetached HEAD状态如果之前用git checkout commit而不是分支名会进入游离 HEAD。此时执行git checkout dev或main即可切回分支再拉取避免更新丢失。子模块未初始化如果克隆时没带--recursivesd-scripts/目录是空的任何在其内部的 git 操作都会失败。先执行git submodule update --init --recursive完成初始化。更新后 GUI 行为异常dev 分支变化较快可能与当前 GUI 版本存在参数不兼容。升级后建议先在测试配置上跑一轮训练仓库 test/config 下提供了 dataset 等示例配置验证再用于正式训练。小结在 kohya_ss 中更新 sd-scripts 子模块的本质是两步操作子模块内部切分支并 pull 上游最新代码父仓库git addgit commit记录新的指针。dev 与 main 两套流程命令几乎一致只是目标分支不同配合git submodule status、git submodule update --init --recursive等命令即可完成从获取、更新到验证的完整闭环。遵循仓库 AGENTS.md 的边界约定——只跟随上游、不修改子模块内部——就能长期、安全地保持训练引擎与 GUI 的同步更新。【免费下载链接】kohya_ss项目地址: https://gitcode.com/GitHub_Trending/ko/kohya_ss创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考