写点什么

如何优雅地使用 Git?

作者:Jackpop
  • 2022 年 7 月 16 日
  • 本文字数:3818 字

    阅读完需:约 13 分钟

DevWeekly 收集整理每周优质开发者内容,包括开源项目工具资源技术文章等方面,每周五首发于DevWeekly,欢迎大家 Star 并收藏!


提起 Git 就绕不开一个概念:版本控制系统。


因此,在学习 Git 之前有必要先了解一下版本系统的概念,这样才会有一个更加全局清晰的认识。

1 版本控制系统

版本控制系统是用来跟踪、制作和管理软件代码变化的工具。它能够帮助开发者存储不同阶段对文件所做的每一个改动,这样我们、或者与我们协作开发的同事就可以在检索到这些改动。


目前主要包含 3 种类型的版本控制系统:


  • 本地版本控制系统

  • 集中式版本控制系统

  • 分布式版本控制系统


下面,就分别介绍一下这 3 种版本控制系统。

1.1 本地版本控制系统


本地版本控制系统是位于你本地计算机上的一个本地数据库,其中每个文件的变化都以补丁的形式存储。


每一个补丁集只包含自上一版本以来对该文件所做的修改。


为了看到文件在任何给定时刻的样子,有必要将文件的所有相关补丁按顺序罗列在一起,直到逐个查看找到对应的版本为止。


本地版本控制系统有一个很大的问题,所有东西都储存在本地。如果本地数据库出了什么问题,所有的补丁都会丢失。如果一个版本发生了什么事情,那么这个版本之后的所有修改都会丢失。


另外,与其他开发者或团队合作是非常困难的。

1.2 集中式版本控制系统


集中的版本控制系统有一个包含所有文件版本的服务器,多个用户可以同时访问服务器上的文件,把它们拉到他们的本地计算机上,或者从他们的本地计算机上把它们推到服务器上。


相对本地版本控制系统,这与其他开发者或团队的合作变得容易。


这种结构的最大问题是,所有东西都存储在集中式服务器上。如果该服务器出了问题,没有人可以保存他们的版本变化,拉动文件或进行协作。


与本地版本控制类似,如果数据库被破坏,而备份没有被保留,你就会失去整个项目的历史,除了人们碰巧在他们的本地机器上有的单一快照。


比较知名的集中式版本控制系统有 Microsoft Team Foundation Server (TFS)和 SVN。

1.3 分布式版本控制系统


有了分布式版本控制系统,用户不仅是从服务器上拉取最新的文件快照,而是一种完全镜像存储库,包括全部历史。


因此,在一个项目上合作的每个人都拥有整个项目的本地拷贝,换句话说,拥有自己的本地数据库和自己的完整历史。


在这种模式下,如果服务器变得不可用或出了问题,任何一个用户资源库都可以将项目的版本拷贝发送给其他用户,或者在服务器可用时再推回到服务器上。只要一个用户包含一个正确的副本就足够了。


而 Git 就是一个免费的开源分布式版本控制系统,你可以用它来跟踪文件的变化。


它可以实现对版本库的新增、修改、删除等操作。如果做了修改,那么由谁做的?在什么时间和日期做的?做这个修改的原因是什么?


Git 都会记下这些行为,所以,总结而言,Git 具有如下功能:


  • 可以跟踪仓库变化

  • 可以提交、撤销、修改工程

  • 可以创建一个项目的多个副本,每个副本都可以单独处理

  • 不同副本中的变化可以被比较,也可以被合并

2 为什么用 Git?

在做一个有许多组件的大项目时,往往会有多个开发者参与,每个开发者都可以通过 Git 来对项目代码进行管理。


例如,新增了功能之后可以用来提交代码,如果操作失误可以撤销动作,也可以看到项目经历了哪些变化。


换句话说,通过 Git,我们可以更加轻松便捷的管理代码仓库,实现协同开发。


了解了 Git 的价值和作用,下面就来安装 Git 并开始用起来吧!

2.1 安装 Git

如果想要在我们的电脑上安装 Git,可以访问 Git 的官方网站上下载适合你的操作系统的最新版本 Git,它支持 Windows、macOS、Linux/Unix。



下载后,按照不同操作系统的软件安装方式安装该软件,这与安装其他软件一样,以 Windows 为例,下载后双击安装即可,每个选项都可以选择默认,然后点击下一步。


安装完成后,打开 cmd(命令提示符)或终端,输入下面命令来检查 git 是否已经安装完毕:


git --version
复制代码



如果返回了上图中的信息,说明已经安装成功。

3 使用 Git

通过前面的步骤已经完成了 Git 的安装,接下来就是学习如何使用 Git。


但是,在正式使用之前,还有一件事需要做,我们需要对 Git 进行一下配置。


我们需要设置用户名和电子邮件地址,Git 会用它来识别谁做的修改。

3.1 Git 配置

如前面所述,我们需要在 Git 中配置一下用户名和电子邮箱,可以通过如下命令完成配置:


git config --global user.name "YOUR_USERNAME"git config --global user.email "YOUR_EMAIL_ADDRESS"
复制代码


这里一定要确保在相应的字段输入正确的用户名和电子邮箱地址。

3.2 Git 初始化

Git 已经安装了,但是,当你创建一个名为“Git tutorial”目录时,你会发现它和正常的目录没什么区别,我们执行 git 命令也不起作用。



这是因为还没有进行 Git 初始化。


要是仓库真正起作用,我们需要进入到相应的目录,执行下面初始化命令:


git init
复制代码



现在 Git 可以正式工作了。

4 Git 命令

前面反复提到,我们使用过程中经常用于代码的提交、修改、撤掉等操作,这时候就需要用到一些 Git 命令。


