git仓库嵌套问题

前段时间博客站从wordpress迁移到了hexo,然后在迁移的过程中,发现了一个问题,hexo的主题是clone三方开源主题仓库,
这个主题项目会放到hexo博客项目的themes目录下,这样就导致了一个git仓库嵌套的问题。

也就是说hexo根目录下有一个.git目录,/hexo/themes/theme/ 下也有一个.git目录。当我们在提交hexo项目的时候,会发现themes目录下的主题项目并没有提交上去。
这个时候就要看自己的具体需求了,对于个人博客的需求,我最初的本意是解决一个自己博客网站的一个配置文件备份的问题,我是希望主题文件能够被同步管理。
也就是取消这个嵌套。

  1. 首先取消这个嵌套,肯定是先要删除内层git仓库的.git目录。
  2. 然后尝试记录git add <this_directory_path>跟踪这个目录,但是发现并没有生效。
  3. 这时候开始警觉了,我打算拉一个新的分支做这个事情(
    因为之前没注意这个嵌套问题,导致配置文件丢失。血的教训,手动恢复了大半天)。
  4. git checkout -b fix-nesting-issue 新建一个分支。
  5. 在这个分支上,在项目根目录下面新建一个themesbak目录,然后把themes目录下的文件都拷贝到这个目录下。这个时候提交一次代码。
  6. 然后删除themes目录下的所有文件,这个时候再提交一次代码。
  7. 然后再把themesbak目录下的文件拷贝到themes目录下,这个时候再提交一次代码。
  8. 最后删除themesbak目录,提交一次代码。
  9. 问题解决,合并分支就行了。

究其原因,是因为git仓库嵌套使用之后,内层的git仓库的更改不会被外层的git仓库所感知。

git里面有一个子模块(submodule)的概念,当一个项目比较复杂的时候,可以把这个项目拆分成多个子模块,各个模块之间是独立的,但是可以通过父项目来管理这些子模块。
这个时候,父项目会有一个.gitmodules文件,里面记录了子模块的地址,这样就可以通过父项目来管理子模块的代码了。

拓展
当父项目克隆的时候,子模块的代码不会自动同步到最新的版本。需要手动更新子模块。

1
2
# 递归初始化更新子模块
git submodule update --init --recursive

针对之前描述的博客主题仓库嵌套的问题,主要是为了当博客主题版本迭代的时候,可以通过git pull
来直接更新主题,来使用更多的新的主题功能与特性。但是既然都个人博客了,对一些定制化的需求还是有的,所以干脆自己管理与维护这个主题项目,这样也可以更好的理解这个主题的代码结构,方便自己进行二次开发。

Failed to connect to github.com port 443 after 21035 ms: Timed out

本来想创建一个github仓库用于管理自己学习过程中编写的一些demo案例,在学习的过程中,由于时不时要使用魔法去查阅部分资料,然后完成一些学习案例的编写的时候push代码,出现了该问题

这个问题是因为网络问题导致的。

  1. 网络不稳定
  2. 代理问题
  3. DNS解析问题
  4. 本地防火墙问题

要依次排查,根据网上找到一个可能的解决方案,就是修改git的配置文件。
通过控制台输入以下命令:

1
git config --global --edit

然后在打开的配置文件中添加以下内容:

1
2
[http]
sslVerify = false

这个配置项的作用是关闭git的ssl验证。
但是注意会有安全问题。根据需求来选择是否使用,在这里是不推荐的。