git进阶学习

    最近在公司被git搞到头大,网上的教程都是速成的,只能入门,达不到实际开发需求。比如现在的项目的代码库达到了几百个GB,从03年到现在不知道更迭了多少次,一个工程下面又分了几十个repo,这些都需要被git管理。在github上自己建一个repo自己玩是很难掌握git的实用开发技巧的。今天在这里开一个专栏,专门记录开发过程中遇到的有关代码管理难题,过于基础的技巧不会在这里出现。

管理工程中的多个代码库

    实际开发中往往在一个工程中包含多个不同的领域,例如有的人维护内核代码,有的人编写驱动,有的人维护uboot,等等等。所以可以将这些独立的工作用不同的仓库管理,开发人员只需要关注自己的领域的仓库就可以了,但是整个项目建一堆仓库又难以管理,因此git可以创建一个manifests来统一管理所有子仓库。

    以android12工程为例,android下面的.repo子目录用来统一管理所有子仓库,

cd .repo/manifests/

ls -a

    可以看到,manifests也是一个仓库,当前在imx_android-12.0.0_1.0.0的loacl brach上,它track的是远程branch是origin/imx_android-12.0.0_1.0.0,

vim default.xml,这个文件描述了所有子仓库track的远程branch


repo sync失败原因分析

    1、例如uboot-imx仓库,该仓库管理着uboot有关的代码,本地track的远程branch就是refs/tags/android-12.0.0_1.0.0,repo sync命令做的事情就是对所有的本地branch做一次rebase,但是只能rebase到default.xml中描述的远程分支上,如果用户在自己的本地仓库创建了local branch,并且该local branch所track的remote branch与default.xml中的描述不一致,repo sync就会报错,因为我们无法将local branch rebase到其他分支上,势必会引发conflict。在repo sync之前应该git branch -D所有无关local branch。

    2、如果我们没有在本地创建过其他branch,在本地的修改也会引发repo sync失败,因为本地存在未commit的修改是无法rebase的,最好的办法是保存好本地的修改之后checkout local branch。

    3、有时候我们明明没有动过某个repo,但是repo sync依然报告这个repo无法sync,笔者目前还搞不懂为什么会这样,盲猜是default.xml文件的问题。对于这种问题需要删除一些.repo下的文件

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. GIT命令 git init在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个re...
    江边一蓑烟阅读 4,227评论 0 0
  • repo常用相关命令 1、repo start <topic_name> 开启一个新的主题,其实就是每个Proj...
    huangkh阅读 9,802评论 0 0
  • 引用 感谢廖海峰老师的精彩文章文章出处https://www.liaoxuefeng.com/wiki/89604...
    学习ing兰阅读 1,540评论 0 0
  • 1. 起步 1.1 版本控制 Git本质是一个分布式版本控制系统(Distributed Version Cont...
    kivinsae阅读 5,691评论 1 9
  • 1.设置 初次使用需要设置姓名和邮箱git config --global user.name "git用户名"g...
    jrg陈咪咪sunny阅读 4,090评论 0 1