Git 的正确使用姿势与最佳实践:团队协作和版本控制的最佳实践
在这篇笔记中,将介绍git这一广泛使用的版本控制工具,并通过简单的实操案例来练习和掌握git的常用命令。
什么是Git?
Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。 Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion、CVS、Perforce和ClearCase等版本控制工具。
这里再介绍一下什么版本控制。版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本, 方便版本切换。
版本控制工具可以分为集中式和分布式两种。
集中式的版本控制系统诸如 CVS、SVN等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。 这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易。 事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
分布式的版本控制工具即Git等,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。 分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:首先,服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的);其次,每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)。
Git的工作机制
关于Git的工作机制,可以用下面这张图进行说明:
工作区——写代码
使用
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添加上述密钥即可。