submodule切换分支_添加Git子模块时,如何指定分支/标记?

本文介绍了如何在Git中管理子模块的分支,包括如何切换子模块分支、指定跟踪分支、更新子模块以及处理分离头状态。通过git submodule命令和配置文件进行操作,确保子模块与指定分支保持同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请注意如果你有现有子模不是跟踪一个分支然后.如果你有git 1.8.2+):确保父回购知道它的子模块现在跟踪一个分支:cd /path/to/your/parent/repo

git config -f .gitmodules submodule..branch 

确保您的子模块实际上是该分支的最迟部分:cd path/to/your/submodule

git checkout -b branch --track origin/branch

# if the master branch already exist:

git branch -u origin/master master

(以“原产地”为子模块已经从。

A git remote -v在该子模块中将显示它。通常,它是“起源”)不要忘记在父回购中记录子模块的新状态:cd /path/to/your/parent/repo

git add path/to/your/submodule

git commit -m "Make submodule tracking a branch"

子模块的后续更新必须使用--remote备选方案:# update your submodule

# --remote will also fetch and ensure that

# the latest commit from the branch is used

git submodule update --remote

# to avoid fetching use

git submodule update --remote --no-fetch

请注意,与GIT 2.10+(2016年第三季度),你可以用‘.‘作为一个分支名称:分支的名称记录为submodule..branch在……里面.gitmodules为update --remote.

一种特殊的价值.用于指示子模块中分支的名称应与当前存储库中的当前分支同名。.

如果要更新分支后面的所有子模块:git submodule update --recursive --remote

注意,对于每个更新的子模块,结果将几乎总是分离头,如丹·卡梅隆注:他的回答.

(克林姆注记在评论中如果你跑了git submodule update --remote生成的SHA 1与子模块当前正在运行的分支相同,它不会执行任何操作,将子模块保留在“在该分支上”,而不处于分离的头状态。

以确保分支实际签出(这不会修改(代表父回购的子模块),他建议:git submodule foreach -q --recursive 'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; git checkout $branch'

每个子模块仍将引用相同的SHA 1,但如果您确实进行了新的提交,您将能够推送它们,因为它们将由您希望子模块跟踪的分支引用。

在子模块中的推送之后,不要忘记返回到父回购、添加、提交和推动那些修改后的子模块的新SHA 1。

注意使用$toplevel,建议在评论中通过亚历山大·波格.

$toplevel于2010年5月在git1.7.2中采用:承诺f 030c96.它包含顶层目录的绝对路径(其中.gitmodules)。Foreach脚本将无法签出不跟随分支的子模块。

但是,这个命令给出了两种方法:git submodule foreach -q --recursive 'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; [ "$branch" = "" ]

&& git checkout master || git checkout $branch' –

相同的命令,但更容易读懂:git submodule foreach -q --recursive \

'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; \

[ "$branch" = "" ] && \

git checkout master || git checkout $branch' –git submodule foreach -q --recursive 'git checkout $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'

多行:git submodule foreach -q --recursive \

'git checkout \

$(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值