Git&&GitHub的使用(第一节)

版本控制工具应该具备的功能

协同修改
 多人并行不悖的修改服务器端的同一个文件。

数据备份
 不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。

版本管理
 在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空 间,提高运行效率。这方面 SVN 采用的是增量式管理的方式,而 Git 采取了文 件系统快照的方式。

权限控制
 对团队中参与开发的人员进行权限控制。
 对团队外开发者贡献的代码进行审核——Git 独有。

历史记录
 查看修改人、修改时间、修改内容、日志信息。  将本地文件恢复到某一个历史状态。

分支管理
 允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。

版本控制简介

版本控制
工程设计领域中使用版本控制管理工程蓝图的设计过程。在 IT 开发过程中也可以 使用版本控制思想管理代码的版本迭代。

版本控制工具
思想:版本控制
实现:版本控制工具

集中式版本控制工具: CVS、SVN、VSS
集中式版本控制工具的缺点是只有一台svn服务器,一旦宕机,就凉凉,无法克服单点故障问题。
Git&&GitHub的使用(第一节)
分布式版本控制工具: Git、Mercurial、Bazaar、Darcs
分布式版本控制工具能解决单点故障,就算服务器宕机,也可以将项目分享给队友。
Git&&GitHub的使用(第一节)

Git 简介

Git 的优势
 大部分操作在本地完成,不需要联网
 完整性保证
 尽可能添加数据而不是删除或修改数据
 分支操作非常快捷流畅
 与 Linux 命令全面兼容

Git 安装
Git&&GitHub的使用(第一节)
Git&&GitHub的使用(第一节)
Git&&GitHub的使用(第一节)
Git&&GitHub的使用(第一节)
Git&&GitHub的使用(第一节)
Git&&GitHub的使用(第一节)
Git&&GitHub的使用(第一节)
Git 和代码托管中心
代码托管中心的任务:维护远程库
局域网环境下
 GitLab 服务器
外网环境下
 GitHub
 码云

本地库和远程库

团队内部协作
Git&&GitHub的使用(第一节)
跨团队协作
Git&&GitHub的使用(第一节)
Git&&GitHub的使用(第一节)

Git 命令行操作

本地库初始化
Git&&GitHub的使用(第一节)
初始化步骤,先是创建一个空文件夹,然后进入文件夹执行git init命令进行初始化,然后会生成一个名为.git的隐藏文件夹,该文件夹里包含着git本地库的所有信息。
注意:.git 目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡 乱修改。

设置签名
 形式
用户名:tom Email
地址:[email protected]
 作用:区分不同开发人员的身份
 辨析:这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关系。

命令
 项目级别/仓库级别:仅在当前本地库范围内有效
 git config user.name tom_pro
 git config user.email [email protected]
 信息保存位置:./.git/config 文件
Git&&GitHub的使用(第一节)
 系统用户级别:登录当前操作系统的用户范围
 git config --global user.name tom_glb
 git config --global [email protected]
 信息保存位置:~/.gitconfig 文件
Git&&GitHub的使用(第一节)
级别优先级
 就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别 的签名
 如果只有系统用户级别的签名,就以系统用户级别的签名为准  二者都没有不允许

基本操作

状态查看
git status
Git&&GitHub的使用(第一节)
如上图,第一次使用git status时,如果我们的工作目录GitRepository里面什么也没有,就会显示No commits yet,意思是没有要提交的,然后nothing…这句话是建议我们可以创建或者复制文件,并使用git add来加入到暂存区里面。

添加到暂存区
Git&&GitHub的使用(第一节)
如上图,创建了一个文件并加入暂存区。
这时,如下图再次调用git status命令查看状态,我们可以发现这个文件是绿色的,说明在暂存区中,并且可以提交了,同时我们可以注意到使用git rm…可以将其移除暂存区。
Git&&GitHub的使用(第一节)
下图是该文件不在暂存区时的状态,是红色的。
Git&&GitHub的使用(第一节)
下图是我重新加入到暂存区,并且commit后的结果,-m参数是指定要上传的更改信息,我们可以看到第一次commit是root-commit,也就是主分支。
Git&&GitHub的使用(第一节)
下图是我对test.txt随意增加了一行数据,然后查看状态,这是会有一个modified消息,意味着此时本地的test.txt与commit的不一致了。
Git&&GitHub的使用(第一节)
下图是将test.txt重新添加到暂存区并commit,然后我们可以发现,没有root信息了,且master后面的那串数字也和上面不一样了,说明版本变了。

Git&&GitHub的使用(第一节)

前进后退历史版本

以下我给出了四种方式查看历史版本记录!HEAD是指针,我们使用该指针进行前进后退。
Git&&GitHub的使用(第一节)
如下图,我们利用reflog里面的索引进项前进和后退,git reset --hard 索引值
Git&&GitHub的使用(第一节)
我们还可以使用^来进行后退:
git reset --hard HEAD^
 注:一个^表示后退一步,n 个表示后退 n 步

使用~符号:只能后退
 git reset --hard HEAD~n
 注:表示后退 n 步

reset 命令的三个参数对比
–soft 参数
 仅仅在本地库移动 HEAD 指针

–mixed 参数
 在本地库移动 HEAD 指针
 重置暂存区

–hard 参数
 在本地库移动 HEAD 指针
 重置暂存区
 重置工作区

删除文件并找回
Git&&GitHub的使用(第一节)
如上图,我们可以看到每个版本的信息,reflog的每一行都是一个版本或者说是记录,这时,我们把工作区的test.txt删除,然后看状态,会发现红色的deleted test.txt,这是因为和本地库里状态不一致。然后如下图所示,commit提交以下,这是就一致了,我们看日志,会发现多了一条"删除"状态的记录。这时,我们利用reset,可以回退到之前没有删除的版本,这样就找回了test.txt
Git&&GitHub的使用(第一节)
比较文件差异
我vim test.txt,删除了两行,并加了些东西,然后用diff可以看出此时与暂存区的test.txt的差异。
Git&&GitHub的使用(第一节)
然后加到暂存区里,然后diff,这时就一致了。
Git&&GitHub的使用(第一节)
但是,与本地库相比较,还是不一样,如下图
Git&&GitHub的使用(第一节)
然后提交上去再比较就一样了。
Git&&GitHub的使用(第一节)