2

我有一个 git 项目,其中包含我从公共只读存储库克隆的 git 子模块(即我无法推送到该存储库)。是否可以提交该子模块?这是我尝试这样做的方法

[main]$ cd sub
[sub]$ git checkout master
[sub]$ echo test > new-file
[sub]$ git add new-file
[sub]$ git commit -m 'added a new file'
[sub]$ cd ..
[main]$ git add sub
[main]$ git push origin

到目前为止,一切都很好。现在的问题是当我转到另一台计算机并执行以下操作时:

[main]$ git pull
[main]$ git submodule update

但它失败了fatal: reference is not a tree: af232...。我认为这会起作用,因为当我git push origin在 main 中执行时,它似乎也会推送子模块的所有对象(毕竟它们在 main 的 .git 目录中)。但显然,当第二台计算机拉动时,它并没有接收到这些新对象。

4

1 回答 1

1

这是因为您已经推送了超级项目中的子模块更改,但您没有推送子模块中发生的实际更改(git push origin不推送子模块更改,仅推送其提交 SHA1。)。这不是您可以做的事情,因为它是一个只读存储库。

您可以做的是将子模块的 URL 更改为您自己的存储库,将更改推送到它,然后在超级项目中提交和推送 URL 更改。

于 2012-07-12T11:31:56.273 回答