父级目录包含多个git项目,是否可以基于子git项目来进行git管理?

我有一个父级目录:
Parent/
在里面有很多子git项目:

Parent/前端/react-01/.git
Parent/前段/react-02/.git
Parent/后端/django-01/.git
Parent/后端/java-01/.git

我把Parent放在GitHub上的,然后我clone到本地,比如我修改了Parent/前端/react-01 项目,可以只管理推送此项目吗?

阅读 1k
4 个回答

看你的描述,也结合另外两位大佬回答,分析你给的目录结构,感觉你这既不属于submodules、也不属于subtree、更不属于menorepo,不然parent应该有自己的一份package.json的,所以你这所有的项目之间没有任何关系,不过你可以利用上述的三种方法改善自己的项目结构,这样就可以方便管理自己的项目了,当然每种方案都有优劣势,自己调查清楚后酌情采用。

不可以。子目录里的 git 会使它脱离上级目录的 git 管理。

没太理解你的问题,什么叫“只管理推送此项目”?

这么说吧,Parent/前端/react-01/ 下发生的变更,只会被 Parent/前端/react-01/.git 追踪,而不会被 Parent/.git 追踪。推送也是推送到 Parent/前端/react-01/.git 所配置的远程源,推送不到 Parent/.git 的源上。

这种子目录下面还有 .git 的,叫 Git Submodule。git 也确实提供了相关命令,可以让你在父项目下直接操作子项目里的相关模块,但要注意这种操作仅仅是为了方便你、用不着 cd 到每个子项目底下再执行相关操作,并不意味着父项目会直接追踪这些变更。

https://git-scm.com/book/en/v2/Git-Tools-Submodules
https://git-scm.com/docs/git-submodule

git有个git submodulegit subtree功能,可以将多个子git仓库通过一个父git仓库整合起来,目录结构会变成(git submodule为例)

Parent
    .git/
    .gitmodules
    前端/
        react-01/
                .git/
        react-02/
                .git/
    后端/
        django-01/
                .git/
        java-01/
                .git/

你可以分别只对一个仓库修改并提交,命令也没有变化,但是git submodule相关的命令你们团队要学习,例如

  • 克隆父仓库包括子仓库
    git clone --recurse-submodules xxx
  • 所有子仓库更新代码
    git submodule foreach 'git pull'
  • 所有子仓库切换到相同的分支
    git submodule foreach 'git checkout branch'
  • 某个子仓库react-02/操作

    cd react-02/;
    
    # 修改文件
    git add *.css
    git commit -m 'xxx';
    git push;
    # 切换到abc分支
    git checkout abc;

最后,还需要团队管理者管理.gitmodules文件,里面记录了各个子模块的地址和分支信息等

推荐问题
logo
Microsoft
子站问答
访问
宣传栏