如何提交对子模块而不是其父模块的更改?

如何解决如何提交对子模块而不是其父模块的更改?

我创建了一个存储库 A original

然后我创建了存储库 B original

我将 A original 添加到 B original 作为 A submodule

我对 A submodule 中的 B original 进行了更改,但我不想将更改从 A submodule 推送到 A original

是否可以将更改推送到 A submodule 而不必将它们推送到 A original?然后是否可以将来自 A original 的更新合并到 A submodule 中?

子模块是否是一个坏主意,更合适的方法是什么??

解决方法

子模块一个 Git 存储库。

一个 Git 存储库只不过是一个提交的集合1。这意味着如果你想保留一些东西,你必须把它放到一个提交中。2

超级项目——使用第二个 Git 存储库的 Git 存储库,从而将第二个 Git 存储库转换为相关子模块——是它自己独立的 Git 存储库。在这种情况下,A original 是您的超级项目。它有提交,并且要坚持下去,您必须将其放入提交中。但是当 A original 引用某个子模块时,它在这里所做的只是存储一个 Git 哈希 ID。 这个哈希 ID 是子模块 Git 中某个特定提交的“真实名称”存储库.3

是否可以将更改推送到 [子模块 Git 存储库] 而不必将它们推送到 [超级项目]?

这个问题有点格式错误,因为我们实际上并没有推送更改git push 推送的是提交。提交不是更改:它们是快照。不过,这个概念是合理的:您进行一些更改,然后提交它,即通过获取更改的源并将它们转换为快照来制作新快照。

如果您在某个存储库中进行新的提交——无论“类型”的存储库可能是:超级项目、子模块还是独立的——并且您希望这些提交可供其他人使用,您不仅可以 em> 推动它们,你经常必须推动它们。将它们提供给其他人的唯一其他方法是让其他人获取/拉取您自己的计算机的访问权限。这往往是一项艰巨的工作,这就是为什么我们大多将它放在托管服务提供商(如 GitHub 或 Bitbucket)上的原因。

子模块的棘手之处在于,如果您确实对子模块 Git 存储库进行了更改,那么您应该:

  1. 进行一次或多次新提交;
  2. 将这些提交提交到其他人可以看到的地方(例如,git push 将它们发送给您的托管服务提供商);
  3. 返回到您的超级项目存储库并使用那里的 Git 工具创建一个新快照:一个显示使用新的子模块提交

你也可以在这个超级项目快照中包含其他更改,但关键的变化是这个新的提交在超级项目说使用新的提交在子模块 .

然后是否可以将来自 [超级项目] 的更新合并到 [子模块] 中?

否:超级项目没有对子模块的更新。超级项目是一个单独的 Git 存储库。它所做的只是引用子模块中的一些特定提交。由于超级项目只是说“从子模块 H 中获取提交 X”(对于某些提交哈希 ID H),因此实际上没有什么可以合并

子模块是提交的集合。只要它包含一个带有哈希 ID H 的提交,这就是超级项目所需要的;超级项目可以的所有内容是“get me hash H”,或“get me hash I”,或“get me hash J”,或其他任何内容.

每个仓库都是一个 Git 仓库:

  • 子模块是一个 Git 存储库:提交的集合(加上它拥有的任何其他小东西)。它只“知道”它是一个子模块,因为超级项目本身克隆了它,并且因为超级项目 Git 不断进入子模块并命令它:检查提交 _____(用一些原始哈希 ID 填写空白) .

  • 超级项目是一个 Git 存储库:提交的集合(加上它拥有的任何其他小东西)。它只“知道”这是一个超级项目,因为它有一个提交说在必要时克隆子模块,然后检查提交_____(用一些原始哈希 ID 填写空白)。克隆指令位于名为 .gitmodules 的文件中;这些也可能会复制到您的 .git/config。其余的——哈希 ID 和克隆的路径——在超级项目的每个提交中。

这就是子模块的全部内容。嗯,好的,有一大堆交互,主要在 git submodule 中编码,结果来自上述,但这是超级项目/子模块对的本质。请注意,子模块 Git 存储库本身可以是一个超级项目,即它可以拥有自己的子模块。它所要做的就是列出一些要克隆的 Git 存储库,以及一些要检查的提交哈希 ID。


1还有多少,取决于存储库的类型:--bare 存储库是提交和名称数据库(分支名称、标签名称等)的集合;非裸存储库还提供工作树。工作树不在存储库中,但它是您查看文件的位置,因此这非常重要。 ? 请记住,虽然 Git 提供了一个目录(或文件夹,如果你喜欢这个术语)在中工作,但该文件夹(目录)实际上并不存储库中,它就在旁边

2你放在工作树中的东西通常也会留下来——有很多注意事项——但因为它们紧挨着,而不是,存储库,其他 Git 克隆将无法看到它们。

3分支名称是一种可更改的提交别名:它们可以让您找到一个提交,但有人可以稍后更改分支名称,以便你发现了一个不同的提交。超级项目 Git 坚持找到正确的提交,所以它不持有可能改变的分支名称:它持有一个无法改变的哈希 ID。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-