我正在建立一个将由5-10名开发人员使用的git-repository 我在主存储库中设置了一些子模块,但似乎它们在递归克隆时不会自动跟踪分支。 主要问题是避免开发人员在分支机构之外(即无头)承诺
我相信我已经添加了子模块,就像其他StackOverflow帖子建议您应该设置分支跟踪一样。例如git submodule tracking latest
我使用git 2.7.4并使用命令
添加git submodule add -b ${submodule_branch} ../../${submodule_repo_path}.git ${submodule_path}
git submodule update --remote
当我在其中一个子模块中调用'git branch'时,它清楚地表明我在一个分支上。
git branch
* master
我提交此更改并推送到远程'git push origin --mirror --force'
服务器是BitBucket v5.3.0
当我使用'git clone --recursive'克隆时,我得到了所有的repo,而.gitmodules看起来是正确的,它提到了分支
[submodule "some_app"]
path = some_app
url = ../../some_app.git
branch = master
然而,在子模块中,它看起来像是分离的:
somepath/some_app ((487b858...))
$ git branch
git branch
* (HEAD detached at 487b858)
master
我可以通过检查每个子模块中的正确分支来制定解决方法,但我认为不应该需要它。
我也试过打电话
git submodule update --remote
克隆后,但没有帮助
在使用子模块时,您必须先检查分支是否正常?
答案 0 :(得分:1)
您从哪个文件夹尝试了子模块更新命令?我想如果没有测试,这是其中一个案例,你至少应该在包含子存储库的主存储库中,而不是在其中一个存储库中。
分离行为是所希望的行为。当您查看代表子模块文件夹的文件时,您将在添加子模块时看到提交哈希。 当你执行git子模块更新--remote时你也会看到你必须提交更新,这意味着git会将现在最新的提交哈希写入文件。这允许您转到子模块的特定提交。
我需要一些时间来适应它。你应该明确阅读git scm书的submodules章节。它为您提供了一些帮助您使用子模块的提示和技巧(以及命令/设置)。