在我的项目仓库中,我创建了一个子模块,在.submodules
文件中,它看起来像这样:
[submodule "lib/payment-sdk"]
path = lib/payment-sdk
url = https://user@github.com/user/Payment-SDK.git
我用以下命令初始化子模块:git submodule update --init --recursive
,但是如何从developer分支获取最新信息?在生产服务器上,它将需要从master分支中拉出。
答案 0 :(得分:1)
如果最新版本在五分钟前更新为不兼容的版本会怎样?您的主模块不能使用该版本。因此,这不是子模块的工作。使用子模块时,可以在超级项目中选择特定的提交。超级项目实际上说:对于当前的超级项目提交,对子模块lib/payment-sdk
使用提交XYZ。子模块Git会按照超级项目git(git submodule update
)的指示,忠实地检查该特定提交。
设置子模块的分支不会更改上面的内容。有关分支名称的用法,请参见脚注1。
现在,如果您正在使用 存储库,并且发现子模块有一个新提交,并且您想对其进行测试,则可以做到这一点很容易。只需输入子模块(毕竟这是一个单独的存储库),然后输入git checkout
您要测试的提交。 1 在超级项目中构建和测试时,子模块仍保留在该提交上。如果一切顺利,那么在超级项目中,然后运行:
git add lib/payment-sdk
告诉 superproject 在您进行的下一次提交中,您希望superproject命令子模块使用与现在使用的相同的提交。
如果这是您需要对超级项目进行的唯一更新,则现在可以继续进行提交:
git commit
否则,例如,如果新的lib/payment-sdk
需要对超级项目进行一些修复或更新,则需要进行其他任何超级项目更改,也git add
进行修改,然后 git commit
进行新的提交。
1 您也可以使用git submodule update --remote
将其自动化,但是细节变得相当复杂。在大多数情况下,我个人更喜欢通过导航到子模块来直接控制每个子模块。如果您想使用git submodule update --remote
,则 this 表示子模块的分支设置有意义。
此时,您现在必须选择以下三种特定模式之一:
checkout
:这意味着切换到提交。子模块中要检出的提交的哈希ID由分支名称确定。
merge
:这意味着将当前提交与另一个提交合并。用于合并的提交的哈希ID由分支名称确定。
rebase
:这意味着将当前提交重新设置为另一个提交。用于重新设置的提交的哈希ID由分支名称确定。
在所有情况下,除非您用git submodule
或git fetch
禁止这样做,否则--no-fetch
将首先在子模块存储库中运行-N
。 git fetch
操作将获取新的提交并更新名称,以便您先前设置的分支名称在git fetch
之后采用新的哈希ID值。 请记住,git fetch
获得了新的提交,并更新了origin/master
之类的远程跟踪名称。 git fetch
必须必须在子模块Git中运行,而不是在超级项目Git中运行:毕竟,这些都是独立的,大多独立的Git存储库。因此,多合一git submodule update --remote
操作就是这样做的:
cd
进入子模块; git fetch
; git fetch
进行更新; git checkout
)。手动执行此操作-这样您就可以控制结果,而不是仅仅假设某些计算机程序已产生正确的答案(即42),即使您不确定问题是什么是-您可以执行相同的步骤,但实际上可能要先查看每个步骤,然后再继续下一个步骤。
答案 1 :(得分:0)
将branch = develop
添加到您的配置中,
[submodule "lib/payment-sdk"]
path = lib/payment-sdk
url = https://user@github.com/user/Payment-SDK.git
branch = develop
Documentation以支持此操作。
对于生产而言,我认为这行不通,因为据我所知,子模块仍将检出为develop
。无论将代码部署到生产环境中的什么,都需要手动检出该子模块中的master分支。