我刚刚开始在一个新项目中工作,该团队正在将代码作为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'的新分支
最后一个问题是,我猜想功能/修复程序开发结束时的每个子模块分支都必须合并到Main Project中的一个分支中……这是怎么做的?
感谢您的理解。
答案 0 :(得分:0)
如果要从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
中运行。
答案 1 :(得分:0)
我认为您的方案或任何可用的插件在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"
}
}
]
}
您需要查找如何传递新分支名称