Git 的正确使用姿势与最佳实践:团队协作和版本控制的最佳实践

75 阅读5分钟

Git 的正确使用姿势与最佳实践:团队协作和版本控制的最佳实践

在这篇笔记中,将介绍git这一广泛使用的版本控制工具,并通过简单的实操案例来练习和掌握git的常用命令。

什么是Git?

Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。 Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion、CVS、Perforce和ClearCase等版本控制工具。

这里再介绍一下什么版本控制。版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本, 方便版本切换。

版本控制工具可以分为集中式和分布式两种。

集中式的版本控制系统诸如 CVS、SVN等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。 这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易。 事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。

分布式的版本控制工具即Git等,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。 分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:首先,服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的);其次,每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)。

Git的工作机制

关于Git的工作机制,可以用下面这张图进行说明:

image.png

工作区——写代码

使用

 git add

命令,将工作区文件保存到暂存区。

暂存区——临时存储

使用

 git commit

命令,将暂存区文件提交到本地库中。

本地库——存放历史版本

Git的本地使用

首先介绍git的本地使用及其常用命令。

本地使用指的是不使用远程代码仓库(如GitHub,Gitee等),仅在本地库使用Git进行版本控制。

设置用户签名

在第一次使用Git之前,要进行如下配置:

 git config --global user.name 用户名
 git config --global user.email 邮箱
 # 只需要设置一次

初始化本地库

在没有本地库的项目文件夹下使用来初始化本地库。

此后就可以在此项目中使用git。

 git init

查看本地库状态

可以查看当前有多少文件发生修改后没有add,或者add后还没有commit。

 git status

添加到暂存区

将修改的文件保存到暂存区,可以指定文件名,也可以全部添加。

 git add 文件名
 git add *
 # 高级选项参考文档

提交到本地库

将暂存区的文件提交到本地库。

 git commit -m "版本说明" 文件名

查看操作日志

 git reflog
 # 查看简要历史日志
 git log
 # 查看详细历史日志
 # 高级选项可以进行日志筛选,参考文档

版本穿梭

 git reset --hard 版本号
 # 切换到对应版本
 # 版本的切换,底层是移动HEAD指针实现

分支操作

 git branch 分支名
 # 创建分支
 git branch -v
 # 查看分支
 git checkout 分支名
 # 切换到指定分支
 git merge 分支名
 # 将指定分支合并到当前分支上

Git配合远程代码仓库使用

这里以GitHub为例,介绍如何使用Git配合远程仓库,进行版本控制和团队协作。

首先,需要在GitHub上新建一个仓库,并记录下远程仓库的地址。

添加远程仓库的地址

我们先将远程仓库的地址添加到本地,并且绑定一个别名。

 git remote -v 
 # 查看当前所有远程地址的别名
 git remote add 别名 远程地址
 # 为远程地址绑定一个别名

推送/拉取

在本地完成代码编写后,我们需要将代码推送(push)到远程仓库。

而在和别人合作编程时,需要先拉取(pull)最新代码,在其基础上改进。

 git push 别名 分支
 # 将本地分支上的内容推送到远程仓库
 git pull 远程地址别名 远程分支名
 # 将远程仓库对应分支的最新内容拉到本地,和当前本地分支进行合并

SSH免密登录的配置

为了避免需要频繁登录GitHub账号,我们可以配置SSH免密登录。

首先在当前计算机用户的文件夹下执行以下命令,生成SSH密钥:

 ssh-keygen -t rsa -C 电子邮箱

然后进入.ssh文件夹,复制id_rsa.pub公钥内容。

在GitHub的个人资料→Settings→SSH and GPG keys添加上述密钥即可。