我第一次使用git子模块。苦苦挣扎于了解如何全面创建分支并将其添加到所有远程回购。
目前我的文件结构类似于以下内容:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void) {
char *myStr = "a,b,c";//unknown size string.
size_t len = strlen(myStr);//check size
char *copyStr = malloc(len + 1);
strcpy(copyStr, myStr);
char *items = malloc((len+1)/ 2);
size_t n = 0;
char *itemp = strtok(copyStr, ",");
while(itemp != NULL){
items[n++] = *itemp;
itemp = strtok(NULL, ",");
}
//check print
for(size_t i = 0; i < n; ++i){
printf("%c\n", items[i]);
}
free(copyStr);
free(items);
return 0;
}
如果我在父仓库上创建分支:
-parent_repo
|
|_ submodule_1
|_ submodule_2
|_ submodule_3
|_ submodule_4
|_ submodule_5
|_ submodule_6
|_ submodule_7
我想在所有子模块中创建一个分支,包括父模块。之后,所有分支都被远程推送到每个子模块及其受尊重的存储库。
尝试了以下步骤:
(master) $ git checkout -b feature/my_feature
(feature/my_feature) $ git commit -m "created my_feature"
(feature/my_feature) $ git push -u origin feature/my_feature
..刚刚失败。找不到第一个命令。
..如果我这样做:
$ git submodule foreach -b branch_name
$ git push --recurse-submodules=on-demand
$ git submodule foreach "(git checkout branch_name; git pull)&"
git返回:
$ git config -f .gitmodules submodule.submodule_1.branch branch_name
$ git submodule update --remote
答案 0 :(得分:3)
请参阅Submodule tips:
例如,假设我们想要启动一个新功能或执行错误修正,我们已经在几个子模块中进行了工作。
我们可以轻松地隐藏所有子模块中的所有工作:
$ git submodule foreach 'git stash'
Entering 'CryptoLibrary'
No local changes to save
Entering 'DbConnector'
Saved working directory and index state WIP on stable: 82d2ad3 Merge from origin/stable
HEAD is now at 82d2ad3 Merge from origin/stable
然后我们可以在所有子模块中创建一个新分支并切换到它:
$ git submodule foreach 'git checkout -b featureA'
Entering 'CryptoLibrary'
Switched to a new branch 'featureA'
Entering 'DbConnector'
Switched to a new branch 'featureA'
然后你仍然需要在父仓库中创建相同的分支,添加,提交和推送,因为所有子模块仓库都会发生变化。
但请记住:那些是不同的分支(即使它们具有相同的名称),每个分支都特定于其自己的仓库(父仓库或子模块仓库)。