git - 使用 --remote 参数更新子模块,一些跟踪分支,一些不跟踪分支
问题描述
有没有办法做类似的事情:
git submodule update --remote
在包含多个不跟踪分支的子模块的存储库上?我只希望真正跟踪分支的一个更新,而另一个不做任何事情(或像往常一样更新到目标 sha1)。现在,当 git 尝试更新不跟踪任何内容的子模块时,我收到此错误:
fatal: Needed a single revision
Unable to find current origin/master revision in submodule path 'modules/mod4'
我猜“--remote”参数会导致 git 尝试签出一个分支,但是那里出了点问题,因为我的 .gitmodule 条目中没有设置“分支”。我将在我的问题上抛出一堆脚本,但也许只有我没有看到的 git 有一个优雅的解决方案?
这是一个输出示例:
> git submodule update --remote --force
Submodule path 'modules/mod1': checked out 'bebbe6721007f06765ec1cd7cb9f1bf6ac654c33'
Submodule path 'modules/mod2': checked out '3b4c9dadfa432fd6fdd400695770f6cb50f7fb17'
Submodule path 'modules/mod3': checked out 'c619954bad6673abd44eac520d43b448168ca196'
Submodule path 'modules/mod5': checked out '5f64331aab836218a86fc3640f91ab029b4e1890'
fatal: Needed a single revision
Unable to find current origin/master revision in submodule path 'modules/mod4'
和我的 .gitmodules 供参考:
[submodule "modules/mod1"]
path = modules/mod1
url = ssh://git@stash.sd.repo.com/mod1.git
branch = develop
[submodule "modules/mod2"]
path = modules/mod2
url = ssh://git@stash.sd.repo.com/mod2.git
branch = develop
[submodule "modules/mod3"]
path = modules/mod3
url = ssh://git@stash.sd.repo.com/mod3.git
branch = develop
[submodule "modules/mod4"]
path = modules/mod4
url = ssh://git@stash.sd.repo.com/mod4.git
[submodule "modules/mod5"]
path = modules/mod5
url = ssh://git@stash.sd.repo.com/mod5.git
branch = develop
[submodule "modules/mod6"]
path = modules/mod6
url = ssh://git@stash.sd.repo.com/mod6.git
branch = develop
[submodule "modules/mod7"]
path = modules/mod7
url = ssh://git@stash.sd.repo.com/mod7.git
非常感谢您的帮助。
解决方案
该--remote
选项只是指示在子模块中运行后git submodule update
执行其操作,使用一些远程跟踪名称:git fetch
--remote
此选项仅对更新命令有效。不要使用超级项目记录的 SHA-1 来更新子模块,而是使用子模块的远程跟踪分支的状态。使用的遥控器是分支的遥控器 (branch.<name>.remote
),默认为origin
. 使用的远程分支默认为master
,但可以通过设置submodule.<name>.branch
选项.gitmodules
或.git/config
(.git/config
优先)来覆盖分支名称。...
为了确保当前跟踪分支状态,
update --remote
[在子模块中运行git fetch
]。
还有更多; 仔细阅读文档。git submodule
请注意我在上面加粗的部分。
这意味着您的问题不一定是分支设置或缺少分支设置:git submodule update
命令默认为master
.
因此,这:
fatal: Needed a single revision Unable to find current origin/master revision in submodule path 'modules/mod4'
表示运行后git fetch
,就没有了origin/master
。
除此之外,我们什么都不知道。但是,您可以了解更多信息。例如,也许有一个更新origin/main
:也许负责这个特定存储库的人重命名master
为main
. 如果是这样,所有引用此子模块的超级项目都应该添加一个分支指令,以便master
覆盖默认值。
假设您可以控制您的超级项目,您可以自己执行此操作。如果没有,您可以使用.git/config
技巧:请参阅“优先”括号中的注释。
推荐阅读
- javascript - 根据悬停的对象更改 D3 工具提示背景颜色
- r - 将 aes(x=...) 放入 ggplot() 或 geom() 之间的区别
- android - 安卓设备监视器在哪里
- javascript - 将 javascript 游戏导出到桌面和移动设备
- r - 使用 R 将列值排列在一行中
- javascript - 如何从 Javascript 中的节点模块导入包?不使用构建工具
- c# - 为什么这种隐式强制转换是不可能的?
- javascript - 如何防止 HTML 画布上的缩小
- python - 绘制不同频率的时间数据(matplotlib、pandas)
- upgrade - 如何从命令行升级 web2py