版本控制工具应该具备的功能
协同修改
多人协同合作修改同一个文件。
数据备份
保存目录和文件的当前状态,而且保存每一个提交过得状态。
版本管理
版本更新时做到不保存重复数据以节约存储空间,提高运行效率。
SVN:增量式管理。每次只保存修改的部分。调用的时候与之前的拼接起来。
Git:文件系统快照。
权限控制
对团队开发人员进行权限控制。
对团队外开发者提交的代码进行审核----Git独有操作。SVN无法接受未授权的人提交的代码。这个特点适用于开源社区管理代码。
历史记录
查看修改人、修改日期、修改内容、日志信息。
将本地文件恢复到某一个历史记录。
分支管理
允许团队多条生产线同时推进,类似于开一个副本文件进行开发,进一步提高开发效率。
版本控制简介
版本控制
使用版本控制的思想管理代码的版本迭代。
版本控制工具比较
集中式版本控制工具:
CVS、SVN、VSS......
每一个开发人员是客户端,文件和版本信息存储于服务器。
缺点:服务器损坏,历史信息会丢失,当前开发人员只有当前文件和版本信息。会产生单点故障的问题。
分布式版本控制工具:
Git为例:
本地可以进行完整的版本控制,本地有完整的历史版本信息。没有单点故障的问题。
Git 优势 -- 第三
由本地的版本库,大部分操作在本地完成,不需要联网即可完成版本控制。
完整性保证,不同的版本有不同的哈希值保存。
版本库中会尽可能添加数据而不是删除或修改数据。
分支操作快捷流畅。分支是对不同快照的不同指针,所以很便捷。
Git 安装过程
安装在非中文目录下,多数步骤使用默认。
调整 path 环境变量的三个选项,建议选择 use Git from Git Bash only。完全不修改 path 环境变量,仅在 Git Bash 中使用 Git。
library 本地库和远程库的连接方式,使用默认值。
行末换行符转换方式,继续使用默认值。
使用 Git 命令的默认终端,继续使用默认值。
Git 的本地结构
工作区
写代码,添加文件、修改文件的地方。
暂存区
临时存储 打算提交尚未提交的文件。
本地库
储存每次提交的历史版本。
工作过程
新建文件 在工作区,使用 git add 添加到暂存区,使用 git commit 提交到本地库。
Git 和代码托管中心
代码托管中心的任务:维护远程库
局域网环境:Gitlab服务器
外网环境:GitHub、码云
本地库和远程库
团队内部协作
push
甲 先创建一个本地库,为了将本地库推送到远程托管中心。于是在代码托管中心创建了空的远程库。然后使用 push 将本地内容推送到远程库。
clone
乙 创建本地库,使用 clone 从远程库下载文件到本地库,clone本身带有创建和初始化本地库的功能。
推送权限
因为远程库属于 甲,此时 乙 无法将本地库文件推送到远程库。需要 甲 邀请 乙 加入团队后才可以。
pull
当 乙 将本地库推送到远程库以后,甲 可以使用 pull 将远程库文件更新到本地库。
跨团队协作
fork
丙 是团队外成员,使用 fork 复制一个新的远程库。这个远程库的内容与 甲 创建的一样,不过所有者是 丙。
上传地址
丙 从这个远程库 clone 下文件。修改后使用 pull 上传到的地方是 丙 自己的远程库。甲 的远程库内容不受影响。
pull request
丙 使用 pull request 发起一个拉取的请求。
merge
甲 对 丙请求的文件进行审核,审核通过后使用 merge 合并到 甲 的远程库。
本地库初始化
使用 git bash 打开 git 命令行窗口。这个命令行窗口兼容 Linux 命令。
命令:mkdir
当前文件下新建文件夹。
命令:git init
初始化空的本地库,.git文件夹。
.git 文件夹中存放的是本地库相关的子文件夹和文件,不要随意删除或修改。
设置签名
作用是区分不同开发人员的身份。形式是用户名和邮箱。
登录远程库的账号、密码和这个没有任何关系。
git config
项目级别/仓库级别:仅在当前本地库范围内有效。
设置用户名和密码:
git config user.name baoyuan
git configuser.emailbaoyuan@qq.com
git config --global
系统用户级别:登录当前操作系统用户范围。
设置用户名和密码:
git config --global user.name baoyuan
git config --globaluser.emailbaoyuan@qq.com
级别优先级
就近原则:二者都有时,使用项目级别的签名
只有系统用户级别的签名,以系统用户级别的为准
不允许二者都没有的情况
签名信息保存位置
项目级别:
.git文件夹下的config文件内
系统级别:
C/Users/administrator文件夹下 的.gitconfig文件内
提交到本地库
命令:git status
显示当前所在分支,本地库提交历史,当前可提交文件。功能类似于查看警告,查看当前本地库状态,会有提示信息。查看工作区和暂存区的状态。
命令:git add + 文件
将工作区文件添加到暂存区
命令:git rm --cached + 文件
将提交到暂存区的文件删除,只剩下工作区文件
命令:git commit + 文件
类似于添加注释。同时将暂存区文件添加到本地库。
执行后 跳转到 vim 编辑器,vim编辑器下:
1、命令: :set nu
显示行号
2、命令: :wq
退出
命令:cat + 文件名+后缀
查看文件内容
命令:vim + 文件名+后缀
打开文件可供修改
命令:git commit -m "注释内容" + 文件名
可以不用打开 vim 编辑器进行操作
修改后执行命令:git checkout -- 文件可以撤销刚才所做的修改
命令:git log
查看日志,即本地库历史版本
多屏显示:空格向下,b向上翻页,q退出
命令:rm + 文件名
删除工作区的文件,之后可以把删除操作提交到本地库。删除的文件可以从历史版本中找回。只要曾经提交到了本地库,就可以从历史版本中恢复。没提交过的那就别想了。
命令:git diff + 文件名
将工作区与暂存区比较
命令:git diff HEAD + 文件名
将工作区与本地库进行比较,也可以指定历史版本进行比较
命令:git diff
不加文件名,是将工作区中所有的文件进行比较
版本选择
下面三个指令确定查看版本日志以及哈希索引值
命令:git log --pretty=oneline
显示简洁日志,只包括哈希值和 commit 注释
命令:git log --oneline
显示哈希值缩写和 commit 注释
只显示当前版本的历史版本,不显示后面的版本
命令:git reflog
显示移动到某个版本所需要的步数
显示所有版本信息
命令 git reset --hard + 哈希索引值
这是最长用的版本更换操作,可以根据索引值选择要去的版本
命令 git reset --hard HEAD
指向当前指针指向的位置
git reset --hard^
回退一个版本,需要回退多少版本则写多少个 ^
当版本数太多时,可以使用--hard~n来回退 n 个版本
reset 命令的三个参数对比
1、soft 参数
移动本地库指针,不会改变工作区和暂存区
2、mixed 参数
在本地库移动指针
重置暂存区,不改变工作区
3、hard 参数
在本地库移动指针
重置工作区和暂存区
分支操作
功能就是复制一个副本进行修改,修改过程中不会影响主干的运行。实际上就是一个指针,指向本地库。
master
是主干
命令:git branch + 分支名
创建分支
命令:git branch -v
查看有哪些分支
命令:git checkout + 分支名
切换分支
命令:git checkout + 主干名
切换回主干
命令:git marge + 分支名
合并分支内容到主干,当然也可以合并主干到分支
当两个分支的内容有冲突时,合并后文件内会有提示,以供开发者手动修改。文件修改完成后,需要执行git add + 文件名提交到暂存区,再执行git commit -m + "日志信息"上传到本地库。这个过程要注意的是,commit 时不用写入文件名。