Git入门学习
>Git
# 1.初识Git
Git 是一个开源的分布式`版本控制`系统。
`版本控制(Revision control)`是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。
作用:
+ 实现跨区域多人协同开发
+ 追踪和记载一个或者多个文件的历史记录
+ 组织和保护你的源代码和文档
+ 统计工作量 并行开发、提高开发效率
+ 跟踪记录整个软件的开发过程
+ 减轻开发人员的负担,节省时间,同时降低人为错误
简单说就是`用于管理多人协同开发项目`的技术。
目前使用最广泛的是`Git与SVN`。
他们主要的区别:
+ SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。


+ Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
# 2.Git历史
在 git 诞生之前,Torvalds 选择使用 BitKeeper 进行 Linux 版本管理。`BitKeeper 是一个闭源的商业软件,这个决定长期受到社区的质疑和争议。`
2005 年,一位 Linux 开发成员 Andrew(Samba 协议之父)写了一个可以连接 BitKeeper 仓库的外挂,因此 BitMover 公司(BitKeeper 持有者)认为他反编译了 BitKeeper。BitMover 决定中止 Linux 免费使用 BitKeeper 的授权。最终 Linux 团队与 BitMover 磋商无果,Torvalds 决定开发自己的版本管理系统。
`十天后,git 诞生了。`
你没有看错。git 从开始到诞生,Torvalds 这位天才只用了 10 天的时间。
`Git是目前世界上最先进的分布式版本控制系统。`
注 : Git作者 Linus Torvalds(林纳斯·托瓦兹,同时也是 Linux 之父)1969,芬兰
# 3.Git安装
Git官方下载地址:[http://git-scm.com/downloads](%EF%BC%9Ahttp://git-scm.com/downloads)
官网慢,可以用国内的镜像:[https://npm.taobao.org/mirrors/git-for-windows/
](https://npm.taobao.org/mirrors/git-for-windows/)
下载对应的版本即可安装! 无脑点击下一步即可!自动配置环境变量!
完成安装后:

**Git Bash**:Unix与Linux风格的命令行,使用最多,推荐最多
**Git CMD**:Windows风格的命令行
**Git GUI**:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令Git 配置
# 4.常用的Linux命令
```bash
cd : 改变目录
cd .. :回退到上一个目录,直接cd进入默认目录
pwd : 显示当前所在的目录路径
ls : 都是列出当前目录中的所有文件
touch :新建一个文件 如touch index.js就会在当前目录下新建一个index.js
rm :删除一个文件, rm index.js就会把index.js文件删除
mkdir :新建一个目录,就是新建一个文件夹
rm -r 删除一个文件夹,rm -r src 删除src目录
mv 移动文件, mv index.html src index.html 是我们要移动的文件,src是目标文件夹
reset :重新初始化终端/清屏
clear 清屏
history 查看命令历史
help 帮助
exit 退出
# 表示注释
```
# 5.Git的配置
## 5.1、用户信息(必要)
- 查看不同级别的配置文件
- git config --list #查看配置信息
- git config --system --list #查看系统config
- git config --global --lits #查看当前用户配置
- `用户配置`✨
+ `git config --global user.name "swz"`
+ `git config --global user.email xxxx@qq.com`
如果用了 —global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 —global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。
## 5.2、查看配置信息
- Git\etc\gitconfig:Git安装目录下的gitconfig --system 系统级
- C:\Users\songw\.gitconfig: 只适用于当前登录用户的配置 --global 全局

- 可以直接编辑,也可以通过上面的命令。
# 6.Git基本理论
> 工作区域

## 6.1 基本概念
- 工作区:平时存放项目代码的地方。
- 暂存区(Stage/Index):暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列 表信息
- 版本库:又称本地仓库,这个不算工作区,而是 Git 的版本库,里面有你提交到所有版本的数据。
- 远程仓库:托管代码的服务器
常用命令:

## 6.2 工作流程:
- 1、在工作目录中添加、修改文件;
- 2、将需要进行版本管理的文件放入暂存区域;
- 3、将暂存区域的文件提交到git仓库。

因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

# 7. Git项目搭建
日常使用命令:

## 7.1 本地仓库搭建----创建全新的仓库
1.新建目录

2.git init 初始化(注,这是隐藏的文件)

## 7.2 本地仓库搭建----克隆远程仓库
1. 打开码云/github

2. git clone https://gitee.com/kuangstudy/kuang_livenote.git

# 8. Git文件操作
> 查看文件状态
```bash
#查看指定文件状态
git status [filename]
# 查看所有文件状态
git status
#git add . 添加所有文件到暂存区
#git commit -m "消息内容" 提交暂存区的内容到本地仓库 -m 提交信息
```
> 忽略文件
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件等。
在主目录下建立`”.gitignore”`文件,此文件有如下规则:
1.忽略文件中的空行或以井号(#)开始的行将会被忽略。
2.可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号 ([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等。
3.如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
4.如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
5.如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
```bash
#为注释
*.txt #忽略所有 .txt结尾的文件
!lib.txt #但lib.txt除外
/temp #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/ #忽略build/目录下的所有文件
doc/*.txt #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
```
# 9. 使用码云
> 官网:[https://gitee.com/](https://gitee.com/)
官网教程:[https://gitee.com/help/articles/4122](https://gitee.com/help/articles/4122)
可以设置绑定SSH公钥,实现免密码登录!
- 1.生成公钥 `$ ssh-keygen -t rsa`,一路回车

- 2.产生对应的两个文件(注意是隐藏的)

- 3.复制公钥,进行添加,完成。
将上图的id_rsa.pub公钥 复制一下


- 4.使用码云创建一个自己的仓库

- 5.克隆仓库

# 10. idea集成git
- 新建一个springboot项目

- 将空白的git项目gitstudy中的东西复制到springboot项目git-study中
- 然后在idea的termianl中 输入`git add .`
- 接下来进行提交
- 最后在idea的termianl中 输入`git push`
- 然后到码云刷新即可,这有个问题就是码云中项目的名字和我们本地项目的名字不一样了。
注:所以还有第二种集成git的方法,待补充!!!
# 11. Git分支

git分支中常用指令:
```bash
# 列出所有本地分支
git branch
# 列出所有远程分支
git branch -r
# 新建一个分支,但依然停留在当前分支
git branch [branch-name]
# 新建一个分支,并切换到该分支
git checkout -b [branch]
# 切换分支
git checkout [branch]
# 合并指定分支到当前分支
$ git merge [branch]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
```
如果同一个文件在合并分支时都被修改了则会引起冲突:
解决引起冲突办法::
- 把本地冲突文件另保存起来
- 还原本地文件版本。
- 修改冲突文件后重新提交!
注:
master主分支应该非常稳定,用来发布新版本,一般情况下`不允许`在上面工作,工作一般情况下在新建的dev分支上工作,工作完后,代码稳定了,再合并到主分支上来。
`比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。`
参考:
[https://www.kuangstudy.com/bbs/1532247011263672321#header13](https://www.kuangstudy.com/bbs/1532247011263672321#header13)
[https://www.bilibili.com/video/BV1FE411P7B3?p=14&spm_id_from=pageDriver&vd_source=7fbdf801825de29eed7469c66b94a78e](https://www.bilibili.com/video/BV1FE411P7B3?p=14&spm_id_from=pageDriver&vd_source=7fbdf801825de29eed7469c66b94a78e)
- 点赞
- 收藏
- 关注作者
评论(0)