关于comfyui的搜索框卡顿问题(aigodlike)以及git机制了解
在更新comfyui的版本之后,发现搜索框会特别卡
我以为是新版本的搜索框问题,换回旧版本的样式还是一样的卡,查了一下发现就是个插件冲突的问题
aigodlike-comfyui-translation
这个是一个翻译插件,可以切换中英文

但是新版本会跟他有冲突,我去看了一下github

作者已经不再更新了,我尝试更新最新版本,还是有这个问题,不过作者不更新了那就没啥办法
去社区看了一下,说是旧版本没有问题

那就直接切换旧版本就行,直接到这个插件的文件夹里,使用cmd命令行输入命令
git checkout cf8f9a8
搞定,换回插件的旧版本旧没啥问题了

git机制
主要是换版本的时候,出现一些警告,可以看到上面说了一大堆,什么你是游离的head,用git switch之类的,不过最终可以看到切换成功
HEAD is now at cf8f9a8 更新中文
于是我又查了一下这个是什么问题,顺便再了解一下git的机制
Git 存的不是 “差异”,而是 “快照”
这是 Git 最核心的设计,和很多老式版本控制工具不一样。
- 老式工具(如 SVN):存的是 “变化”。比如你改了文件里的 3 行,它就存这 3 行的差异。
- Git:存的是 “快照”(Snapshot)。每次你提交(Commit),Git 会给整个项目拍一张 “全照”,记录下所有文件当前的状态。
类比:这就像玩单机游戏。
- 老式工具:只记 “你刚才打了哪个怪”。
- Git:直接存了一个 “存档文件”,记录了你当前的血量、装备、位置等所有状态。
简单来说,你提交新的版本,他是直接一个快照(跟拍照一样),把所有状态全部记录
每次你执行
git commit,就生成了一个提交对象。
- 唯一 ID(哈希值):每个提交都有一个独一无二的 ID(就是你截图里的
cf8f9a8这种,通常是 40 位字符,这里只显示前 7 位)。- 包含内容:
- 指向刚才说的 “项目快照” 的指针。
- 你的名字、提交时间、提交说明(比如 “更新中文”)。
- 父提交指针:指向 “上一个提交”。
每个版本都有唯一值,用图书来比喻,就是这个id(类似我们前面cf8f9a8),就是书本后面ISBN编码,每本书都是不一样的
切换版本
每一本书按照版本排列,我们切换就是拿哪一本书出来看(对应切换id),所以我们直接切换id就可以回到历史版本
而且这个东西还不需要联网,我们从git上面拉取项目下来的时候,各种版本他都已经给你储存好了,就在.git文件夹里面

