问题:git项目嵌套问题怎么解决?

情景:

我现在有仓库ABBA的子目录,两个仓库相互独立,都有各自的提交,在我本地的结构如下:

A
├─.git
│─ a
│─ B
   ├─.git
   │─ b

当我把A推到github后显示这样的:

图片描述

B目录显示灰颜色的,并且点击不了,克隆A下来发现A里面的B目录是空的。
点击提交详情,可以看到变化的文件目录B(thinkphp) “Submodule thinkphp added at bb9e33” bb9e33B仓库的提交没错。
图片描述

我想要的是实现我要的嵌套,可结果为什么是这个样子啊。

希望熟悉git的大神指点一下,谢谢了^_^

阅读 8.1k
5 个回答

简单来说如果你用的是Git的SubModule的话,需要这样克隆A仓库:git clone --recursive 地址 ,但是SubModule的话达不到你想要的独立,因为主仓库A必须要有子仓库引用信息。

如果说你想达到真正的独立,那么需要在A仓库下的.gitignore中加入B仓库的目录,你的截图中就是需要在A的.gitignore中加入thinkphp/;然后克隆A仓库后,继续克隆B仓库放在A的根目录下即可。

这是Git的SubModule。既然你都知道了两个项目是独立的,那两个项目的拉取和提交自然也是独立的,所以你在拉取项目A时自然不会自动去拉取项目B,因为A项目怎么会知道B项目的地址呢?

git submodule

git子模块或git子树都可以,不过都挺麻烦的。

很好奇,thinkphp目录不应该是库文件的目录吗?为啥你会有提交?建议thinkphp这种库应该封装成composer包,通过composer管理。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题