我是第一次使用git子模块;所以这可能很明显,但我还不知道如何解决。
背景:我正在创建一个公共存储库,将其作为多个项目的子模块包含在内。这些项目和子模块具有多个开发分支,我希望项目的特定分支指向子模块中的特定分支。我不介意使用脚本来设置CI以使其自动化。 例如,
的分支项目A:主,A-1,A-2
项目B:大师B-1,B-2
子模块:主模块,A-1,A-2,B-1,B-2
问题:这有可能吗?子模块是否适合这种情况?如果是,该如何设置?
提前谢谢!
答案 0 :(得分:0)
有可能,前提是您declaring your submodule with a branch to follow
git submodule add -b <branch> <repository> [<path>].
从那里开始,在您的每个项目中,一个简单的git submodule update --remote
会将子模块的内容更新为HEAD
中最新的<repository>/<branch>
。
答案 1 :(得分:0)
您还可以使用 git subtree
(git submodule
添加单个分支的另一种方法)。
您只需要使用以下命令将子模块存储库的分支添加到主存储库的文件夹中即可:
git subtree add --prefix=<folder name> <URL for the submodule repo> <branch name>
就像将子模块master
分支添加到projectA的master
分支一样,您可以使用以下命令:
# In local project A repo
git checkout master
git subtree add --prefix=master <URL for the submodule repo> master
git push origin master
要将子模块B-1
分支添加到projectB的B-1
分支,可以使用以下命令:
# In local project B repo
git checkout B-1
git subtree add --prefix=B-1 <URL for the submodule repo> B-1
git push origin B-1
如果子模块的分支已进行了新更改,则可以通过以下方法更新主存储库中存在的子树:
git subtree pull --prefix=<folder name> <URL for the submodule repo> <branch name>
就像子模块B-1
分支使用新更改进行更新一样,您可以相应地更新projectB中的B-1
文件夹,如下所示:
# In local project B repo
git checkout B-1
git subtree pull --prefix=B-1 <URL for the submodule repo> B-1
git push origin B-1
如果要直接从主存储库的子树将更改推送到子模块存储库,则可以使用以下命令:
git subtree push --prefix=<folder name> <URL for the submodule repo> <branch name>
例如从ProjectA A-1
分支(A-1
文件夹)推送更改到子模块存储库,您可以使用以下命令:
# In local project A repo
git checkout A-1
# Make the commit changes in the folder A-1
git subtree push --prefix=A-1 <URL for the submodule repo> A-1
git push origin A-1