git submodule add -b工作怎么样?
添加具有特定分支的子模块后,新的克隆存储库(之后git submodule update --init)将处于特定提交,而不是分支本身(git status在子模块上显示"当前不在任何分支上").
我无法找到任何信息.gitmodules或.git/config关于子模块的分支或任何具体的承诺,那么,如何Git的数字出来?
此外,是否可以指定标签而不是分支?
我正在使用1.6.5.2版.
我正在使用git submodule以跟踪子项目。该子模块指向一个特定的分支,但是我现在需要对其进行更改。
我试图手动编辑.gitmodules文件并更改branch =条目,但是稍后我提供的用于更新存储库的每条命令都不会执行任何操作或失败。
我试过了
git submodule sync # Succeeds, but nothing happens
git submodule update # Doesn't do anything
git submodule update --remote # fails with Needed a single revision
Run Code Online (Sandbox Code Playgroud)
该子项目确实已正确签出,并且其中的gitk表明它确实具有我需要切换到的新分支。我可以手动执行此操作并提交新的哈希,但是我不确定是否git submodule会真正理解这种更改。
我也尝试删除所有子模块文件夹(包括.git文件夹内)并重新运行
git submodule update --init --recursive --remote
Run Code Online (Sandbox Code Playgroud)
但是我仍然使项目保持与以前相同的状态(我想是因为它仍在更新为提交的哈希)。
您好,我有一个包含子模块的超级项目。子模块通过分支名称而不是 sha 提交号进行跟踪。在我们的构建服务器上,我想尽可能少地拉动。所以我尝试了
git submodule update --remote --init
Run Code Online (Sandbox Code Playgroud)
然而这并不肤浅。似乎拉出所有内容然后切换到分支
git submodule update --remote --init --depth 1
Run Code Online (Sandbox Code Playgroud)
这不起作用,它失败了:
git submodule update --remote --init --depth 1 ThirdParty/protobuf
Submodule 'ThirdParty/protobuf' (ssh://myrepo/thirdparty/protobuf.git)
registered for path 'ThirdParty/protobuf'
Cloning into '/home/martin/jenkins/workspace/test_log_service/repo/ThirdParty/protobuf'...
fatal: Needed a single revision
Unable to find current origin/version/3.2.0-era revision in submodule path 'ThirdParty/protobuf'
Run Code Online (Sandbox Code Playgroud)
关于浅层子模块有一个不同的问题,但是我不认为它适用于分支,仅适用于 sha 提交
最初添加子模块时,我指定了一个特定的分支,如.gitmodule文件所示:
[submodule "externals/grpc/grpc"]
path = externals/grpc/grpc
url = git@github.com:me/grpc.git
branch = release-1.0
Run Code Online (Sandbox Code Playgroud)
我想更改为我的子模块的master分支,所以我将分支.gitmodules从更改release-1.0为master,并且很好地,只是从父git树中删除了该子模块:
cd $submodules
rm -rf grpc
cd $gitroot
git submodule sync
git submodule update --init --recursive
Run Code Online (Sandbox Code Playgroud)
现在,当我返回子模块时,它仍然是从release-1.0分支上的提交而不是最新的主提交中检出的。
我缺少什么步骤来切换子模块的分支?