下面,就来介绍一些 Git 中常用的命令。

4.1 git status

这将告诉你使用该命令时项目的状态,你做了哪些修改、哪些尚未提交等。


例如,如果我在前面已经创建的 Git tutorial 文件夹中添加了两个新文件,Git and Github blog cover.png 和 Superhero Git.png,然后执行命令,就可以看到下面输出信息:


git status
复制代码



上图中的提示信息表示,我们新增了两个文件,但是还没有提交(commit)。

4.2 git add

如前面提示的那样,我们新增了两个文件,但是 Git 并没有追踪到,这时候就需要我们来高速 Git 新增了内容,然后它才可以追东文件夹的变化。


有两种方法可以做到这一点,一是把所有新增文件全都添加上去,另一个就是添加指定文件:


添加所有文件


git add .
复制代码


添加指定文件


git add "file_name"
复制代码


接下来再使用 git status 命令来看看在我把 "Git and Github blog cover.png "添加到 Git 之后发生了什么:



这里你可以看到,现在 Git 识别出我添加了一个新文件。但是,仍然没有提交。


顺便,来讲一下 Git 的不同状态。


Git 将文章状态分为如下几类:


  • Unstaged

  • Staged

  • Committed

  • Modified


当文件没有被添加到 Git 时,它处于 unstaged 状态。


当文件用 git add "file_name "添加到 Git 中时,它处于 staged 状态。在这种状态下,所有必要的修改都已经完成,可以提交了。


当我们用 git commit -m "commit message "命令保存项目的状态,点击项目的快照,这个状态就被称为 Committed 状态。通过创建一个提交,你的工作被保存在本地,如果将来你的项目出现一些问题,你可以很容易的回滚到之前的版本。


当我们对提交的文件进行修改时,它就进入了 Modified 状态。

4.3 git commit

在解释这个命令之前,首先在 "Git tutorial "文件夹中添加一个 "sample.txt "文件,并将该文件夹中的所有文件使用 git add .命令添加 Git。


添加完所有文件后,我们将用命令创建我们的第一个提交:


git commit -m "commit message"
复制代码



现在当你看到 git 状态时,它会说 "nothing to commit, working tree is clean",这意味着所有的文件和所做的修改都被保存了。


一个提交就像账本上的一个条目,包含以下信息:


  • 用户名和电子邮箱

  • 提交的日期和时间

  • 提交信息

  • 此次提交的唯一哈希码


我们可以通过如下命令查看这些提交信息:


git log
复制代码


这将给你返回项目中所有提交的信息。



这样,我们就完成了一次代码提交。

4.4 git branch

Git 分支是一个非常强大的功能,也是一个需要了解的重要功能。


Git 有一些使用非常频繁的场景,用它为项目创建多个副本,并允许你分别对它们进行操作,Git 就是通过分支实现了这一点。



检查项目中的分支


git branch
复制代码



创建一个新的分支


git branch "branch_name"
复制代码


这将创建一个新的 Git 分支,我们的整个项目将被复制到该分支。


现在,当我们检查项目中的分支时。我们会看到一个新的分支 "my_branch"。



然而,你可以看到星号(*)仍在 main 分支上,这意味着你仍然在项目的主分支(主副本)上工作,而不是在新的分支上。


要切换到新的分支,需要用到 checkout 命令:


git checkout "branch_name"
复制代码



可以看到,它已经切换到了新分支 my_branch。


在这个分支中,你可以做任何修改,它不会影响项目的主分支内容。


Git 的命令有很多,这里只是简单的介绍了 4 个比较常用的命令,用来高速大家 Git 是如何工作的。


如果对 Git 其他命令感兴趣,推荐看一下一篇文章Git Cheat Sheet,这篇文章里详细的介绍了 50 个会用到的 Git 命令。

5. 辅助工具

没有完美无暇的工具,git 也是,当然,有些功能仅仅依赖 git 是无法完成的。


一些强大的辅助工具能够让开发过程中事半功倍,效率得到极大的提高,下面就来介绍 2 款 git 辅助/增强工具。

5.1 tig

Tig 是一个基于 ncurses 的 git 文本模式接口。它的功能主要是作为一个 Git 存储库浏览器,但也可以帮助在块级别上分段提交更改,并充当各种 Git 命令输出的分页器。

5.2 oh-my-zsh

“Your terminal never feltthisgood before.”


提到命令行工具,首推的自然是这款大杀器,bash 的替代工具。bash 算得上一款中规中矩的 shell 工具,没有什么缺陷,但是也谈不上优秀,在很多方面考虑的还不够周到,例如,自动补全、语法、高亮显示、提示符等。


提到 oh-my-zsh,那就厉害了,102kStar、250+插件、125+主题、1450+贡献者......从这一系列的数字中就可以体现出这款 shell 工具的生态有多么完善,也足以体现它有多么强大。


zsh 是一款 bash 替代工具,为什么却在这里提及呢?


因为,它的确在 git 的使用过程中提升了很大的效率。


当我们在 Linux 下开发时,默认的命令提示符是不指示分支信息和修改状态的,当然,通过修改 Linux 配置文件写一个函数也可以实现这项功能。


但是,我还是更推荐使用 oh-my-zsh,像下面这样,



发布于: 刚刚阅读数: 3
用户头像

Jackpop

关注

还未添加个人签名 2020.09.16 加入

公众号:平凡而诗意,微信:code_7steps,全网粉丝超20万,技术进阶、优质资源、实用工具,欢迎关注!

评论

发布
暂无评论
如何优雅地使用 Git?_Jackpop_InfoQ写作社区