Featured image of post 解决Git 典型的子模块冲突

解决Git 典型的子模块冲突

Git 陷入了一个典型的子模块冲突。

简单来说:themes/hugo-theme-m10c 文件夹目前被 Git 视为一个“独立的项目”。因为你修改了配色的 config 或者主题代码,Git 发现这个子项目有改动,但它没有权限替你把这些改动提交到别人的仓库里,同时也导致你的主项目(my-hugo-blog)被卡住。

请按照以下步骤,用最彻底的**“合并法”**解决:

第一步:强行“吞并”主题文件夹 我们要让 Git 停止把这个主题当成子模块,而是把它当成你自己的普通文件夹。

在你的电脑终端输入这三行命令:

Bash

1. 删除子模块的索引(注意:末尾不要带斜杠 /)

git rm -r –cached themes/hugo-theme-m10c

2. 删除那个该死的 .git 标识(这是让 Git 误以为它是子项目的根源)

Windows 用户执行:

rmdir /s /q themes\hugo-theme-m10c.git

Mac/Linux 用户执行:

rm -rf themes/hugo-theme-m10c/.git

3. 此时再添加,Git 就会把它当成普通文件夹处理了

git add . 第二步:提交并强制推送 现在 Git 应该能识别到你的所有改动了(包括文章和主题配色)。

Bash

1. 再次尝试提交

git commit -m “彻底修复主题冲突并发布文章”

2. 推送到 GitHub

git push origin main 第三步:去 Vercel 检查 这次 git push 成功后,由于你把主题代码直接“背”在了自己的仓库里,Vercel 部署时再也不需要去连接外部子模块,成功率是 100%。

打开你的 GitHub 仓库网页,确认 themes/hugo-theme-m10c 文件夹不再带有一个“白色小箭头”图标。

刷新 Vercel 的 Deployments 页面,你应该能看到一个正在进行的 Building。

为什么之前一直失败? 因为只要 themes/hugo-theme-m10c 文件夹里存在一个 .git 文件夹,主项目的 git add . 就无法跨越它去捕捉里面的改动。这就像你在一个保险柜里又放了一个保险柜,主项目的钥匙打不开里面的锁。

热爱生活 学无止境
使用 Hugo 构建
主题 StackJimmy 设计