我有一个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...
失败了。我认为这样可行,因为当我在main中执行git push origin
时,它似乎也会推送子模块的所有对象(毕竟它们在main的.git目录中)。但显然,当第二台计算机拉动时,它不会收到这些新物体。
答案 0 :(得分:1)
这是因为你已经推动了超级项目中的子模块更改,但是你还没有推动子模块中发生的实际更改(git push origin
不推送子模块更改,只推送其提交SHA1。) 。这不是你可以做的事情,因为它是一个只读的回购。
您可以做的是将子模块的URL更改为您自己的存储库,将更改推送到它,然后提交并推送超级项目中的URL更改。