Chr*_*mas 12 git git-submodules
我对"git submodule init"有一个奇怪的问题
当我使用"git submodule add url location"添加子模块时,它克隆了存储库就好了,一切正常.
当我将所有更改推回到父存储库,添加.gitmodules文件等并克隆存储库时,我尝试使用"git submodule init"初始化所有子模块
没有任何反应:(没有任何东西,没有输出,没有额外的文件,它甚至没有尝试做任何事情.
所以我想知道,我做错了什么?
.gitmodules:
bash$ cat .gitmodules
[submodule "projects/subprojectA"]
path = projects/subprojectA
url = ssh://user@bitbucket.company.com/test/projectA.git
[submodule "projects/subprojectB"]
path = projects/subprojectB
url = ssh://user@bitbucket.company.com/test/projectB.git
Run Code Online (Sandbox Code Playgroud)
Chr*_*mas 18
好吧,我已经弄清楚我做错了什么.
当我添加git子模块时,我做了一个git状态,它告诉我有三件事发生了变化
.gitmodules
projects/subprojectA
projects/subprojectB
Run Code Online (Sandbox Code Playgroud)
当我将所有更改推送到存储库时,我不想提交子模块,因为我认为它会添加我刚刚克隆的所有文件,所以我只是做了一个git add .gitmodules并且已经提交并推送了它.
但这是错误的,你需要做一个git commit并提交它告诉你的一切,然后当你这样做时,git会注册这些路径,当你克隆时,它会起作用.
但是如果您不提交这些文件夹,它将不会注册它们,并且在克隆父存储库时不会克隆它们.
所以这是我的错误,我误解了添加这些目录会将所有子模块代码添加到父存储库,我试图回避它并且它停止工作.
所以只需添加你的子模块并提交结果,它们都可以正常工作:D
感谢Protectators的帮助,无论如何!
在googletest子模块的情况下,以下对我有用:
git submodule add --force https://github.com/google/googletest.git googletest
Run Code Online (Sandbox Code Playgroud)
因此,您需要手动添加子模块(注意--force标志)。
--recursive克隆时使用该选项。此选项初始化所有列出的子模块:
git clone --recursive
Run Code Online (Sandbox Code Playgroud)
在另一种情况下,如果要初始化刚刚克隆的 git 的子模块,可以使用
git submodule update --init --recursive
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7527 次 |
| 最近记录: |