首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Git Submodule项目子模块管理

模块化与组件化 最近一直在研究客户端的组件化/模块化问题,除了将项目拆分为多个小的子模块,还会涉及到多个子模块管理的问题。下面说一些在模块化开发中的一些基本知识。...SDK 以及第三方 SDK, 为整个平台的基础设施建设提供动力。...使用命令git status可以看到多了两个需要提交的文件,其中.gitmodules指定submodule的主要信息,包括子模块的路径和地址信息,moduleA指定了子模块的commit id,使用git...需要注意的是,父项目的git并不会记录submodule的文件变动,它是按照commit id指定submodule的git header,所以.gitmodules和moduleA这两项是需要提交到父项目的远程仓库的...删除子模块 删除子模块会涉及到以下几个步骤: 删除.gitsubmodule里相关部分; 删除.git/config 文件里相关字段; 删除子仓库目录。

89820
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Git必备命令-子模块

    (同步所有的子模块) $ git submodule update --remote xxx // 指定需要同步的子模块 子模块目录下更新: git pull 默认情况下会跟踪子模块的 master 分支...,设置为其他分支: a. .gitmodules 设置 git config -f .gitmodules submodule....在包含子模块的项目上工作 从子模块的远端拉取上游修改 如果想要在子模块中查看新工作,可以进入到目录中运行 git fetch 与 git merge,合并上游分支来更新本地代码。...不过你也可以设置为想要的其他分支。...例如,你想要 DbConnector 子模块跟踪仓库的 “stable” 分支,那么既可以在 .gitmodules 文件中设置 (这样其他人也可以跟踪它),也可以只在本地的 .git/config 文件中设置

    1.1K20

    Git实战

    要解决此问题,这样操作: 进入 github 中该项目的 Settings 页面; 设置 Default Branch 为其他的分支(例如 master); 重新执行删除远程分支命令。...保留子组件的现有目录结构的完整性,故而git创造了类似于maven中的module一样的功能,来实现子模块的管理 打个比方:现在我有一个父工程A,其工程路径下面有五个子工程BCDEF,按照往常是要git...现在有了gitmodules就可以直接下载A工程就可以了,其他的5个子工程都会自动下载。...[相对于父模块的相对路径]不一致的 创建完成以后会生成.gitmodules与.gitattributes这两个文件 .gitmodules和.git/config保存着子模块的信息 从远程仓库获取所有模块数据...先清空.gitmodules中的内容 再执行文件的删除 ———— 其他命令 # .gitmodules中子模块的内容更新到.git/config中 git submodule init gitmodules

    87010

    7.11 Git 工具 - 子模块

    例如,你想要 DbConnector 子模块跟踪仓库的 “stable” 分支,那么既可以在 .gitmodules 文件中设置(这样其他人也可以跟踪它),也可以只在本地的 .git/config 文件中设置...这意味着没有本地工作分支(例如 “master”)跟踪改动。 所以你做的任何改动都不会被跟踪。 为了将子模块设置得更容易进入并修改,你需要做两件事。 首先,进入每个子模块并检出其相应的工作分支。...为了手动指定它,我们只需给 update 添加 --merge 选项即可。 这时我们将会看到服务器上的这个子模块有一个改动并且它被合并了进来。...那些改动只存在于我们本地的拷贝中。 为了确保这不会发生,你可以让 Git 在推送到主项目前检查所有子模块是否已推送。...另一个主要的告诫是许多人遇到了将子目录转换为子模块的问题。 如果你在项目中已经跟踪了一些文件,然后想要将它们移动到一个子模块中,那么请务必小心,否则 Git 会对你发脾气。

    1.5K20

    8. git-submodule 子模块

    子模块的添加 git submodule add 其中,url 为子模块的路径,path 为该子模块存储的目录路径。...执行成功后,git status 会看到项目中修改了.gitmodules,并增加了一个新文件夹(为刚刚添加的路径) 使用命令 git status 可以看到多了两个需要提交的文件,其中 .gitmodules...指定submodule 的主要信息,包括子模块的路径和地址信息,moduleA 指定了子模块的commit id,使用 git diff 可以看到这两项的内容。...需要注意的是,父项目的 git 并不会记录 submodule 的文件变动,它是按照 commit id 指定 submodule 的 git header,所以 .gitmodules 和 moduleA...在项目中,进入到子模块目录下,执行 git pull 更新,查看 git log 查看相应提交。 完成后返回到项目目录,可以看到子模块有待提交的更新,使用 git add,提交即可。

    69420

    git 系列 — git submodule 命令及其用法

    添加子模块 在主项目的根目录执行: git submodule add {http/ssh} 之后会在主项目的根目录生成 .gitmodules 文件,用于记录子模块在信息和子模块同名的文件夹,用于存放子模块...{branchName} git fetch git merge {origin/branchName} 也可以不进入子模块,直接在主项目中更新: # 在主模块,但是这样默认是子模块的 master 分支...# 若不指定 submoduleName 则会更新所有的子模块 git submodule update --remote {submoduleName} # 可以通过以下命令设置特定的分支 git...确保 push 子模块 有时当更改完子模块后,忘记了 push,但是在主项目更改后却 push 了,所以远程仓库的子模块未更新,导致其他人不会获取子模块的更新,可以使用以下命令防止这种情况: # 在主模块...push 之前,检查子模块是否 push,包括嵌套子模块 git push --recurse-submodules=check # 在主模块 push 之前,自动 push 子模块,包括嵌套子模块

    3.5K20

    Git 工具 - 子模块: submodule与subtree的使用

    大致结构可能是这样 project |--moduleA |--submoduleC |--submoduleD |--moduleB project和ABCD各个模块中,CD在不同的git仓库中,这时...git status, 可以看到目录有增加1个文件.gitmodules, 这个文件用来保存子模块的信息。...在暂存区所以我们才发现了new commits这种提示语,Git并不关心子模块的文件如何变化,我只需要在当前提交中记录子模块的commit的hash值即可,之后我们从父级仓库拉取子仓库的时候,Git拉取了本次提交记录中的子模块的...如果你仅仅引用了别人的子模块的游离分支,然后在主仓库修改了子仓库的代码,之后使用git submodule update拉取了最新代码,那么你在子仓库游离分支做出的修改会被覆盖掉。...我们假设你一开始在主仓库并没有采用子模块的开发方式,而是在另外的开发分支使用了子仓库,那么当你从开发分支切回到没有采用子模块的分支的时候,子模块的目录并不会被Git自动删除,而是需要你手动的删除了。

    2.8K10

    浅析 Git 子模块

    ,可以灵活的为我所用;在 Git 层面又是独立提交管理的,和主项目的 commit 时间线保持了完全的独立性。...比如一个通用组件作为子模块分别被公司中不同项目引用,则各个项目组做出的改进,最后都可以汇总到主组件库中,为大家所共享。 II. 如何用起子模块?...更新子模块的命令为: git submodule update --remote Git 默认会尝试更新所有子模块;如果子模块数量众多,也可以在以上命令中传入需要更新的子模块名称。...;所以需要要求 Git 在推送主项目之前检查所有子模块是否已正确提交: git push --recurse-submodule=check 根据上述检查结果,可以进入每个子模块并手动提交。...Tom's Changes" 2.7 - 删除子模块 从 .gitmodules 文件中删除相关的行 从 .git/config 中删除相关部分 运行 git rm –cached 模块名称> 删除

    1.4K10

    Git Submodules 介绍(通俗易懂,总结了工作完全够用的 submodule 命令)

    为了解决多团队维护的难题,Git Submodules 也能大展身手,它可以让每个团队负责的模块就是一个 Git 仓库,这些 Git 仓库都被包含在同一个主 Git 项目下。...注意事项当你在文件夹B中做commit后,文件夹B里面就有了新的 commit id。此时主项目A中所记录的 submodule 的commit id也会更新。...方法三,主项目执行 git submodule update [submodule文件夹相对路径]注意,这个方法会使 submodule 的分支处于主项目里指定的 commit id。...通过配置git config -f .gitmodules submodule.子模块文件夹相对目录.branch 子模块分支名,使得每次执行git submodule update --remote时...,追踪任意指定的子模块分支(而非默认的主分支master)。

    29.6K146

    Git 介绍

    相关命令的简要说明如下: git add [file]:把当前工作文件加入到暂存区域 git commit:在暂存区域生成文件快照并提交到本地仓库 git rm --cached [file]:删除文件在工作区中的索引...,用来丢弃本地修改 三,Git 分支管理 传统的版本管理软件(如 SVN),分支操作实际上会生成一份现有代码的物理拷贝,每个分支都有自己完全独立的代码。...四,Git 子模块: Git 子模块和 SVN 里面的 externals 相似,即在代码库的子目录中中引入另外一个代码库,并保持两个仓库的独立性。...在 Git 仓库中添加一个子模块 rack: $ git submodule add git://github.com/chneukirchen/rack.git rack 这时会生成一个 .gitmodules...这是一个配置文件,保存了项目 URL 和你拉取到的本地子目录,执行 cat .gitmodules 看看里面的内容 $ cat .gitmodules [submodule "rack"]

    91380

    Git 介绍

    相关命令的简要说明如下: git add [file]:把当前工作文件加入到暂存区域 git commit:在暂存区域生成文件快照并提交到本地仓库 git rm --cached [file]:删除文件在工作区中的索引...,用来丢弃本地修改 三,Git 分支管理 传统的版本管理软件(如 SVN),分支操作实际上会生成一份现有代码的物理拷贝,每个分支都有自己完全独立的代码。...四,Git 子模块: Git 子模块和 SVN 里面的 externals 相似,即在代码库的子目录中中引入另外一个代码库,并保持两个仓库的独立性。...在 Git 仓库中添加一个子模块 rack: $ git submodule add git://github.com/chneukirchen/rack.git rack 这时会生成一个 .gitmodules...这是一个配置文件,保存了项目 URL 和你拉取到的本地子目录,执行 cat .gitmodules 看看里面的内容 $ cat .gitmodules [submodule "rack"]

    77710

    公共模块管理之 Git Submodule 使用总结

    在企业级项目开发中,对于较复杂的项目,不可避免地会引用一些公共基础库,或是将代码拆解成公共模块和多个子模块进行管理,主项目工程中的子模块需要对公共模块有依赖关系,却又不必关心公共模块内部的开发流程细节,...以世界上最好的语言 JavaScript 的伴侣 npm 为例,开发者编写一个公共模块,作为 npm package 发布,不仅可在自己的项目间复用,还可以贡献到开源社区,使更多的开发者受益。...使用者使用起来也极为简单,一条命令搞定: $ npm install 1.2 git 子模块管理工具 submodule git submodule 能够在项目主工程中添加子工程模块...2.2 获取 submodule 使用 git submodule add 命令会自动拉取子工程项目代码到指定目录,但其他开发者获取主项目代码时,使用 git clone 命令是不会拉取到子项目的代码的... 然后,在主项目下删除对应的子模块工程目录,接着删除 .gitmodules 和 .git/config 配置文件下的相关条目,再删除 .git/module/ 下的子模块目录

    5.7K180

    Flarum 二次开发项目配置指南

    目前本文方案在 0xFFFF 社区 运行良好,它遵循了现有的 Composer 加载,版本管理的机制,可以跟踪本地的修改、随时切换官方分支或定制开发的分支,避免那些诸如定制修改丢失、与最新版本代码难以同步等问题...后来在社区的驱动下,有了 Composer,借鉴了 NPM 与 Gem Bundler,设计了 PHP 语言下的依赖加载机制。...网站主体在一个 Git 仓库,所有要修改的子模块,也加入各自单独的仓库,以 submodule 的形式嵌入到网站主体的 Git 仓库中。...添加待修改的模块 接下来我们以 submodule 的形式加入待修改的模块,同样以 flarum/core 为例。...与上游同步 在这一系列机制下,我们定制的所有模块,都是在官方的分支提交下所分叉出的新的分支。因此,若上游有新的代码更新,我们只需要在本地同步上游的分支,然后再合并修改,再push 到我们的仓库中。

    3.6K10

    理解Git Submodules

    在这一点上,git submodules与monorepo一致(都关心子模块的源码) 这样主项目需要与子模块频繁联调时的麻烦就不复存在了,因为主项目拉取到的submodules都是完整repo,可以直接修改...而submodules只在主repo里存放所有子模块“索引”(repo url + branch name + commit hash),例如: # 主repo的.gitmodules文件 [submodule...的最新commit hash与之关联 在主repo根目录按需创建.gitmodules文件,记录子模块repo地址(url),分支名(branch)以及坑位路径(path) 然后提交这些子模块配置: $...目录下,实际发生了2件事: 检查缓存是否存在clone好的子模块repo(比如clone来的主repo并没add过,就不存在缓存),按需clone 在子模块repo根目录创建.git/config,记录其...因此在改动子项目代码之前,需要手动切换到master分支: $ git checkout master $ git add . $ git commit -m 'feat: xxx' $ git push

    2.7K71

    这些git技能够你用一年了

    而 Git 2.x 默认的是 simple,意味着执行 git push 没有指定分支时,只有当前分支会被 push 到你使用 git pull 获取的代码。...添加 为当前工程添加submodule,命令如下: git submodule add 仓库地址 路径 其中,仓库地址是指子模块仓库地址,路径指将子模块放置在当前工程下的路径。...注意:路径不能以 / 结尾(会造成修改不生效)、不能是现有工程已有的目录(不能順利 Clone) 命令执行完成,会在当前工程根路径下生成一个名为“.gitmodules”的文件,其中记录了子模块的信息。...添加完成以后,再将子模块所在的文件夹添加到工程中即可。 删除 submodule的删除稍微麻烦点:首先,要在“.gitmodules”文件中删除相应配置信息。...---- 不顺利的代码提交流程 在git push后出现错误可能是因为其他人提交了代码,而使你的本地代码库版本不是最新。 这时你需要先git pull代码后,检查是否有文件冲突。

    88670

    Git Submodules vs Git Subtrees(译)

    每个团队都应该有公共的代码项目,submodule和subtrees可以让我们在不同项目中使用这些公共的代码,避免因复制产生重复代码,甚至导致相同代码出现不同修改产生多个版本。...Subtrees vs Submodules 最简单理解两者的方式,subtrees在父仓库是拉取下来的一份子仓库拷贝,而submodule则是一个指针,指向一个子仓库commit。...new file: lib/awesomelib 会发现.gitmodules文件被新建,内容为: [submodule “lib/awesomelib”] path = lib/awesomelib...url = https://github.com/mowen/awesomelib 所以添加一个submodule会: .gitmodules文件被建立,内容包括submodule的路径及子仓库...submodules需要与父仓库分开提交,分开切换分支。

    1K20

    Git使用小记

    ] 2) 编辑“.gitmodules”文件,将子模块的相关配置节点删除掉 3) 编辑“ .git/config”文件,将子模块的相关配置节点删除掉 4) 手动删除子模块残留的目录...update ----每次更新或切换分支后都需要运行一下 删除子模块:(分4步走哦) 1) $ git rm --cached [path] 2) 编辑“.gitmodules...、文件夹不提交 在仓库根目录下创建名称为“.gitignore”的文件,写入不需要的文件夹名或文件,每个元素占一行即可,如 target bin *.db...(4)这是看到自己已经在新建的branch下面了,然后看一下有没有文件。...//这样会将除了在.gitignore中写入的文件都加入进要提交的文件内 (7)然后进行提交到本地仓库:$ git commit - m "提交" (8)可以查看状态:$ git

    39700
    领券