本文主要是介绍git如何设置嵌套仓库(设置子树或子模块),并解决直接将一个仓库拖拽到另一个仓库中导致的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
git 将一个仓库拷贝到另一个仓库的文件夹下。默认git并不会处理,上传上去之后,只会创建一个文件夹,但是这个文件夹点不开。
在 git add .
的时候,会报出警告:
警告:正在添加嵌入式 git 仓库:client
提示: You've added another git repository inside your current repository.
提示: Clones of the outer repository will not contain the contents of
提示: the embedded repository and will not know how to obtain it.
提示: If you meant to add a submodule, use:
提示:
提示: git submodule add <url> client
提示:
提示: If you added this path by mistake, you can remove it from the
提示: index with:
提示:
提示: git rm --cached client
提示:
提示: See "git help submodule" for more information.
提示: Disable this message with "git config advice.addEmbeddedRepo false"
这个意思是,正在将一个嵌套的 Git 仓库(子仓库)添加到当前的 Git 仓库中。具体来说,client 目录内似乎已经是一个独立的 Git 仓库,这会导致一些问题:
嵌套 Git 仓库:
Git 检测到 client 目录中有一个 .git 子目录,这意味着 client 目录本身是一个 Git 仓库(即子仓库或嵌套仓库)。
git并不知道,你想要怎么处理该仓库。所以直接将这样的子仓库添加到父仓库中,会导致问题——父仓库不会自动处理子仓库的内容和版本控制。
因此需要显式的指定添加的是什么:
如果是添加一个子模块,则采用 git submodule add <url> client
。
如果是添加一个子库,并不应该直接将该库拖拽进来。
具体解决方案:
1. 如果 client
应该是子模块:
如果 client
目录实际上应该是一个子模块,那么你需要正确地将其添加为子模块:
git rm --cached client
git submodule add <url> client
<url>
是子模块的 Git 仓库 URL。git rm --cached client
从当前仓库的索引中移除client
目录(不会删除实际目录)。
2. 如果 client
应该是子树:
如果 client
目录实际上应该作为子树的一部分,你需要从父仓库中移除它,然后再正确地将其作为子树添加。
git rm --cached client
rm -rf client
git commit -m "Remove client submodule"
然后重新将 client
作为子树添加到父仓库:
git subtree add --prefix=client <url> branch-name
<url>
是子树的 Git 仓库 URL。branch-name
是子树仓库中的分支名称。
添加之后,会直接生成一个commit
总结
- 子模块: 如果
client
目录应该是一个独立的仓库并且被作为子模块管理,使用git submodule add
。 - 子树: 如果
client
目录应该嵌入到父仓库中作为子树,先移除它,再用git subtree add
重新添加。
通过这些步骤,就可以解决嵌套仓库导致的问题,并确保 client
目录被正确地添加到父仓库中。
这篇关于git如何设置嵌套仓库(设置子树或子模块),并解决直接将一个仓库拖拽到另一个仓库中导致的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!