前言
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
Git 是一个免费开源的分布式版本控制系统,最初由 Linux 之父 Linus 开发,它诞生的原因就是 Linus 希望有一个工具便于管理 Linux 内核代码的更新迭代,而且分布式的结构比集中式更加稳定并且更利于团队协作,因为每个用户主机都可以拥有一个完整的版本库,而且大家可以工作于不同分支最后合并为一个分支。
1 - Git的安装
-
官网安装:Downloads
-
Windows 系统包管理器 Chocolatey 安装
|
|
- Linux 系统安装(ubuntu)
|
|
2 - Git 中一些术语的解释和理解
下面会对Git中各种术语进行一些通俗易懂的解释,方便大家快速明白Git中各个术语的功能和含义,具体术语解释的官方手册地址我在每个术语的括号中的英文原词加上了超链接,大家想仔细了解的话可以点进去认真阅读。
- 远程仓库名称(remote name):简单来说它就是远程仓库(URL链接)映射在本地的一个别名/标签,纯粹是为了方便在本地可以方便的选择远端(通常这个别名会自定义为远程仓库内容的概括)进行代码提交和更新,默认是 origin,也可以在本地通过命令修改,通常一个本地的文件夹可以关联很多个远程仓库,然后可以同时使用和更新多个远程仓库的代码。
- 分支(branch):在项目开发中,通常对于新功能开发或者很多部门分工合作,分支和合并功能是一个非常好的方式,通常有一个主要用于发布项目的主分支,然后其他从主分支创建出来的子分支会在开发测试完毕后合并(merge)到主分支中。
- Git的一些操作术语
- 克隆(clone):从远端服务器将一个git项目下载到本地。
- 合并(merge):将一个分支的内容合并到另一个分支上(这个分支一般是发布项目的稳定项目分支),如果存在分支冲突(conflicts)的话需要手动解决再将冲突的文件重新merge。
- 获取(fetch):fetch只从远端获取了远端相对于本地更新的数据,但并不会合并到本地的分支上,需要用户手动合并到本地的分支上。
- 拉取(pull):
git pull
=git fetch
+git merge
**,从远程仓库获取最新版本并直接合并到相对应的本地分支上,一般同步远程仓库和本地仓库就用pull一条指令就够了。 - 索引更改(add):将任何变化的文件(增加、删除、修改)放入暂存区。
- 提交(commit):将暂存区里的改动提交到本地的版本库。每次使用
git commit
命令我们都会在本地版本库生成一个40位的哈希值,这个哈希值也叫commit-id,commit-id在版本回退的时候是非常有用的,它相当于一个快照,可以在未来的任何时候通过与git reset
的组合命令回到这里 - 上传(push):将本地的分支版本库上传到远程分支并合并。
相信大家第一次看了上面的术语有可能也不是很理解,所以在后面我会写一个很长的例子方便大家理解和梳理Git使用的整个流程,继续看下去吧!
3 - 玩转 Git CLI
对于 CLI (Command Line Interface 命令行接口)本身确实是不如 GUI 图形化界面的软件使用起来方便的,但是由于大部分服务器的操作系统都是 Linux,在远程连接服务器我们往往在命令行界面是最为轻便和稳定的,所以学习 Git 的 CLI 操作是必不可少的,而且计算机程序的命令行版本一直是我觉得计算机领域最优雅的部分,少了很多视觉跟踪和鼠标的点击操作,我们只需要集中于屏幕光标位置利用键盘说出我们想让计算机做的事就可以了,非常的优雅!
还有重要的一点就是,Git 的 CLI 包含 Git 的全部内容/所有功能,而 GUI 软件往往不能发挥 Git 的全部作用。
以下仅仅介绍一些常用的 Git 命令,完整的 CLI命令大家可以参考官方文档
git clone
|
|
git pull
|
|
git commit
|
|
git push
|
|
git status
|
|
git remote
|
|
git branch
|
|
git switch
注意一定要保证分支是干干净净的再切换分支(即文件改动均已commit和push了)
|
|
git merge & git mergetool(解决冲突)
|
|
小结(上述命令精简)
git clone <远程仓库链接> <本地目录>
git pull <远程主机名> <远程分支名>:<本地分支名>
git commit -am "关于提交内容的解释"
git push <远程主机名> <本地分支名>:<远程分支名>
git status
git remote -v
git switch <要切换到的分支名>
git branch -a
git branch -d <删除分支的名字>
git branch <新分支名字>
git merge <被合并的分支>
git mergetool
4 - 玩转 Git GUI
关于Git的GUI (Graphic User Interface) 图形化界面软件有很多,在官网上有一个所有GUI的清单,但是这其中我个人最为推荐的还是github官方的GUI:Github Desktop ,有关于其他程序猿的生产力软件推荐可以看我下面这篇文章:
- 主要操作界面分区如下:
- 其他操作建议查看官网的手册,中文版的看起来也很舒服:https://docs.github.com/cn/desktop
5 - 玩转 GitHub
Github是全球最大的开源代码服务器,利用Github可以很好的托管开源作者的代码,也可以方便其他人使用和借鉴,下面我将介绍几个让你的Github用的更爽的插件和建议,关于Github的使用我下面不会再讲解,如何使用可以看官方指南:
1 - Octotree浏览器插件
这个插件(下载地址)使得在Github上阅读代码更舒服,将Github项目的文件夹分层显示在左侧像IDE一样直观,使用效果如下:
2 - Github Web IDE 浏览器插件
这个插件(下载地址)集成了多个云平台IDE厂商的产品,可以进入在线IDE查看代码,甚至可以搭建云环境进行在线运行,使用效果如下:
3 - Github Gist
Github Gist可以在远端存储代码段,相当于自己有了一个云存储空间用于存一些常用的配置文件的代码段,或者是一些算法的代码段,十分的不戳!!
4 - Github 个性个人简介
这是Github的一个彩蛋吧算是,只要你创建一个和自己Github账户名相同的Github仓库(一定要增加README.md文件,语法格式戳这里)就可以在你的Github主页上展示下面这种效果的自我介绍(大家也可以去我的Github主页上看下效果):
具体教程可以参考以下这篇文章:
6 - Git工作流讲解
Git基本工作流图片
通过一个故事理解Git工作流
小明是一个刚刚毕业的大学生,被一家知名的互联网企业签下了,由于第一次参与企业级大型项目,所以对于复杂的Git工作流十分的不熟悉,于是公司的老员工们纷纷来帮助他。
小明先是打开了公司开源的Git仓库地址,并利用Git工具clone下来了项目的代码,但是一看到上百条分支就头晕了,于是老员工Jack拿出了上面那张Git基本工作流的图片来一一为他讲解,Jack说:其实呢,之所以创建这么多的分支的原因就是为了方便基于老代码进行的优化和更新的新代码能够根据不同的变化占有一个分支,将一大个复杂的问题分类成一个个小的问题,从而下派给各个部门进行工作,这样不同的部门各自管理一条各自的分支,工作就井然有序啦!
小明说:哦,原来是这样,那这个图上这些分支的名字都代表什么含义呢?
这时另一名老员工Smith说:这张图呢是我们企业最初一张基本的Git工作流的图咯,现在已经非常复杂了,不过对于你初步理解整个流程是非常好的,那么这个Master分支,顾名思义就是我们的主分支啦,是我们所有部门整合起来的一个主分支,代表了我们项目整体的走向,每次一个子分支完成测试后就将其 merge 到 Master 分支然后再进行整体的测试,如果一个版本的功能已经完成全部测试,那么就将其发放到 Release 分支啦,也就是正式发行给大众的分支,就像咱们平时使用的某一款软件的一个版本更新一样(类比上图就相当于基于 Master 分支创建了一个 Develop 分支,然后 Develop 分支开发到一定程度后将其 merge 到 Release 分支和 Master 分支),那么图中的 HotFix 分支顾名思义就是处理一些突发bug的分支,进行快速修改再重新 Merge 到 Master 分支,Feature 分支就是代表一个个新功能的分支。
小明说:哦,原来如此,明白了,那我就利用手上的Git工具进行一下实践试试看咯!
另一名老员工小姐姐Mary说:嗯嗯,有什么问题可以继续问我们哦,哦对了,你有没有考虑过这样一种情况呢,如果在 Master 分支的某一个节点创建了一个子分支,并在子分支对文件1进行了修改,与此同时 Master 分支也对文件1进行了修改,然后子分支 Merge 到了 Master 分支,这时候怎么处理呐!
小明说:哦,这不是合并冲突嘛!通常我们就手动的查看冲突的内容,通过一些解决冲突的工具,比如 mergetool 或者是 IDE 中的一些插件,然后选择自己想要留下的那个文件的内容就可以啦!解决冲突之后再进行 Merge
大家露出了欣慰的表情,都回到了自己的工位。。。。。
结语
创作不易,整理这些内容花费了很大精力,希望大家能有所收获,能尽快熟练使用Git,毕竟coding的产品必然是要走向大众的,一个代码产品的诞生和管理需要一个好的版本控制工具,Git在众多的版本控制工具中无疑是每个程序猿的不二之选,无论是独立开发者亦或是团队开发,Git都是一大利器!
感谢您看到最后,如果本文对您有所帮助的话,还希望给我一个一键三连(狗头保命),如果对于我和我的文章感兴趣的话,欢迎点一个关注,您会收到我回答和文章的更新通知,也欢迎加入我建立的技术交流群QQ:725133797 讨论交流。
最后附上我的个人博客站:https://blog.calvinhaynes.top/,欢迎访问和交流