git使用杂记

news/2024/4/20 1:57:23/文章来源:https://blog.csdn.net/faxiang1230/article/details/128100937

写作日期:2017.10

为什么我们要拥抱git呢? 我们为什么花费精力去学习git的命令呢?

为什么使用git

下面尝试展示 git 在工程中的一些使用场景,它可以解决什么问题以及规范等等,并不描述使用方法。如果对 git 感兴趣,请移步官网gitscm 。

有人可能没有使用过版本管理工具,认为它太复杂,还需要花费相当大的精力来学习命令, 仍然使用文件夹整体备份的方式来。
下面将会看到 git 如何帮助我们管理修改历史以及如何它如何与人协作,除此之外它有着更加强大的功能等待我们去发掘。

git的优势
大量的开源项目使用git来做版本管理:linux kernel, android, busybox,intel的项目 ,redhat, google, 这么多的project都在使用git来进行管理,学习使用这门工具是完全值得的。
使用git的的github平台上托管着大量开源项目,完全开放的。

在很多的IDE中已经集成了git工具,可以直接使用:Eclipse,Visual Studio

git在工程中的应用记录了一些使用git来解决工程问题,阅读源码等方面的功能,如果你也遇到了这样的问题,不妨试一试git管理

git在工程中的应用

临时切换任务

你在某个项目下工作时,正在处理问题A,修改到一半,测试说出现了一个紧急BUG需要修复,现在你怎么办? 你可以选择使用下面的方式(任选其一)来帮助你将你的临时代码保存,只需要简单的敲几个命令就可以让你不再备份和还原整个工程。

git stash
git add & git commit && git checkout -b newbranch  
git diff . > tmp.patch && git checkout .  

理解源码

在Linux内核社区中linus说过这样一句话:READ THE FUCK SOURCE CODE(RTFSC), 带着点色彩,不过很贴近事实。
linux内核开发注重这样一条原则,代码就是最好的注释,一般的代码他们是不屑于写注释的,只有完成复杂功能的代码才需要注释。
当你阅读代码的时候,你很可能遇到非常多的不解的问题,如果你能找到人及时回到你的问题,恭喜你,太幸运了。不过很多时候我们需要自己去看一下代码。
作者在提交代码的时候往往是按照功能提交的,一个patch包含了功能完整的代码(理想状况),你可以找到这个patch的所有代码观察修改的那些位置,非常有用的方式。

$ git log  
$ git blame  

海量修改中快速定位问题提交

你的机器运行着内核版本3.10,你想要升级到3.18试试功能A是否好用,然后你原来的功能B不好用了,然后你需要查这个问题的原因。
你对B所涉及的领域不太懂,现学来不及啊,但是提交也太多了有几千个,不容易定位问题,那么你可以使用工程中的方法来定位问题。

通过二分法和测试结果结合起来逐步逼近出问题的点,可以更加快速的查找问题原因

$ git bisect start
$ git bisect bad # Current version is bad
$ git bisect good v2.6.13-rc2 # v2.6.13-rc2 is known to be good
$ git bisect reset # Quit the bisect session
$ git bisect run my_script arguments # Using script that tell good/bad

修改分享

当你和A合作完成一个功能时,你们两个分工合作,中间需要相互依赖。在某个时间点他想要试试你们两个的功能是否OK了,你可以将你的patch发送给A,然后他打上,你和它的代码就合体了。

git diff
git send-email 

功能合并

你和A分别完成不同的功能,你们在同样的一个code base上工作,在最后需要合并功能到一套代码中时,也许你会直接进行文件对比合并,不过下面的方式能够更加智能地合并和筛选出冲突

$ git rebase
$ git merge

多人分布式开发中review

当你的项目需要保证代码质量时,有人review过你的代码之后才能提交到公共的代码仓库。你可以使用如下的方式将你的patch提取出来发送给其他人,
其他人可以在后面加上Signed-off-by表示review过了,一直传递到有人合并这个patch。

$ git format-patch,git am,git send-email:  

图形化查看历史

对于新人比较友好的工具,将分支合并轨迹、提交记录可视化显示出来,也保留着搜索等功能,就是太吃资源了,cpu,内存占用较多。

$ gitk

版本回退

需要将代码回退到某个提交之后时,使用下面的方式就能简单回退

$ git revert commit
$ git reset --hard commit

git使用规范流程

权限问题

