如何在CLion中把GitHub仓库B文件夹推送到仓库A并修复空不可点击目录
现象说明
你遇到的不可点击空文件夹效果如下:
这个问题本质是Git嵌套仓库的默认处理逻辑导致,以下是具体原因和CLion中的操作方案:
根因
你直接将完整的B仓库克隆到A的工作目录内时,B文件夹自带独立的.git版本管理目录,A仓库的Git会自动将该文件夹识别为外部嵌套仓库,不会追踪文件夹内的实际文件,只会存储一个指向B当前提交哈希的gitlink占位条目,推送后就会显示为不可点击的空文件夹。
操作方案
场景1:需要保留B的独立仓库属性,双仓库并行管理
这种场景用Git子模块功能实现,操作步骤:
- 先清理A仓库已缓存的错误gitlink条目:打开CLion底部的「终端」面板,切换到A仓库根目录,执行
git rm --cached <B文件夹在A中的相对路径>,该操作不会删除你本地已有的B仓库文件 - 将B正式添加为A的子模块:同终端下执行
git submodule add <B仓库的远程地址> <B文件夹在A中的相对路径>,执行完成后A根目录会生成.gitmodules配置文件,记录子模块关联关系 - 提交A仓库的变更:在CLion左侧的Git提交面板,勾选
.gitmodules和对应的B子模块条目,提交后推送到A的远程仓库即可,此时A远程的B文件夹会变成可点击的子模块入口
提示:其他用户克隆A仓库时需要执行git clone --recursive <A仓库地址>才能同时拉取到子模块B的内容
CLion中同时更新双仓库的操作:
- 更新B仓库:点击CLion顶部Git工具栏的仓库切换下拉框,选中B仓库,正常做拉取、提交、推送操作即可,变更会同步到B的远程仓库
- 同步B的变更到A仓库:切换回A仓库,Git面板会自动检测到子模块的提交变动,勾选子模块条目提交推送到A的远程,就完成了A的更新
场景2:不需要保留B的独立仓库属性,直接合并到A
如果不需要B继续作为独立仓库维护,直接把B的文件整合到A即可:
- 打开CLion的项目文件树,勾选显示隐藏文件,进入B文件夹删除内部的
.git目录 - 在A仓库根目录执行
git add <B文件夹相对路径>/*,将B的所有文件加入A的版本追踪 - 正常提交推送A的变更即可,此时远程A的B文件夹会正常展示所有内部文件
内容的提问来源于stack exchange,提问作者masoud
相关产品推荐
相关产品推荐

