Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 推送递归子模块-上传包:不是我们的参考_Git - Fatal编程技术网

Git 推送递归子模块-上传包:不是我们的参考

Git 推送递归子模块-上传包:不是我们的参考,git,Git,尝试推送到生产环境时,会抛出此错误 remote: Cloning into '/var/www/domain.com/php/repo/api/log'... remote: fatal: remote error: upload-pack: not our ref fdbef7944df6b5e83715f8679395a852dc5faf5e remote: Fetched in submodule path 'php/repo/api/log', but it did not conta

尝试推送到生产环境时,会抛出此错误

remote: Cloning into '/var/www/domain.com/php/repo/api/log'...
remote: fatal: remote error: upload-pack: not our ref fdbef7944df6b5e83715f8679395a852dc5faf5e
remote: Fetched in submodule path 'php/repo/api/log', but it did not contain fdbef7944df6b5e83715f8679395a852dc5faf5e. Direct fetching of that commit failed.
回购协议的路径

php/repo/api
php/repo/api/log <-- the repo nested inside another repo

您已经指示服务器上的另一个Git克隆子模块,它确实做到了。我无法回答它在哪里得到子模块的问题,但据推测,它使用您的
.gitmodules
文件为第三台服务器获取URL,并使用该URL运行
git clone
,在您的服务器上创建子模块存储库

在服务器上创建或更新该子模块后,您让服务器子模块的Git尝试签出一个特定的提交,即其哈希ID为
fdbef7944df6b5e83715f867995a852dc5faf5e
的提交。服务器的子模块存储库中没有fdbef7944df6b5e83715f8679395a852dc5faf5e。这可能是因为克隆服务器上的子模块的第三台服务器也没有它

这很难理解,但是如果我们给每个Git存储库起一个名字,我们就可以更容易理解。总共至少有5个存储库:

  • 您有一个超级项目存储库;我们叫他弗雷德
  • 您的超级项目有一个子模块。我们叫她威尔玛
  • 您的服务器有一个Git存储库,它也充当超级项目。我们叫他巴尼,虽然他实际上是弗雷德的克隆人(反之亦然)
  • 您的服务器有一个作为子模块的Git存储库。我们把这个叫做贝蒂
  • 当然,Betty自己也是克隆人(因为所有Git存储库都是克隆人)。她是谁的克隆人?这就是我不知道的(但是你可以通过你的
    .gitmodules
    文件找到/控制),但是我们会打电话给她
这里发生的事情是你在弗雷德身上做出了新的承诺。这个新的commit调用Wilma或Betty作为子模块,使用commit
fdbef7944df6b5e83715f867995a852dc5faf5e
。据推测,您确实在Wilma中执行了commit
fdbef7944df6b5e83715f867995a852dc5faf5e

然后你把你的Git从Fred推给Barney。Barney现在有一个commit,它也从他的子模块中调用commit
fdbef7944df6b5e83715f867995a852dc5faf5e
。但他的子模块是贝蒂

要获得fdbef7944df6b5e83715f8679395a852dc5faf5e,贝蒂可以打电话给安·马格罗克。但是如果Ann也没有fdbef7944df6b5e83715f8679395a852dc5faf5e,Betty就不会得到fdbef7944df6b5e83715f8679395a852dc5faf5e。当巴尼命令贝蒂签出fdbef7944df6b5e83715f8679395a852dc5faf5e时,她会抱怨,说她做不到

解决方案是将commit
fdbef7944df6b5e83715f867995a852dc5faf5e
,不是给巴尼,也不是给贝蒂,而是给安,因为贝蒂打电话给安是为了得到它。因此,找出谁在这里代表Ann,并确保Wilma向Ann发送
fdbef7944df6b5e83715f867995a852dc5faf5e

#/bin/sh
cd /var/www/domain.com
git --work-tree=. --git-dir=/var/git_repos/domain.com.git checkout master -f
git --work-tree=. --git-dir=/var/git_repos/domain.com.git submodule update --init --recursive