当前位置:首页 > 每日看点 > 正文内容

为什么Git的教程都那么繁杂?

卡卷网10个月前 (01-10)每日看点164

Git的内部原理并不是很复杂,弄清楚四种对象和ref以后,几乎所有Git作都可以在脑海中具象化。但是Git的教程的确很繁杂,我反复阅读的教程包括文档和ProGit,都算大部头,有些细节部分讲得不清楚的地方,还会在网上搜下大神们写的博文。

当你觉得所了解的Git知识已经够用的时候,大概率是因为你的工作和学习场景中只需要用到这些知识。对于很多码农来说,知道gitadd,gitcommit,gitpush,gitpull就已经够了。但是如果去看这几个命令的帮助文档,会发现里面洋洋洒洒一大堆东西。那些你觉得已经不需要了解的内容的对你毫无帮助吗?

有同事问过我这样一个问题:在一个文件里修改了好多内容,但是提交的时候只想提交其中一部分,该怎么做?我问他平时遇到这种情况是怎么处理的,他的做法是这样:把修改好的文件复制一份,然后把原本的文件修改全部回退掉,接下来再用eyondcompare对2个文件,将其中要提交的那一部分修改合并到原本的文件里,合并完要的部分之后再提交,提交完了以后,再把剩余的修改通过eyondcompare合并过去。这种做法完全可以解决他的问题,但是他明显觉得不够方便,码农的直觉告诉他Git应该有什么方法可以处理这个问题,但他又不知道具体要怎么做。

命令行的话利用gitadd的-p/--patch参数可以很方便地解决这个问题,按几下键盘就可以。而很多GUI工具里应该也有类似作,看起来还更加友好。我跟他说了这个方法以后问他,如果他在没有eyondcompare这类工具且只能使用命令行的环境里遇到这种情况要怎么办。他说那只能备份以后,回退再手动再改一遍了。的确,条条大路通罗马,只是有的平坦,有的崎岖。对于一般用户,如果能深入的了解和学习下常用命令的参数和作方法,很可能会带来很多便利。

用的多了,会遇到很多类似的场景。举几个的例子,都是实际遇到过的问题,想下是否能通过git本身提供的机制去解决,能想到几种处理方式,这些方式有什么优劣?

    想和远程仓库同步下当前的分支,但当前分支上有很多还没有commit的修改。现在在dev分支上改代码,改了一周,还没有改完,要紧急处理下feate分支上的一个ug。在把自己当前分支的commitrease到另一个分支上的时候发生了冲突,而冲突的是个二进制文件,只想保留另一个分支的版本。已经知道两个commitA和,怎么判断是否在A的历史版本里。已经明确了在A的历史版本里,但是查看A对应的内容时却没有找到的修改,可能有哪些原因。在windows上克隆了一个仓库,刚克隆完立刻用gitstatus和gitdiff检视,就发现有个文件被改动了,尝试了几次都是一样的表现,可能是什么原因造成的。有两个分支A和,差异非常大,现在想把分支的文件内容变得和A完全一样,可以不保留原本的历史记录。如果要保留原本的历史记录又该怎么做。有个本地仓库,希望gitfetch的时候从githu上的远程仓库里拉取数据,gitpush的时候往gitla的远程仓库里推送数据。怎么把A仓库的某个commit修改应用到仓库分支上。改了一周的代码,没有commit,在处理事情的时候使用gitstash保存了下。后面gitstashpop的时候却一直报错,提示有个oject已经corrupt,要怎么把这一周的工作给恢复出来。