裸的git服务中每个人都有权限提交到公共的代码仓库,各种未经审查的代码、花样百出的Bug可能就出现了,没错,大部分不是你的问题导致的。

  1. 可以通过一些代码审核服务:gitlab,gerrit等,git push动作首先是推送到代码审核服务处,然后才能通过代码审核服务来提交到公共代码仓库。
    在开源界特别是分布开发、人数较多的情况下,为开发者分配不同的角色,比较受大公司的欢迎。
  2. 还可以通过和大家共同约定规则,告诉所有人,只有部分开发者有权限合并代码并且会对此负责,其他人是不允许推送的。
    将你的patch发送给指定的开发者和其他人,在经过充分的review之后才能提交到代码仓库。
    这个最好适用于大家同处一个办公室或者一栋楼内,比较集中的开发环境、开发人员比较少时,依赖于整个团队对规则的遵守,问题也不大。

提交日志问题

对于大型的软件开发,特别是迭代比较多时,我们阅读前人写的代码时发现某一段看不懂,然后就不敢动这块代码,随着时间的推移,无用的代码越积越多,人为造成的软件体积增大。
可以通过规范提交日志来减缓这项问题,提交日志要反应提交的主要目的,对于某些微妙的bug需要加上详细的浮现步骤,日志等信息,目的就是帮助其他人理解你这块代码在解决什么问题。
有很多不同风格的 commit 规范,到哪座山唱哪首歌吧,和团队整体保持一致就好。

分支问题

我们经常会开发不同的功能,像linux内核开发中存在rc版本和稳定版本一样,我们开发的功能可能没有经过严格测试、整体测试一样,这个时候我们需要新建分支来存放我们的修改。
和分支相似的是tag,不过是有区别的

  1. tag就像是一个里程碑一个标志一个点,branch是一个新的征程,一条线;
  2. tag是静态的,就是指向某个branch上的某个提交,而branch的HEAD是可以向前移动的;
  3. 稳定版本备份用tag,新功能多人开发用branch。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_38833.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决 Android WebView 多进程导致App崩溃

应用场景 应用内有两个位置用到WebView加载页面,具体处理逻辑不能通用。分别扩展了WebView了。应用内独立页面使用Fragment来展示,(采用单Activity架构)。应用提供切换语言功能。 问题猜想 一、WebView内核bug 具体路径: 进入app–>设…

cmake使用

1. cmake概述及例子 CMake快速入门 cmake、qmake、cl之间关系 1.1 各种cmake cmake根据CMakeLists.txt生成makefile,make根据makefile行编译。 1.1.1 最简cmake:生成可执行程序(一个文件) #CMakeLists.txt cmake_minimum_req…

debug - JLX12864C(ST7920-12864)液晶屏不能使用串行通讯的原因

文章目录debug - JLX12864C(ST7920-12864)液晶屏不能使用串行通讯的原因概述调试备注ENDdebug - JLX12864C(ST7920-12864)液晶屏不能使用串行通讯的原因 概述 正在给板子写出厂测试程序, 买的12864型号是JLX12864C. STC官方给的例程是并行通讯, 好使. 但是想在测试程序中改为…

[附源码]计算机毕业设计springboot基于Java的日用品在线电商平台

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

mybatis的xml中<trim>标签的用法

文章目录1. 前言2. 先说结论3. 验证1. 情况一2. 情况二3. 情况三4. 情况四5. 验证prefixOverrides去掉的是trim内原sql内容1. 前言 在工作中离不开跟数据库打交道,目前流行的固然是mybatis,在xml中写sql的时候,可能会出现下面情况&#xff1a…

CAS:1516551-46-4,BCN-琥珀酰亚胺酯,BCN-NHS点击试剂供应

一:产品描述 1、名称: BCN-NHS BCN-活性酯 BCN-NHS 酯 丙烷环辛炔-活性酯 BCN-琥珀酰亚胺酯 BCN-succinimidylester 2、CAS编号:1516551-46-4 3、质量控制:95% 4、分子量:291.30 5、分子式:C15H…

Windows本地安装Redis且设置服务自启

redis中文网:http://redis.cn/ 如果是安装Windows版的redis需要去GitHub上下载安装包 如果是在Linux上安装,可以直接使用命令进行安装 本次教程是基于Windows系统进行的 GitHub地址:https://github.com/microsoftarchive/redis 选择需要下…

基于神经网络彩色图像插值研究-附Matlab程序

⭕⭕ 目 录 ⭕⭕✳️ 一、引言✳️ 二、色彩过滤阵列CFA✳️ 三、BP网络结构✳️ 四、神经网络彩色图像插值实验验证✳️ 五、参考文献✳️ 六、Matlab程序获取与验证✳️ 一、引言 彩色图像插值是通过估算相邻像素来估计缺失的颜色分量的过程,数字相机通过色彩过滤…

