我刚刚开始研究一个新项目,团队将代码作为git子模块进行维护,我以前没有使用附带git子模块的Visual Studio 2017解决方案的经验,现在我对如何处理新的非常困惑要求因为每个模块都有自己的分支系统。
物理文件夹树如下所示:
-Main Project Folder
--Modules Folder
---Module1 Folder
---Module2 Folder
---Module3 Folder
-Project.sln
在这种情况下,有4个git repos:
1 - 主要项目
2 - 模块1
3 - 模块2
4 - 模块3
主项目将其他3个链接为git子模块
所有模块(在大多数情况下)具有相同数量的具有相同命名的分支,这是我怀疑的地方,如果每个模块都存在一个名为feature1的分支,它们是如何创建它的?在每个回购之间手动切换?或者有一种方法来执行如下命令:
对于每个子模块,克隆它的名为'feature1'的现有分支,并从中创建一个名为'feature2'的新分支
我的最后一个问题是,我猜测功能/修复开发结束时的每个子模块分支必须合并到主项目中的一个分支......这是怎么做的?
我将非常感谢您帮助理解这一点。
如果你想从feature2
为所有子模块创建feature1
,你可以在主项目中运行:
git submodule foreach 'git branch feature2 feature1'
git submodule foreach可以同时操作所有子模块。
如您所知,子模块有自己的分支。这些分支不与主项目的分支合并。主项目一次只对子模块的特定修订感兴趣。主项目的分支的某个提交在其自己的树对象中记录它所需的子模块的修订。
在主项目中,您可以运行git ls-tree -r -t HEAD
来探索HEAD
的树对象。有一个格式为160000 commit 17cb6ab56b8bbdc7eff94ec981453301c97efb42 Module1
的条目。当在主项目中检查HEAD
的修订时,子模块Module1
应与其自己的提交17cb6ab56b8bbdc7eff94ec981453301c97efb42
同步。如果Module1
的修订版更改为新修订版或旧修订版,并且您希望在主项目中提交此更改,则可以在主项目git add Module1 && git commit
中运行。
我认为在您的场景中没有自动化的Visual Studio代码,或者任何可用的插件,但是,您可以为此编写一个task。
你可以为任务分叉shell命令。
git submodule foreach
命令将在这里提供帮助。
例如。要在所有子模块中创建一个分支(具有相同的名称),您可以像这样触发命令:
git submodule foreach git checkout {{sourcebranch}}
git submodule foreach git checkout -b {{newbranch}}
以下是visual studio任务的示例文件内容
{
"version": "2.0.0",
"tasks": [
{
"label": "createBranch",
"type": "shell",
"command": "git submodule foreach `git checkout -b newbranch`",
"group": "build",
"presentation": {
"reveal": "always"
}
}
]
}
您需要找到如何传递newbranch名称