首页 > 其他分享 >【转】git帮助阅读开源项目

【转】git帮助阅读开源项目

时间:2023-03-12 23:44:51浏览次数:46  
标签:HEAD git 项目 -- idea 开源 阅读

 

转, 原文:https://segmentfault.com/a/1190000009475214

-------------------------------

 

为什么要阅读开源项目

  • 源码是唯一的真实

  • 加深对项目的理解

  • 学习自己没有的知识

  • 学习他人的写法,有助于自己代码质量的提高

开源项目难点

  • 不知道从哪儿开始

  • 文件太多,无法屡清楚结构

  • 代码太多,测试编译时耗费太多时间

  • 内容太多,难以全面理解

开源项目特点

开源项目最早只是一个idea, 这个idea是这个项目的根,随着项目的发展,特性会越来越多,架构可能会调整,但这个idea总是不变的,它是整个项目的精华.
而我们如果想要理解一个开源项目,弄懂这个idea是必须的, 很多时候我们就是为了深入理解这个idea才产生阅读源码的动机。

随者这个idea的实现,这个项目算是诞生了。但随着越来越多特性的加入,越来越多代码的提交,这个idea越来越深的掩藏起来。所以我们可以从早期版本入手.

最早完成idea的版本中这个idea是最清晰的,代码量是最少的,也是我们理解这个项目的最佳时机.

使用git帮助理解开源项目

早期版本是切入开源项目的好时机,git是版本控制领域的佼佼者,使用git帮助理解开源项目

逆序查看日志
git log --reverse
找一个感兴趣的版本切入
git checkout <commit-id>
导航与对比
  • 切换当前提交的上一次提交

git checkout HEAD~
  • 切换当前提交的下一次提交

git log --reverse --pretty=%H master | grep -A 1 $(git rev-parse HEAD) | tail -n1 | xargs git checkout;
  • 比较上一个分支与当前分支

git diff HEAD~..HEAD
追踪文件的变更历史
git log --follow path/to/source_file

根据需要,可以专门阅读该文件相关的某个特定的commit,很多时候项目第一版的代码会比最新版的代码简单很多,阅读旧版的代码可能会比较容易。如果是为了修复bug而读代码,这样的变更历史有时候可以提示我们哪个commit可能引入了bug。

查找字段(函数名,变量名)
git grep -w func -A100 -B100

假设有一个内部函数叫做func(), 没有文档,如何知道这个函数怎么用?除了阅读内部函数的实现和阅读实例,基本上没有其他方法。对于这种情况
可以批量找到func的用例,在vim里从上往下先扫一遍,找到尽可能简单的用例,然后再返回到源文件中阅读这个用例的上下文.

git alias

有些常用的git操作,我们可以通过设置git alias加快输入

git config --global alias.prev 'checkout HEAD~'
git config --global alias.next '! f() { git log --reverse --pretty=%H ${1:-master} | grep -A 1 $(git rev-parse HEAD) | tail -n1 | xargs git checkout; }; f'
git config --global alias.difp 'diff HEAD~..HEAD'

更多文章的目录在这里

标签:HEAD,git,项目,--,idea,开源,阅读
From: https://www.cnblogs.com/oxspirt/p/17209785.html

相关文章

  • ARC158C All Pair Digit Sums 题解
    题目链接题意设\(f(x)\)表示\(x\)的各位之和。例如\(f(158)=1+5+8=14,f(2023)=2+0+2+3=7,f(1)=1\)等。给定一个正整数序列\(A=(A_1,...,A_N)\),求\(\sum_{i=1}^N......
  • Jenkins pipeline vs GitLab pipeline
    前言在整个软件开发过程中,大致有如下的几个工作流程阶段:计划 ->编码->构建->集成->测试->交付->部署 ->运营从上面的工作流程阶段可以看到,整个软件开发周期是......
  • 代码大全 阅读笔记01
    阅读了代码大全,以下是我的收获:松散耦合性:耦合性就是两个子程序之间的紧密程度。要注意耦合的规模:注意两个子程序之间的联系程度。注意两个子程序之间的联系的直接程度,越......
  • 文献阅读CDCL--Crypto-- SAT Solvers for Cryptanalysis
    CDCL(Crypto)SATSolversforCryptanalysisAuthors: SaeedNejati VijayGanesh AuthorsInfo&ClaimsCASCON'19:Proceedingsofthe29thAnnualIntern......
  • WebStrom 关闭git
    1、找到项目的.idea文件夹里的vcs.xml<?xmlversion="1.0"encoding="UTF-8"?><projectversion="4"><componentname="VcsDirectoryMappings"><mappingdirecto......
  • Git入门指令学习
    基础指令在进行以下操作前,请确保你已经安装了git,git下载链接,具体详细步骤请自行检索。初始化git仓库,用于开始一项新项目时为该项目初始化仓库进行代码托管例如我现在......
  • 一天吃透Git面试八股文
    什么是Git?Git是一个版本控制系统,用于跟踪计算机文件的变化。Git是一个跟踪计算机文件变化的版本控制系统,用于帮助协调一个项目中几个人的工作,同时跟踪一段时间的进展。换......
  • 一天吃透Git面试八股文
    什么是Git?Git是一个版本控制系统,用于跟踪计算机文件的变化。Git是一个跟踪计算机文件变化的版本控制系统,用于帮助协调一个项目中几个人的工作,同时跟踪一段时间的进展。换句......
  • GitLab基本设置-新增用户
    场景在上面将Gitlab部署后的效果如下 注:关注公众号霸道的程序猿获取编程相关电子书、教程推送与免费下载。实现刚搭建完首次登录需要设置root账户的密码。使用root账户登......
  • 2、Git工作流程
    工作流程一般的工作流程如下:将Git的一个存储库克隆为工作副本通过添加/编辑文件修改工作副本如有必要,还可以通过让其他开发人员一起来更改/更新工作副本在提交之前查......