克隆子模块时,虚拟机和gitlab runner(但不是本地机)上的Git问题

soat7uwm  于 2022-12-17  发布在  Git
关注(0)|答案(1)|浏览(147)

我有一个包含几个子模块的git仓库,以及一个注册到虚拟机的gitlab runner(特定于项目),CI/CD使用一个包含在其中一个子模块中的makefile。
以前,我可以在本地计算机和虚拟机上克隆存储库和所有子模块,没有任何问题,CI/CD也可以正常工作(但在makefile中的某个地方失败-无关)
这周当我回到这个项目来修复makefile的问题时,我发现了两个关于虚拟机和gitlab runner的问题。
问题1:在虚拟机(git submodule update --remote)上克隆子模块时,git会要求我输入每个子模块的用户名和密码,但在本地机器上却没有遇到同样的问题,即克隆时不需要用户名和密码。
奇怪的是,当我运行管道时,gitlab-runner也要求输入用户名和密码。
我可以存储我的用户名和密码,这样虚拟机就不会要求它,但这对runner没有帮助。
问题2:当尝试克隆子模块-git submodule update --remote时,我得到消息:fatal: Needed a single revision Unable to find current origin/master revision in submodule path '[submodule]'我可以通过在.gitmodules文件中添加branch = main来修复这个问题,但是在我的本地机器上也不需要这样做,只有在虚拟机上才需要这样做(而且只有在本周;它以前不需要这个)。
这是怎么回事?
我已经比较了我的项目的最后一个工作版本和当前版本的.git文件夹,差异是无关紧要的(HEAD,其中一个是main,另一个是git hash)。
我试着恢复到上一个工作版本,也遇到了同样的问题。这表明我的工作环境有问题,而不是任何git文件。

arknldoa

arknldoa1#

找到解决方案,感谢@torek的提示,以及来自此处和here的帮助
更改.gitmodules中的子模块url以使用相对路径可以消除这两个错误。

[submodule "ProjectA"]
    path = ProjectA
    url = ../../Proj/ProjectA.git
[submodule "ProjectB"]
    path = ProjectB
    url = ../../Proj/ProjectB.git

检查文件历史记录,.gitmodules一直使用绝对url,所以我不知道为什么这突然变成了一个要求,但根据文档,这是在gitlabCI/CD中克隆子模块时避免需要凭据的正确方法

相关问题