Git-运行UPDATE后,子模块头始终被分离? [英] Git - submodules HEAD is always detached after running update?

查看:5
本文介绍了Git-运行UPDATE后,子模块头始终被分离?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将子模块的此配置放在.gitMODULES文件中:

[submodule "sub"]
    shallow = true
    branch = master
    path = sub
    url = https://path/to/repo.git

现在我希望有人克隆我的repo,然后运行这些命令:

git submodule init
git submodule update

是得到子模的浅主分支。但发生的情况是,它不会签出到master分支。它总是到达分离的头部,所以我需要手动运行git checkout master。因此,用户需要另外运行一个命令,而不是这两个命令。

我调查了一下:Why is my GIT Submodule HEAD detached from master?

但任何关于公认答案的建议似乎都无济于事:我在.gitmodules文件中添加了我想要的分支,我将远程上游添加为master(这仅适用于我必须签出以自己为主的已克隆/更新的存储库)。

那么,如果有人克隆我的存储库并希望设置子模块,这是否打算始终获得分离的头?

推荐答案

是的,您说得对。用户mkungla从Why is my GIT Submodule HEAD detached from master?发布的排名靠前的答案是无稽之谈。

.gitmodule中添加branch选项与子模块的分离行为完全无关

git submodule --help开始,分离头部是git submodule update --remote的默认行为

首先,不需要指定要跟踪的分支origin/master是要跟踪的默认分支。

--远程

不使用超级项目记录的SHA-1更新子模块,而是使用子模块的远程跟踪分支的状态。使用的远程是分支机构的远程(branch.<name>.remote),默认为origin。使用的远程分支机构默认为master

为什么

那么为什么在update之后头部被分离?因为submodule.$name.update默认行为是checkout

--结账

将超级项目中记录的提交签出子模块中的分离的头。这是默认行为,此选项的主要用途是在设置为checkout以外的值时覆盖submodule.$name.update

方式

如果希望子模块自动与远程分支合并,请使用--merge--rebase

--合并

此选项仅对UPDATE命令有效。将超级项目中记录的提交合并到子模块的当前分支中。如果提供此选项,子模块的磁头将不会分离

--更改基准

将当前分支重新定位到超级项目中记录的提交。如果提供此选项,子模块的磁头将不会分离

您只需

git submodule update --remote --merge
# or
git submodule update --remote --rebase

还可以通过将submodule.$name.update设置为mergerebase,将--merge--rebase设置为git submodule update的默认行为。

这里有一个关于如何在.gitmodule中配置子模块更新的默认更新行为的示例。

[submodule "bash/plugins/dircolors-solarized"]
    path = bash/plugins/dircolors-solarized
    url = https://github.com/seebi/dircolors-solarized.git
    update = merge # <-- this is what you need to add

我的全部答案都是基于手册。git submodule --help

这篇关于Git-运行UPDATE后,子模块头始终被分离?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