"上周明明能运行的代码,今天突然报错!"
"同事覆盖了我刚写的模块,现在全乱套了..."
"这个版本和线上版本有什么区别?怎么回退?"
版本控制介绍
在软件开发和项目管理的领域中,版本控制是一项至关重要的技术。它不仅帮助开发者更好地管理代码的变更,还能确保项目的稳定性和可维护性。
项目迭代:
当我们在进行开发时,并不是一个人就能够负责所有代码的开发,而且也很难一次性就做好平台的所有功能,总是会经历不断迭代、修改,上线新的版本的开发过程,所以一个项目就会出现很多版本,在软件开发过程中,代码不断地被修改、完善。如果没有有效的版本控制,当出现问题时,很难追溯到代码的变更历史,找出问题的根源。例如,多人协作开发一个项目时,不同开发者可能在同一文件的不同部分进行修改,没有版本控制就容易出现代码冲突,导致项目进度受阻。此外,当需要回滚到之前的稳定版本时,没有版本控制几乎是不可能完成的任务。
什么是版本控制
版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理。简单来说:版本控制工具就像是一个时间机器,能够让开发者回到代码的任何一个历史状态。通过版本控制,开发者可以记录每次代码变更的作者、时间、内容等信息,方便日后的查阅和管理。
- 本地版本控制
开发者在本地自行借助相关工具,如数据库,文档管理等进行本地代码的版本管理
- 集中式版本控制
集中式版本控制系统的版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以每次写代码时首先要从中央服务器得到最新的版本,然后工作,完成工作后,又需要把自己做完的代码推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。并且由于本地客户端仅保留当前版本信息,当服务器丢失了,那么所有保存的数据就都丢失了。
优点:操作简单
缺点:由单个服务器集中管理,所有操作都需要服务器的支持
- 分布式版本控制
分布式版本控制系统没有中央服务器,每个人的电脑都相当于一台服务器保留完整的版本库。因此工作的时候不需要联网了。当需要进行协同,进行版本更换时只需合并推送到主仓库就可以了,或可以把自己的代码新建一份仓库分享给其它人。
常用的版本控制工具
- Git(gitlab)
- CVS(Concurrent Versions System) 集中式
- SVN(Subversion)集中式
简单比较
版本控制工具 | 并发修改 | 并发提交 | 历史轨迹 | 分布式 |
---|---|---|---|---|
git | 支持 | 支持 | 支持更名 | 支持 |
cvs | 支持 | 不支持 | 不支持更名 | 不支持 |
svn | 支持 | 支持 | 支持更名 | 不支持 |
示意图
Git入门到使用
git常见的应用场景:
- github(全球最大的开源网站)
- gitee–码云(免费的,国内的)
- coding(国内的)
Git的工作原理
Git入门:
环境搭建
Git官网下载地址:Git - 下载软件包 - Git 版本控制系统
操作步骤可参考文档:Git下载及安装保姆级教程(内附快速下载方法)_git下载安装-CSDN博客
注意:必须给git配置用户名和邮箱
- git config --global user.email "你自己的邮箱"
- git config --global user.name"用户名"
可视化图形操作工具:TortoiseGit
TortoiseGit 是 Git 的 Windows Shell 界面工具,基于 TortoiseSVN。它是开源的,可以完全使用免费提供的软件构建。提供的支持,例如提交、显示日志、区分两个版本、创建分支和标签、创建补丁等。
官网下载地址:Download – TortoiseGit – Windows Shell Interface to Git
操作步骤可参照博主:Git & TortoiseGit 详细安装使用教程_tortoisegit安装-CSDN博客
工作原理
上面的六条命令在工作区、暂存区(stage)和版本库库之间复制文件。
- git add files把当前文件放入暂存区域。
- git commit 给暂存区域生成快照并提交。
- git reset – files用来撤销最后一次git add files,你也可以用git reset撤销所有暂存区域文件。
- git checkout – files 把文件从暂存区域复制到工作目录,用来丢弃本地修改。
- git push 把本地仓库推送到远程库
- git pull 从远程库中拉取内容到本地版本库中
Git常用命令
git init------初始化一个本地仓库
git config user.name '用户名'------配置用户名, 不配置默认使用全局配置.gitconfig
git config user.email '邮箱'------配置用户邮箱
git config list ------查看git配置
git clone [跟上要克隆的仓库地址]------克隆远程仓库到本地仓库
git staus------查看git仓库状态
git pull------远程拉取项目文件( 修改项目之前,一定要拉取最新的代码 )
git add------添加工作区文件至git暂存区( 修改后添加动作 )
git stage------等价与add
git commit -m '版本描述'------将暂存区文件提交到仓库区, 生成一个版本
git push------将修改后的代码推送到远程仓库
git log------查看详细历史记录, 不能查看已删除的commit记录
git reflog------查看历史记录
git reset --hard HEAD或 git reset --hard 版本号------当前最新版本( 以下介绍两种方式 )
git reset --hard HEAD^------当前最新版本 的 前一个版本
git reset --hard HEAD~1------当前最新版本 的 前一个版本
git reset --hard HEAD~10------当前最新版本 的 前十个版本
git checkout 文件名------撤销工作区代码(只能作用在工作区和暂存区)
git reset HEAD 文件名------第一步: 将暂存区代码恢复到工作区
git checkout 文件名------第二步: 将工作区代码撤销
git diff HEAD -- 文件名------对比 版本库 与 工作区 中的代码
git diff HEAD HEAD^ -- 文件名------对比 版本库 与 版本库 中不同版本的代码
git diff -- 文件名------对比 缓存区 与 工作区 中的代码
git diff --staged -----缓存区和上次缓存区的比较
git diff --cached -----缓存区和上次缓存区的比较
rm 文件名------第一步: 删除本地工作区文件
git rm 文件名------删除当前目录文件
git commit -m '删除描述'------第三步: 将删除操作提交到版本库;如果不想删除了, 在commit之前执行git checkout -- 文件名
git rm --cached --文件名 ----删除git库的文件
git tag -a v1.0 -m 'version 1.0'------在本地打标签v1.0是标签名
git push origin v1.0------推送标签到远程仓库
git tag -d 标签名------删除本地标签
git push origin --delete tag 标签名------删除远程仓库标签
git branch------查看git分支
git branch --名称 ----创建分支
git checkout test ----切换到test分支
git checkout -b dev------创建并切换dev分支
git push -u origin dev------设置本地分支跟踪到远程分支dev
git branch -d 非当前分支 ----删除非当前分支
git branch -d dev------删除已经终止的分支
git branch 分支名 版本号------恢复指定版本的分支
git check master------切换到master主分支
git merge dev------将dev分支合并到master分支
git push------将本地合并后的状态推送到远程仓库
使用
使用Git工具进行远程Github仓库推送和拉取可参照: