# 问题描述

起因是我在 github 建了一个私有仓库,用来存放 blog 的全部文件,而非发布文件。
这样做的动机有两个:

  1. 备份:防止因为意外,本地资料丢失,导致文章无法恢复
  2. 自动化:想研究一下用 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

我这种情况就需要采用这种办法,这样修改子仓库的时候,父仓库不会毫无感知。

  1. 进入子仓库,也就是被嵌套的 Git 仓库 ,删除 .git 目录:
rm -rf .git
  1. 将你添加的项目拖出当前项目文件,进行提交

  2. 再将项目拖回来,返回项目根目录,执行 add 操作:

git add fmap-demo

这里必须要选择子项目进行 add,此时 add . 和 add * 都无效。

之后正常 commit 和 push,就可以了。

# 本文引用

参考教程:http://jartto.wang/2017/12/28/cannot-nest-git-repository/

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

木 白 微信支付

微信支付

木 白 支付宝

支付宝

木 白 贝宝

贝宝