一,快速入门
1.1 什么是 Git
Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。
Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具。
1.2 什么是版本控制?
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。
1.3 版本控制工具
1.3.1 集中式
- 集中化的版本控制系统诸如 CVS、SVN 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
- 多年以来,这已成为版本控制系统的标准做法。这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限。
- 事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
1.3.2 分布式
- 客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。
- 分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的),每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)
1.4 工作机制
- 工作区:放在磁盘区的代码
- 暂存区:通过工作区
git add
放在此处 - 本地库:通过暂存区的
git commit
放到此处 - 远程库:通过本地库上传到远程库,代码托管中心是基于网络服务器的远程代码仓库
二,场景示例
2.1 初次在本地进行版本控制
- 进入要管理的文件夹
- 初始化,即提名做老大,拥有对该文件夹下所有文件的管理权限,会生成 .git 文件,所有的配置和版本文件都存放在这里
- 管理
- 生成版本
涉及命令:
初始化本地库
git init
将文件从工作区添加到暂存区
git add 文件名 添加单个文件
git add . 添加全部
个人信息配置:用户名和邮箱,用于告诉Git,是谁生成的版本;这个配置只在第一次安装Git时进行,对所有文件夹都生效
git config --global user.name 用户名
git config --global user.email 邮箱
提交到本地库,生成版本
git commit -m "日志信息"
查看本地库状态
git status 详细信息
git status -s 简短信息
查看版本记录
git reflog 查看版本信息
git log 查看版本详细信息
工作区和版本库的作用比较容易理解,暂存区的设置是为了在两个区域中进行缓冲,以便决定文件的后续去向。
2.2 开发新功能
开发新功能完成后,在Git上进入该项目目录,执行下列命令即可:
git add . 添加全部
git commit -m "日志信息"
2.3 出现意外,需要版本回滚
查看版本记录:
回滚至之前版本:
git log
git reset --hard 版本号
回滚至之后版本:
git reflog
git reset --hard 版本号
2.4 分支
Git中,生成了多个版本时,后面的版本只会保存有修改的部分,没有变化的部分会做一个类似快照的操作
设想一个场景:在原来的旧版本上开发新功能,新功能开发到一半,结果原来的旧版本出现了bug,这时如何处理?解决办法
分支可以给使用者提供多个环境的可能,意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
命令总结:
git branch 查看分支
git branch 分支名称 创建分支
git checkout 分支名称 切换分支
合并分支(可能有冲突,此时需要手动处理冲突的代码,然后按修改文件后的操作提交至版本库即可)
git merge 要合并的分支 先切换分支,再合并
git branch -d 分支名称 删除分支
2.5 代码托管仓库 GitHub
如何把本地仓库推送到线上?
当本地没有仓库时,需要新建一个仓库,并获取控制权git init
,然后执行下列命令,即可将本地仓库推送至远程:
git remote add origin https://gitee.com/xxx/xx.git 为远程链接起别名为origin
git push [-u] origin master 将本地仓库的master分支推送至origin仓库的master分支,默认是master分支,如果有其他分支,也可以推上去
如何把线上仓库拉取到本地?
git clone 远程仓库地址 (内部已实现git remote add origin 远程仓库地址,origin是默认的别名)
默认会克隆所有分支,但git status时只会显示出master分支,需要就行分支切换才可以看见git checkout 分支名称
疑问:
后续需要推送代码到线上仓库时,一种做法是先拷贝,然后修改后直接推送;还有一种做法是先将远程仓库的代码拉取到项目中,然后直接推送项目,这会有一个问题,将远程拉取到本地时会不会覆盖本地的修改,直接把新添加的文件删除了?
笔记还未完成。。。start->