# 问题描述
起因是我在 github 建了一个私有仓库,用来存放 blog 的全部文件,而非发布文件。
这样做的动机有两个:
- 备份:防止因为意外,本地资料丢失,导致文章无法恢复
- 自动化:想研究一下用
github action
实现网页编辑,自动部署。
那么问题来了,为了实现使用 github action
自动部署,我需要把 shoka
主题文件也放入 push 上去,然后就发现 shoka
目录在我的仓库中显示为一个无法点入的带箭头的文件夹。
搜索后得知是因为 shoka
这个主题是 git clone
下来的,这就带来了 git 嵌套的问题。
在这种情况下,你在被嵌套的 Git 仓库中的更改,外层仓库是无感知的。
# 解决办法
有两种办法:
1. 使用submodule
2. 直接删除.git
# 使用 submodule
git submodule add https://github.com/chenfengyanyu/fmap-demo.git | |
# 或者使用 clone | |
git clone --recursive https://github.com/chenfengyanyu/fmap-demo.git |
这个操作类似于 Clone
,但是会在父仓库下面新建 .gitmodules
文件,我们看一下内容:
vi .gitmodules |
大致内容如下:
[submodule "fmap-demo"]
path = fmap-demo
url = https://github.com/chenfengyanyu/fmap-demo.git
然后做正常提交就可以了。
需要注意的是,这样的操作只能提交一个引用,类似:fmap-demo @ 90758cf,打开的话,会跳到项目源地址。
# 删除 .git
我这种情况就需要采用这种办法,这样修改子仓库的时候,父仓库不会毫无感知。
- 进入子仓库,也就是被嵌套的
Git 仓库
,删除.git
目录:
rm -rf .git |
将你添加的项目拖出当前项目文件,进行提交
再将项目拖回来,返回项目根目录,执行
add
操作:
git add fmap-demo |
这里必须要选择子项目进行 add,此时 add . 和 add * 都无效。
之后正常 commit 和 push,就可以了。
# 本文引用
参考教程:http://jartto.wang/2017/12/28/cannot-nest-git-repository/