git子模块内部的变化

时间:2012-04-18 23:00:32

标签: git git-submodules

以前可能会问这个问题,但很难说,因为子模块似乎会导致很多问题。这就是我正在做的事情。

# cd to parent repo
git submodule add git://example.com/myrepo
cd myrepo
# make some changes
git commit -am "made changes"
cd ..
git commit -am "modified submodule"
git clone --recursive . <path to cloned repo>

当我这样做时,我会收到错误

  

致命:引用不是树:96fa64c0dd64684f86d17841f7c515446885eb33

接着是

  

无法在子模块路径'myrepo'中签出'96fa64c0dd64684f86d17841f7c515446885eb33'

我在这里做错了什么?我只想添加一个子模块,然后对其进行一些更改,然后将整个父源树(包括子模块)克隆到一个新的存储库。

1 个答案:

答案 0 :(得分:0)

你应该致电

git submodule init
添加子模块后

git submodule add克隆存储库并向.gitmodules添加条目。 git submodule init初始化子模块并将.gitmodules中的条目复制到.git / config

修改

我怀疑你错过了使用子模块的一些重要步骤。以下是我用来处理子模块的步骤。

首先克隆父回购(如果适用)

git clone git@github.com:test/test.git

更改为克隆目录并添加子模块

#change to the parent repo directory
cd test

#add the submodule to test/submodules/mysubmodule
git add submodule git@github.com/test/mysubmodule.git submodules/mysubmodule

初始化所有子模块并更新所有子模块,包括嵌套的子模块

git submodule update --init --recursive

添加所有更改并提交并推送到遥控器(如果适用)

git add .
git commit

最后一部分非常重要,因为在您提交更改之前,repo并不真正了解您的子模块。