当前位置: 首页 > 知识库问答 >
问题:

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

邵捷
2024-07-26

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

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

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

共有4个答案

熊朝
2024-07-26

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文件,里面记录了各个子模块的地址和分支信息等

庾才
2024-07-26

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

这么说吧,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
小牛23035
2024-07-26

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

唐睿
2024-07-26

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

 类似资料:
  • Git目录 'Git目录'是为你的项目存储所有历史和元信息的目录 - 包括所有的对象(commits,trees,blobs,tags), 这些对象指向不同的分支. 每一个项目只能有一个'Git目录'(这和SVN,CVS的每个子目录中都有此类目录相反), 这个叫'.git'的目录在你项目的根目录下(这是默认设置,但并不是必须的). 如果你查看这个目录的内容, 你可以看所有的重要文件: $>tree

  • 问题内容: 我正在为这样的linux / apache / php网络项目计划目录结构: 仅会暴露在apache中 在和目录将只在PHP路径。 为了使css和js文件在webroot目录中可见,我计划使用符号链接。 我尝试遵循以下原则: index.php是按组件和库进行布局的,而不是按文件类型进行布局的,而不是按“公共”或“非公共”布局的,这是一个例外,这是为了简化开发。 仅公开公共Web目录中

  • null 所以根据我的理解,我应该能够将现有的存储库拉到我的本地磁盘上,对文件进行更改,然后将更改推送到Git。有人能告诉我需要哪些命令来实现这一点吗?我们唯一的分支是:master,标记有“main”和“development”。这不是一个很大的项目,但是我们想要使用git进行版本控制。 谢谢你的提示。

  • 问题内容: 我想使用两个Git存储库构建一个项目。其中一个包含源代码,而另一个包含构建和部署脚本。 我的问题是我需要一个用于构建和部署项目不同部分(大型项目,多个存储库,相同的构建和部署脚本)的存储库,但是Jenkins似乎无法处理此问题(或者我不知道)不知道/找不到方法)。 问题答案: 更新 现在不建议使用多个SCM插件,因此用户应该迁移到Pipeline插件。 旧答案 是的,詹金斯可以处理。只

  • 问题内容: 我有一个Git存储库,其中包含一堆顶级Maven项目(每个项目都位于带有pom.xml的自己的子目录中)。这里的顶层意味着这些项目位于存储库根目录下的子目录中。所有这些项目应保留在相同的Git存储库中。 它们可以/应该由独立的詹金斯工作建立。因此,我们为projectA有一份工作,为projectB有一份工作。 以前使用Subversion,我能够为每个项目设置一个Jenkins作业,

  • 我克隆了一些库到我的android的项目,一切正常,当我完成我的工作,我试图把它推到我的回购,但它给我的问题: 计数对象:1937,完成。增量压缩最多使用8个线程。压缩对象:100%(1839/1839),完成。写入对象:100%(1937/1937),27.24mib | 5.83mib/s,完成。总计1937(增量703),重复使用0(增量0)错误:RPC失败;结果=22,HTTP代码=413