能够在 Git 子模块中更新代码的正确工作流程是什么?
What is the proper workflow for being able to update code within a Git Submodule?
我正在尝试将共享库实现为 Git 子模块,并且我正在努力寻找在子模块文件夹中推送更改的最佳实践。我可以让它工作,但感觉很尴尬。
这是我的测试仓库https://github.com/rupe120/submodule-test
我设置了子模块来跟踪给定的分支,但是在新的克隆和子模块更新后这没有帮助。我知道子模块引用是一个 gitlink,但是当我进入子模块时,我无法推送,因为它引用的“分支”不是分支,而是 gitlink。
我要么需要检出子模块中的跟踪分支,这样我就可以推送更改并在单独的克隆中下拉它们(执行 git pull
和 git submodule update
)。问题是,每当我想在执行子模块更新后更改子模块文件夹中的文件时,我需要先检出跟踪的分支以将其从 gitlink 中取出或使用 git push origin HEAD:<name-of-tracked-branch>
[=15 推送=]
当它已经是配置的一部分时,我似乎不需要在我的推送中指定跟踪分支的名称。有什么我想念的吗?
A git clone --recurse-submodules
应该克隆、检出并将两个子模块更新到它们各自远程跟踪分支的最新提交。
但他们仍然会在 SHA1 上进行签出,而不是在分支机构中。
你需要 foreach command to check their branch:
git submodule foreach -q --recursive 'git switch $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo main)'
多行:
git submodule foreach -q --recursive \
'git switch \
$(git config -f $toplevel/.gitmodules submodule.$name.branch || echo main)'
OP Josh Russo points out to this gist:
git pull
git submodule update --init --remote
git submodule foreach -q --recursive 'git switch $(git config -f $toplevel/.gitmodules submodule $name.branch || echo main)'
git submodule foreach -q --recursive 'git pull'
我正在尝试将共享库实现为 Git 子模块,并且我正在努力寻找在子模块文件夹中推送更改的最佳实践。我可以让它工作,但感觉很尴尬。
这是我的测试仓库https://github.com/rupe120/submodule-test
我设置了子模块来跟踪给定的分支,但是在新的克隆和子模块更新后这没有帮助。我知道子模块引用是一个 gitlink,但是当我进入子模块时,我无法推送,因为它引用的“分支”不是分支,而是 gitlink。
我要么需要检出子模块中的跟踪分支,这样我就可以推送更改并在单独的克隆中下拉它们(执行 git pull
和 git submodule update
)。问题是,每当我想在执行子模块更新后更改子模块文件夹中的文件时,我需要先检出跟踪的分支以将其从 gitlink 中取出或使用 git push origin HEAD:<name-of-tracked-branch>
[=15 推送=]
当它已经是配置的一部分时,我似乎不需要在我的推送中指定跟踪分支的名称。有什么我想念的吗?
A git clone --recurse-submodules
应该克隆、检出并将两个子模块更新到它们各自远程跟踪分支的最新提交。
但他们仍然会在 SHA1 上进行签出,而不是在分支机构中。
你需要 foreach command to check their branch:
git submodule foreach -q --recursive 'git switch $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo main)'
多行:
git submodule foreach -q --recursive \
'git switch \
$(git config -f $toplevel/.gitmodules submodule.$name.branch || echo main)'
OP Josh Russo points out
git pull
git submodule update --init --remote
git submodule foreach -q --recursive 'git switch $(git config -f $toplevel/.gitmodules submodule $name.branch || echo main)'
git submodule foreach -q --recursive 'git pull'