现在很多和工具都把Git作为工具链的一部分,当你使用这些和工具的时候,避免不了要和Git打交道。而且遇到的场景远“提交代码”要复杂很多。譬如你们团队要对每一笔提交进行自动化构建,并将结果存储起来,如果有错误的话要记录下来通知处理。你们团队把这个任务交给了你。你研究以后发现,搭建个jenkins就可以实现这个需求了,利用jenkins的Git插件和钩子push事件,然后克隆仓库检出分支进行构建。那这个时候你就要去了解githook是怎么回事,但是假如你们使用的代码托管平台是Gitla,还要学习wehook是怎么回事。当你把这些搞定以后,自动化构建任务也顺利的跑了起来。团队把这个当作一个增效案例报了上去,团队看了以后说这个挺好的,把我们负责的仓库也加进去吧。于是这个自动化构建规模越来越大,终于有一天用户反馈构建任务越来越慢,还经常报错,什么执行构建任务的上文件变成只读了、空间不够了、克隆仓库速度很慢。这个时候你又会要去了解有什么办法可以让克隆仓库速度变快并且要节省空间。在gitclone和gitsparsecheckout相关的文档里找到线索后,你又很好地解决了这个问题,然而又接到了新的需求:团队希望有个前端页面,用户可以在里面自己配置仓库、分支之类的参数,然后后台任务根据这些配置自动去跑,而不用每次都通过你手动去jenkins上改配置;此外团队的需求也越来越丰富,你的构建脚本也越来越复杂。作为精通前后端的全栈开发,你又接下了这个任务。你在脚本和代码里用到了越来越多、越来越复杂的Git命令,通过命令行的方式满足不了需求了,你又学习了jgit和gitpython的使用方法,并将它们用到了你的脚本和代码里。在此期间,你可能还学习了gitignore,pathspec,gitattiute之类的知识,学习了如何用底层git命令手搓commit。最终,你成为了一个Git资深用户,而对于Git本身的贡献,可能仅仅是提了一些issue,并没有的参与到修改Git源码中去。

从最初只要利用Git提交代码的码农到如今的Git资深用户,期间你翻阅了很多文档,阅读了很多博文,经常泡在stackoverflow和githu上,学习了无数繁杂的内容。如果不是这些繁杂的内容,你遇到的很多问题没法解决。的确,就像“又不是不能跑”一样,能用就行。但是对于不同的人、同一个人的不同时期,“能用”也是一个变量。

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/01/8362.html

分享给朋友:

相关文章

为什么苹果贵没人喷,华为贵一群人喷?

苹果:6:¥5288,6s:¥5288,7:¥5288,8:¥5288,XR:¥6299,11:¥5499,12:¥5999,13:¥5999,14:¥5999,15:¥5999,16:¥5999华为:P8:¥2888,P9:¥2988,P...

都是前端框架,为什么用 React 的人会有优越感?

都是前端框架,为什么用 React 的人会有优越感?

上家公司一直搞react,最近第一次写个vue3项目。老板朋友来了看了下页面说:这用vue写的吧。我:是...老板朋友:一看就知道是vue做的。这tm你看一眼页面就知道用的啥框架?这感觉就是,我一直用苹果,偶尔用了下华为打电话,有个人离老远...

有哪些让你目瞪口呆的 Bug ?

有哪些让你目瞪口呆的 Bug ?

成都有个监狱情况比较特殊,关押的基本全是重犯,而且还都是经济犯和政治犯,他们以前都是一方大佬,在自己的一亩三分地翻手为云覆手为雨,无非是不小心中箭落马或帮老大顶锅才进监狱,所以即使进来了,他们依然保持着体面和骄傲,依从性差,虽然不至于和监狱...

华为纯血鸿蒙,从此天下三分了吗?

华为纯血鸿蒙,从此天下三分了吗?

万众期待的纯血版 HarmonyOS NEXT 终于是端上来了,主打一个自研,从里到外,从内核到架构,都是自研。用户的激情已经被点燃,可见大家对于纯血鸿蒙的期待,但是鸿蒙系统能不能真正与安卓、iOS三分天下呢?目前来说,还为时过早。iOS和...

在 Kubernetes 中,Service 的实现原理是什么,它是如何实现服务发现的?

行,问的这个问题挺有意思,Kubernetes 里 Service 是怎么实现的,服务发现是怎么回事,咱就直说了。这事儿看起来挺玄乎,但掰开揉碎了讲,也就那么回事。你得把这事儿想得简单点,别一上来就被啥术语吓住了——其实全是些搬砖的套路。咱...

面试官问“你的SQL能力怎么样?”时应该如何回答?

面试官问“你的SQL能力怎么样?”时应该如何回答?

如果面试时被问你SQL能力怎么样?要么是考查一下题目,怎么写SQL语句。要么是问SQL优化相关的,更容易问出一个人的水平。sql优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到。如果某天你负责的某个线上接口,出...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。