首页 > 解决方案 > Git remote -v 有效,但创建新分支时使用了错误的子模块

问题描述

让我从第一个开始,我们有 20 个客户端以同样的方式运行。我没有构建我们当前的 git 系统,但我继承了它。在那个人离开公司之前,我确实得到了一些很好的速成课程信息。

几周前,我克隆了一个以Go-To现有 repo 命名的 repo Come-From。它有 3 个分支(主、测试、预览)用于测试,这些分支被推送并用于从网站查看。我们有这个 repo 的 3 个子模块。仅创建了一个已将更改推送到的 WF1 分支(主、测试、预览) 出现的第一个问题是子模块没有更新。我为子模块修复了 git remote -v ,因为当我进行克隆时它们没有指向正确的位置。我能够重置头部并且所有更改都运行良好。我让我们的 Web 团队进行更改并毫无问题地推动。

现在到第二天发生的问题。当发生这种情况时,另一个人检查了 WF1 并进行了更改并推送到(主、测试、预览),它以某种方式创建了名为 Go-To-To-system 的新子模块。现在,我有 6 个子模块,而不是 3 个子模块。我恢复了在问题发生之前对 master、test 和 WF1 进行的修补程序。

从他们看起来正确的分支运行一个新的 git clone。

git clone --recurse-submodules -b preview git@myserver:gitrepos/Go-To.git

cd /go-to/system
git checkout preview
git remote -v       
origin git@myserver:gitrepos/Go-To-system.git (fetch)
origin git@myserver:gitrepos/Go-To-system.git (push)

如果我使用编写的适用于所有其他客户端的脚本创建一个新分支。我明白了。

git remote -v       
origin git@myserver:gitrepos/Go-To-To-system.git (fetch)
origin git@myserver:gitrepos/Go-To-To-system.git (push)

正确的子模块:Go-To-system

不应该存在的子模块:Go-To-To-system

我已经检查了所有远程 -v 的分支,它们看起来正确。创建新分支时是否需要修复其他问题?

标签: gitgitlab

解决方案


我正在从脚本中清除客户端信息,并注意到子模块部分中的此部分。在完成命令之后,这就是导致我们问题的原因。这是我们在名称中使用破折号的第一个客户端,因为脚本使用破折号从 (git remote -v) 中提取 $submodules 的信息。它导致名称的第二部分加倍。

if $createrepo then for submodule in "${submodules[@]}" do cd $submodule; 远程=“$(git远程-v)”;remote="${remote# '-'}"; 远程="${远程%%' ' }";

感谢凯文曼塞尔的帮助。我认为回顾整个脚本有助于我发现问题。我还在学习 bash 脚本和 Git,所以我认为上面部分中的所有符号都让我失去了兴趣。


推荐阅读