[附源码]Python计算机毕业设计Django大学生创新项目管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

你知道吗?小程序组件≠小程序插件

一直以为小程序组件和小程序插件是一回事,只是措辞不一样,导致造成乌龙,其实完全是两回事,插件是可以直接提供服务的,组件是给开发者提供的轮子,不能直接提供服务。 先看看微信是如何定义小程序插件的&…

Quartz深度实战

概述 Java语言中最正统的任务调度框架,几乎是首选。后来和Spring Schedule平分秋色;再后来会被一些轻量级的分布式任务调度平台,如XXL-Job取代。另外近几年Quartz的维护和发布几乎停滞,但这并不意味着Quartz被淘汰,还…

【SVM时序预测】基于matlab鲸鱼算法优化支持向量机SVM时序数据预测【含Matlab源码 2250期】

⛄一、鲸鱼算法优化支持向量机SVM 1 鲸鱼优化算法 WOA是由Mirjalili和Lewis在2016年提出的一种较为新颖的元启发式群体智能优化算法,该算法模仿座头鲸的“螺旋气泡网”捕食策略,如图1所示。 图1 座头鲸“螺旋起泡网”捕食策略 WOA算法寻优步骤如下。 步…

【在线研讨会】12月12日Softing工业物联网解决方案 助力工业4.0

本次研讨会设有抽奖环节,并有精美礼品相送! 一 会议介绍 水平和垂直通信一体化是工业4.0背后的核心原则之一,实现这一点需要标准化通信接口,这些接口能够促进各种组件的相互连接并传输同步数据流。本次研讨会将提供解决方案将过程…

《联邦学习实战—杨强》之使用Python从零开始实现一个简单的横向联邦学习模型

文章目录前言环境准备完整代码配置文件(conf.json)获取数据集(datasets.py)获取PyTorch中自带深度学习网络预训练模型(models.py)客户端(client.py)服务端(server.py)main.py运行知识点补充argparse基本用法tensor.copy_()[Python dict() 函数](https://www.runoob.com/python/…

域自适应——Bidirectional Learning for Domain Adaptation of Semantic Segmentation

论文题目:Bidirectional Learning for Domain Adaptation of Semantic Segmentation 本文的域位移是针对虚拟数据和真实数据之间的。 本文的贡献是: 提出了一种语义分割的双向学习系统 ,其是一个学习分割适应模型和图像翻译模型的闭环学习系…

nVisual部署之nginx配置说明

Nginx 是一个高性能的HTTP和反向代理web服务器,因此nvisual在部署前端包时便采用了它作为服务器,版本使用1.14.1以上。在默认的配置下,还需要向nginx各模块添加配置才能达到生产需要。 接下来,从http模块开始,再到ser…

谷粒商城1.项目简介和项目环境预搭建(项目概述和环境搭建代码)

一.商城项目总体架构 从讲课篇看 从分块来看 项目知识概述 二.环境搭建代码 1.项目架构 建立父工程 pom文件 <description>聚合服务</description><packaging>pom</packaging><modules><module>gulimall-coupon</module><mo…

第七章 贝叶斯分类器(上)

7.1 贝叶斯决策论 贝叶斯决策论是概率框架下实施决策的基本方法。 假设有N种可能的类别标记&#xff0c;即y{c1,c2,…,cn}&#xff0c;λij是将一个真实标记为cj的样本误分类为ci所产生的损失。基于后验概率P(ci | x)可获得将样本x分类为ci所产生的期望损失&#xff0c;即在样…

从电商到超市,美团的零售之变

从上海回到湖南长沙县的时候&#xff0c;何靓做好了过“苦日子”的准备。作为一个湖南人&#xff0c;她知道县城往往意味着没有星巴克和喜茶&#xff0c;意味着仅有的一两座电影院环境不太好&#xff0c;意味着每天晚上九点后连便利店都大门紧闭。 但在真正回到这“半个故土”…

品牌投资与形象全面升级 | 快来认识全新的 Go 旅城通票

近日&#xff0c;Go 旅城通票&#xff08;Go City&#xff09;品牌全面升级&#xff0c;旨在提高旅游爱好者对品牌的认知。从新冠疫情大流行中阴霾中走出来的 Go 旅城通票复苏势头强劲&#xff0c;专注于技术提升&#xff0c;使命是协助旅游爱好者无论到世界各地的哪一个城市畅…