Git零基础实战之如何实现子项目同步更新

这篇具有很好参考价值的文章主要介绍了Git零基础实战之如何实现子项目同步更新。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Git零基础实战之如何实现子项目同步更新

  • 1. 背景

  • 2.git apply vs git am

  • 3.生成patch

  • 4.git apply使用

  • 5.git am使用

1. 背景

假设我们有一个独立的插件项目,因为一些项目的变更,现在需要将其迁移到一个较大的项目中的子目录中。传统的方法可能包括使用 git cherry-pick 来选择性地应用提交,但这种方法并不能很好的处理子目录问题

例如:项目A是我们的目标仓库,项目B是我们的子项目仓库,我们期望将项目B的commit同步到项目A,但是当你直接使用cherry-pick你会发现,项目B中的文件会同步到light/src目录,而不是我们期望的extension/src里面,这样就不对了。

项目A: 
 light/src/xxx
 light/extension
 light/extension/src/xxx
 ...
 
项目B: 
 extension/src/xxx

相比之下,Git Apply 与 Git AM 提供了更加灵活和高效的方式来处理这种迁移。

2.git apply vs git am

命令 是否应用补丁? 是否创建提交? 适用场景
git apply 在提交之前测试 git diff(即补丁)的效果。也可用于在构建前将补丁应用于第三方库。
git am 从邮件或由 git format-patch 生成的文件中应用补丁。适用于协作和接受他人的贡献。
  • 适用场景:

    • git apply:主要用于测试 git diff(即补丁)在提交之前的效果。也可以用于在构建之前将补丁应用于第三方库。

    • git am:用于从邮件或由 git format-patch 生成的文件中应用补丁。非常适用于协作和接受他人的贡献。

  • 是否创建提交:

    • git apply:只应用补丁,不创建提交。

    • git am:在应用补丁的同时,会创建提交。

这里提到了两个点,git diff与git format-patch,这两者有一点区别,git diff只有 diff信息,而format会携带commit信息、diff信息、git版本。

而git apply与git am最根本的区别在于apply不会创建新的提交,即没有commit,只是应用patch,而git am会把commit带过来。所以git am不能使用git diff的patch,因为没有commit,而git apply可以使用git diff与git format-patch的patch,因为都包含了diff信息。

Git零基础实战之如何实现子项目同步更新,git

Git零基础实战之如何实现子项目同步更新,git

3.生成patch

生成patch我们可以用git diff与git format-patch,用法比较简单,以下给出几个示例。

  • git diff

示例1:比较工作目录和暂存区之间的差异。

git diff > changes.patch

示例2:比较两个提交之间的差异:

git diff <commit1> <commit2>
  • git format-patch

示例1:获取最新的commit生成patch。

git format-patch -1 --stdout > changes.patch

示例2:生成两个提交之间的补丁文件。

git format-patch <start_commit>..<end_commit>

git format-patch <start_commit>..<end_commit> --stdout > changes.patch

可以通过指定:--stdout > changes.patch 将所有的patch合并为一个。

4.git apply使用

不论是git apply还是git am在进行同步diff时,最好开启-3或--3way,当发生合并冲突事件,便可以看到diff信息。

可以看到当git apply时,出现了ours与theirs,ourstheirs 选项用于指定冲突解决策略。当在应用补丁的过程中遇到冲突时,Git 需要知道如何解决这些冲突。这些选项允许你指定使用当前分支 (ours) 或者应用的补丁 (theirs) 的更改来解决冲突。

Git零基础实战之如何实现子项目同步更新,git

5.git am使用

与git apply类似,但又有所不同,当使用-3或--3way后,下面的diff便是HEAD与commit。

Git零基础实战之如何实现子项目同步更新,git

可以看到不论是git am还是git apply都可以做到diff同步功能,git cherry-pick也可以做到,回到本文的背景,为何没有使用git cherry-pick呢,那是因为涉及到子目录的迁移,而git am与git apply允许指定subdirectories,通过--directory,完整命令:

git apply --3way --directory=extension changes.patch

git am --3way --directory=extension changes.patch

本节完,欢迎转发收藏~


热度更新,手把手实现工业级线程池

未来已来:C++17 并行STL性能测评

Git零基础实战之如何实现子项目同步更新,git

Git零基础实战之如何实现子项目同步更新,git文章来源地址https://www.toymoban.com/news/detail-842808.html

