一、git简介
官网地址:https://git-scm.com/
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
二、版本控制是什么
版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地了已录下来。每一次文件的改变,文件的版本号都将增加。除了记录版本变更外,版本控制的另一个重要功能是并行开发。软件开发往往是多人协同作业,版本控制可以有效地解决版本的同步以及不同开发者之间的开发通信问题,提高协同开发的效率。并行开发中最常见的不同版本软件的错误(Bug)修正问题也可以通过版本控制中分支与合并的方法有效地解决。
三、版本控制具备的功能
协同修改
多人并行不悖的修改服务器端的同一个文件。
数据备份
不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。
版本管理
在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空
间,提高运行效率。这方面 SVN采用的是增量式管理的方式,而 Git采取了文
件系统快照的方式。
权限控制
对团队中参与开发的人员进行权限控制。
对团队外开发者贡献的代码进行审核——Git独有。
历史记录
查看修改人、修改时间、修改内容、日志信息。
将本地文件恢复到某一个历史状态。
分支管理
允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效
四、Git和SVN的区别
Git 与 SVN 区别点:
· Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
· Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
· Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
· Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
· Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
五、Git的安装(windows平台)
Git的安装相对来说还是很简单的,没有太过复杂的操作,基本只需要一路next就行了。安装完成后右击鼠标可以看到下面的
说明Git已经安装成功了。
六、Git的基本结构
Git在使用过程中可分为:Git 工作区、暂存区和本地(版本)库
6.1 基本概念
工作区:就是你在电脑里能看到的目录(写的代码存在工作区)。
暂存区:英文叫stage, 或index。一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。(计划要提交的文件)
版本库:(本地库)**工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
七、Git和代码托管中心
7.1 代码托管中心
**代码托管中心的任务:**维护远程库
**局域网环境下:**GitLab服务器
**外网环境下:**GitHub https://github.com/ 、**码云:**https://gitee.com/
7.2 本地库和远程库
当团队内部协作开发时使用本地库更合适,当跨团队协作开发时更合适使用远程库进行协作开发。
7.2.1 团队内部协作流程
7.2.2 跨团队协作开发
当跨团队协作开发的时候,流程会比团队内部协作开发更为复杂。这主要是考虑到开发过程中的安全性问题。如果不对团队中开发人员的权限做限制很容易会导致部分开发人员上传恶意代码到服务器。git同时要求对团队内开发人员上传的代码进行审核,如果发现恶意代码将无法上传成功。
八、Git命令行常用命令
git命令行命令基本和Linux的命令一致。
8.1 创建仓库(本地库)
8.1.1 初始化本地仓库
Git使用git init
命令来初始化一个Git仓库,Git的很多命令都需要在Git的仓库中运行,所以git init
是使用Git的第一个命令。
在执行完git init
命令后,Git仓库会生成一个.git
目录,该目录包含了资源的所有元数据,其它的项目目录保持不变。
使用git init
命令初始化Git仓库之后会在当前目录生成一个一个隐藏文件夹.git
。
8.1.2 设置签名
1、为什么设置签名
签名主要是为了表示不同的开发人员身份
形式:
用户名:weixin
邮箱:1760542098@qq.com
注意:这里的签名和远程库(代码托管中心GitHub/GitLab)没有任何关系。
我们可以设置两种级别的签名:
项目级别(仓库):仅在当前本地库范围有效(例如我们上面设置的demo)
系统级别:登录当前操作系统的用户范围
级别优先级:项目级别优先级大于系统(用户)级别签名
签名级别是必须设置的选项,如果都不设置,可能会导致Git命令出错,无法辨别。
2、签名命令
使用到的命令:git config
项目级别(仓库,仅对当前本地库范围有效):
git config user.name weixin_pro
git config user email 1760542098@qq.com
系统级别:登录当前操作系统的用户范围
git config --global user.name weixin_globa
git config --globa user.email 1760542098@qq.com
注:在实际开发过程中,通常只需要设置系统级别即可。如果有特殊需要,再设置项目级别。
8.2 常用命令
8.2.1 Git Status
git status [<options>…] [--] [<pathspec>…]
git status命令用于显示工作目录和暂存区的状态。使用此命令能看到那些修改被暂存到了, 哪些没有, 哪些文件没有被Git tracked到。git status不显示已经commit到项目历史中去的信息。看项目历史的信息要使用git log
8.2.2 Git add
git add demo.java
命令将文件内容添加到索引(将修改添加到暂存区)。也就是将要提交的文件的信息添加到索引库中。(将工作区写入暂存区)
描述:此命令将要提交的文件的信息添加到索引库中(将修改添加到暂存区),以准备为下一次提交分段的内容。
git add 后,再次查询git status
8.2.3 Git rm
git rm
命令用于从工作区和索引中删除文件。
简介
git rm [-f | --force] [-n] [-r] [--cached]
[--ignore-unmatch] [--quiet] [--] <file>…
**git rm –cached 文件名称 ** //用于将暂存区的文件恢复到工作区
8.2.4 Git commit
git commit
命令用于将更改记录(提交)到存储库。将索引的当前内容与描述更改的用户和日志消息一起存储在新的提交中。
描述
git commit
命令将索引的当前内容与描述更改的用户和日志消息一起存储在新的提交中。
执行命令:git commit 文件名.xxx后,显示如下需要输入提交文件的备注或描述。
可通过:set nu
显示行号方式便利输入备注信息
我们也可以通过
git commit -m "备注信息" 文件名
的方式快速添加备注信息
8.2.5 Git checkout
git checkout
命令用于切换分支或恢复工作树文件。git checkout
是git最常用的命令之一,同时也是一个很危险的命令,因为这条命令会重写工作区。
8.2.6 Git log
git log
命令用于显示提交日志信息。
使用语法
git log [<options>] [<revision range>] [[\--] <path>…]
同时可以使用git log -pretty=oneline
来更优雅的显示
或者使用git log --oneline
使用git reflog
来显示需要回退的步骤HEAD@{*}
8.2.7 使用Git reflog/reset 查看(设置)历史记录(之前/之后)
git reset
命令用于将当前HEAD
复位到指定状态。一般用于撤消之前的一些操作(如:git add
,git commit
等)。
HEAD@{移动到当前版本需要多少步}
基于索引值操作[推荐]
git reset --hard [局部索引值]
查看当前版本记录:
git rm
命令用于从工作区和索引中删除文件。
1、工作区创建文件,通过命令提交到本地库
Vim d1.txt git add d1.txt git commit –m 上传到本地库d1.txt
2、 执行命令进行删除:
git rm d1.txt工作区删除后,提交到本地库git commit –m 删除d1.txt
3、 通过日志git reflog 找回
$ git reset --hard 15d5002
4、 ll 查看即可。
8.2.8 文件比较
git diff
命令用于显示提交和工作树等之间的更改。此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。(默认是和暂存区文件进行比较)
使用git diff
命令将暂存区中的文件和本地库中的文件进行比较
通过git checkout
命令可以退回修改
九、分支
9.1 分支的概念
9.1.1 什么是分支
在版本控制过程中,使用多条线同时推进多个任务。
9.1.2 使用分支有什么好处
同时并行推进多个功能开发,提高开发效率各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
9.2 分支命令(操作)
9.2.1 Git branch
git branch
命令用于列出,创建或删除分支。
git checkout
命令用于切换分支或恢复工作树文件。
**1、**查看当前有哪些分支
git branch
**2、**新建一个分支
git branch hot_fix
3、 切换到指定分支
git checkout hot_fix
4、 查看本地和远程分支
git branch –a
9.2.2 合并分支
我们可以通过git merge master
命令来合并分支
但是如果两个分支上出现了冲突,那么就会导致分支合并失败