这里面已经记录了所有版本的信息,你一切换,直接就本地运行搞定,不用去联网
但是我有一个疑问,一个项目提交了几百万次(大项目),那么这个记录不会爆炸吗?明明是直接存快照的(每个版本都有一个存档)
git存储优化
其实他就是挂羊头卖狗肉,说是快照,其实也是有老版本svn差异存储
第一层优化:“懒” 得复制 —— 未修改的文件只存 “引用”
Git 虽然号称每次提交都拍 “全量快照”,但它不会真的把所有文件重新复制一遍。
这里的核心逻辑是:
- Git 会给每个文件计算一个哈希指纹(SHA-1)。
- 当你提交新版本时:
- 如果文件 A 没有被修改,Git 会直接说:“这个文件和上一个提交里的一样,我不存新的了,直接用那个旧的指纹。”
- 只有文件 B 被修改了,Git 才会存一份新的文件 B。
简单说就是,没改过的文件,他才不会傻傻复制一份,直接写个指针(纸条),说这个版本的文件跟某个版本一样,直接拿就行了
第二层优化:“压缩” 存储 —— Packfile 机制
上面那层优化是针对 “单个文件” 的。如果时间久了,积累了成千上万次提交,哪怕每次只改一点,积少成多也会变大。
这时候 Git 会启动 **“垃圾回收”(Garbage Collection)** 机制,或者你手动执行
git gc。Git 会做一件事:把所有松散的对象打包(Pack)。
在这个 Packfile 包里:
- Git 不再存完整的文件快照了。
- 它会找出相似的文件,只存它们之间的差异(Delta)。
- 它还会用 zlib 算法对数据进行压缩。
太大怎么办,那就压缩一下咯,里面只放差异部分,就是代码改了哪里,我就只存你改的部分就行了(差异的部分),这样空间就节省了很多
第三层优化:“本地” 优先 —— GitHub 只是备份
最后补充一个概念性的点:你要区分 Git(本地软件) 和 GitHub(网站)。
- Git:是运行在你电脑上的程序。所有的提交历史、快照、压缩包,首先是存在你自己的硬盘里的。
- GitHub:只是一个 “云端的 Git 服务器”。你执行
git push时,才会把本地的这些数据同步一份上去。所以,GitHub 确实也在它的服务器上存了这些数据,但那是 GitHub 要操心的服务器成本问题(他们有自己的大规模存储优化),对于我们用户来说,主要感知到的是本地 Git 仓库的大小。
这个就是不用联网的原因,直接本地记录了这些数据,都在.git文件夹里面
git分支
这个就跟那一堆说的游离HEAD有关了,我们这样直接切换版本,他就会有警告,叫我们最好创建一个分支给这个版本
不然我们在这个版本修改代码,提交之后,代码容易消失(如果切换回最新版本的话)
| 东西 | 本质 | 类比 | 特点 |
|---|---|---|---|
提交 ID(哈希值,比如你的cf8f9a8) |
每个 commit 快照的唯一固定身份证号 | 一个存档文件的固定编号 | 一旦生成,永远不变。只要这个提交还在,这个 ID 就永远对应这个版本的代码,是死的、唯一的、不可修改的。 |
| HEAD | 一个可移动的「当前位置标记」 | 你看书时夹的书签 / Windows 里的快捷方式 | 它本身不是 ID,它的唯一作用是「指向你当前正在操作的那个提交」,是活的、会跟着你的操作移动的。 |
上面的看看就行,我是这样理解的,head就是书签,直接定位到你现在看的书的位置
正常来说是head指向主分支main(就是有最新版本那个),但是现在我们切换版本,他就直接指向那本书了
看起来没啥问题啊,但假设把这本书内容做扩展,写成了外传,出书之后,这个书签head就直接到这本所谓的外传这里来了
但是他没有分支啊,git不知道要给他放在那里,只能把这本书丢在地上,如果我们想看本传,把书签拿走到本传上面去
git回收机制会认为这本外传是个垃圾失败品(丢地上了),30天后直接删掉.....完蛋
创建分支
所以我们得给这本书放架子上,并且分类写上外传,告诉git这个架子是给外传放的,也就是所谓的创建一个分支出来
这样就不会有丢失的风险,也就是我们看到的提示上面写的git switch,这个是新的命令,那个所谓的git checkout其实已经淘汰了(不过我们不修改代码能用也行)
在 Git 2.23 版本(2019 年)之前,
git checkout是一个非常 “全能” 的命令,它承担了两项完全不同的职责:
- 切换分支 / 切换提交(操作 HEAD)
- 撤销文件修改(操作工作区文件)
这种设计虽然强大,但对新手极不友好,因为一个命令干两件事,很容易误操作(比如本来想切分支,结果把文件改没了)。
一个命令执行太多功能,所以细化成了git switch
为了解决这个问题,Git 官方决定 **“分家”**:
- 推出
git switch:专门负责切换分支。- 推出
git restore:专门负责恢复 / 撤销文件。- 保留
git checkout:虽然不再推荐新手使用,但为了向后兼容,它永远不会被删除,老项目和老教程里依然随处可见。
| 功能 | 老命令 (git checkout) | 新命令 (git switch/restore) |
|---|---|---|
| 切换分支 | git checkout main |
git switch main (推荐) |
| 新建 + 切换 | git checkout -b dev |
git switch -c dev (推荐) |
| 分离头指针 | git checkout <hash> |
git switch --detach <hash> |
| 撤销文件修改 | git checkout -- file |
git restore file (推荐) |
反正区别不大,就是防止不小心切换分支的时候,用git checkout后面加了文件名,那么你修改的半天的文件就被撤销了
随便喜欢用哪个都行,反正我们是创建一个分支,名字随意给这个历史版本的书,后续你修改就会放到你的新书架上面了
当然这里我也只是了解一下,我又不修改,创建个鬼
git commit
其实就是把你的新书发布出去,然后有分支就会放在相应的书架上
一开始我想的是,那我这个历史版本提交了怎么不会到main分支的最新版本去,然后发现自己脑残了,你这个是历史版本修改的,跟最新版本的内容又不一样,这样放到最新版本不被骂死
类似你本来最新的把男二写死了,然后前面100章没死,你改了放到最新上去,就冲突了.......
所以就跟大树一样,有的往上走(本传),有一些往分支往旁边走,跟平行世界一样(外传)
ps :提示一下,commit提交的代码(书)都在本地的,你要发布到github官网上还得push上去
git add
说白了就是工作的缓冲区,跟保存草稿箱一样道理
| Git 区域 | 类比 | 含义 | 对应你的操作 |
|---|---|---|---|
| 工作区 (Working Directory) | 你手里的草稿纸 | 你在电脑文件夹里看到的、正在编辑的文件。 | 你打开 ComfyUI 插件的 .py 文件,修改了几行代码。 |
| 暂存区 (Staging Area / Index) | 老师的「作业收齐清单」 | 一个临时存放区,存放你准备好要提交的修改。 | 你觉得这几段改好了,先把它们勾在清单上,但还没交。 |
| 仓库区 (Repository /.git directory) | 学校的「档案库」 | Git 真正存快照、存历史的地方。所有提交的版本都在这里。 | 你正式把作业交上去,老师给你存档,生成一个带编号的档案(Commit ID)。 |
总之就是给你放草稿的地方,你写一半,先放进去再说,然后可以继续修改之类的,也可以理解成购物车,等下要买再一起买(提交)
只要你还没有提交就行,提交了也可以恢复,无所谓
总结
直接使用git checkout或者git switch修改插件版本就行
git checkout cf8f9a8
当然你要是不想用这个也可以直接删掉插件,我看作者说去给官方的翻译做事了
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)