到了这里,关于Git零基础实战之如何实现子项目同步更新的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【移动端网页布局】flex 弹性布局子项目属性 ① ( flex 属性用法说明 | 代码示例 : 占有剩余布局 / 平均分成若干等份 )

    flex 子项目 的常用属性 : flex 属性 : flex 子项目 在 flex 父容器 中 占有的 份数比例 , 如果都设置 1 , 那么将对应尺寸平分即可 ; align-self 属性 : 控制 flex 子项目 在 侧轴 的排列方式 ; order 属性 : 控制 flex 子项目 的排列顺序 ; 主要是修改前后顺序 , 原来是 1 - 2 - 3 排列顺序 , 可以

    2024年02月09日
    浏览(41)
  • IDEA结合Git实现项目管理实战——基础篇

    本系列将结合我个人参与团队协作开发项目的经验来介绍如何使用IDEA结合Git实现项目管理,因此可能与真正的企业开发协作存在差异,且文章所涉及的解析可能存在个人理解与实际的偏差。 本系列主讲如何具体操作,因此对于Git内部的原理将 不会过多深究 。 本文严禁任何

    2024年02月05日
    浏览(38)
  • 【IDEA结合Git实现项目管理实战】二、基础篇

    本系列将结合我个人参与团队协作开发项目的经验来介绍如何使用IDEA结合Git实现项目管理,因此可能与真正的企业开发协作存在差异,且文章所涉及的解析可能存在个人理解与实际的偏差。 本系列主讲如何具体操作,因此对于Git内部的原理将 不会过多深究 。 本文严禁任何

    2024年02月03日
    浏览(34)
  • 【git】Fork或者git clone克隆了别人项目,如何保持与原项目同步更新

    Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库# 一、网页/服务端Fork别人的项目到你的Github 如何在 Github 网页端同步更新? 进入你自己的 fork 过来的仓库。 点击 “Pull requests” ,如何点击右侧绿色的 “New pull request”。Github 首先会比较

    2024年02月08日
    浏览(33)
  • 关于如何将开源项目放入自己的git仓库(fork)并可以对开源版本的更新进行同步

    搞了一下午的同步无法将下载的开源项目代码与开源项目进行版本的更行。原来git进行更新时会对提交记录进行比较的。相同的提交记录才会同步的时候不会出问题,不然所有的代码都会一个个进行merge。 所以要将开源代码的git提交记录同步到自己的项目中来,这就用到了

    2024年02月06日
    浏览(53)
  • 企业级开发项目实战——基于RabbitMQ实现数据库、elasticsearch的数据同步

    1、商品上架时:search-service新增商品到elasticsearch 2、商品下架时:search-service删除elasticsearch中的商品 数据同步是希望,当我们商品修改了数据库中的商品信息,索引库中的信息也会跟着改。在微服务中数据库和索引库是在两个不同的服务中。如果,商品的服务,向es的服务中

    2024年02月12日
    浏览(47)
  • 【Linux】企业实战项目rsync+inotify实现实时同步(inotify安装及介绍、rsync + inotify 实现实时同步、rsync + inotify实现开机自启 )

    rsync与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。 随着应用系统规模的不断扩大,对数据的安全性和可

    2024年02月04日
    浏览(37)
  • 【IDEA结合Git实现项目管理实战】四、git冲突篇

    本系列将结合我个人参与团队协作开发项目的经验来介绍如何使用IDEA结合Git实现项目管理,因此可能与真正的企业开发协作存在差异,且文章所涉及的解析可能存在个人理解与实际的偏差。 本系列主讲如何具体操作,因此对于Git内部的原理将 不会过多深究 。 本文严禁任何

    2024年02月03日
    浏览(35)
  • redis实战-项目集成git及redis实现短信验证码登录

    目录     IDEA集成git 传统session存在的问题  redis方案 业务流程 选用的数据结构 整体访问流程 发送短信验证码  获取校验验证码 配置登录拦截器 拦截器注册配置类 拦截器 用户状态刷新问题 刷新问题解决方案   远程仓库采用码云,创建好仓库,复制仓库的url    在idea中点

    2024年02月11日
    浏览(29)
  • Git常用操作:基础命令、生成公钥、webhook同步

    此处只介绍windows系统下的安装,linux一般都是自带git(自行百度) 下载Git 官方地址为:https://git-scm.com/download/wi 下载好对应的安装程序打开一路点击下一步即可,最终鼠标右侧菜单栏出现对应部分即为安装成功 具体详细的安装教程请看https://www.cnblogs.com/ximiaomiao/p/7140456.html

    2024年02月02日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包