Git&Github
git官网:https://git-scm.com/
1.安装






2.结构
- 工作区(写代码) git add–> 暂存区(临时存储) git commit–> 本地库(本地存储)
3.Git和代码托管中心
- 代码托管中心:维护远程库
- 局域网环境下
GitLab服务器 - 外网环境下
GitHub 码云
- 局域网环境下
4.本地库和远程库
团队内部协作:

跨团队协作:

5.Git命令行操作
5.1 本地库初始化
Git init

5.2 设置签名
形式:
用户名:tom
Email: 123.@as.com(写不存在的地址也没事)作用:区分不同开发人员的身份(这边的签名和登录远程库【代码托管中心】的账号和密码没有任何关系)
命令:
项目级别/仓库级别:仅在当前本地库范围内有效
git config user.name tom
git config user.email 123@as.com
保存于项目目录下的 .git/config系统用户级别:登录当前操作系统的用户范围
git config --global user.name tom
git config --global user.email 123@as.com
保存于系统用户目录下的 .gitconfig文件
优先级:项目级别优先于系统级别,都有则采用项目级别
5.3 查看状态,添加提交
- 命令:
git status
git add文件 添加到缓存区
git rm –cache 文件 从缓存区移除
git commit -m “xxx” 文件
5.4 查看历史记录
- 命令:
git log

附加参数:
git log --pretty=oneline

git log --oneline

git reflog

HEAD@{移动到当前版本需要的步数}
5.5 版本前进回退
基于索引值操作(推荐)
Git reset –hard [局部索引值]
Git reset –hard 56fcccd使用^符号:只能往后退
Git reset –hard HEAD^ 一个^符号表示后退一步使用
符号3(~加数字n表示后退n步)
Git reset –hard HEADReset 3个参数比较:
- soft
仅仅在本地库移动HEAD指针 - mixed
在本地库移动HEAD指针
重置暂存区 - hard
在本地库移动HEAD指针
重置暂存区
重置工作区
- soft
5.6 找回删除文件
- 怎么删除
Rm 文件(工作区删除) -> git add 文件(加入暂存区)-> git commit 文件(提交本地库) - 找回
已提交本地库,reset到有文件的版本
未提交本地库,reset到当前版本,刷新暂存和工作区 git reset –hard HEAD
5.7 文件比较
- git diff 文件名
工作区和暂存区比较 - git diff [本地库中的历史版本] 文件名(56fcccd或者HEAD^)
工作区和本地库比较 - 不带文件名 比较多个文件
5.8 分支
- 创建分支
Git branch [分支名] - 查看分支
Git branch -v - 切换分支
Git checkout [分支名] - 合并冲突
第一,切换到被合并的分支上 git checkout [被合并的分支名]
第二,执行merge命令 git merge [新内容的分支名] - 解决冲突
冲突的表现

- 冲突的解决
- 编辑文件,修改文件
- git add [文件名]
- git commit (不加文件名)
6.Git的基本原理
6.1哈希
- 哈希是一个系列的加密算法,各个不同的哈希算法虽然加密强度不同,但是有以下几个共同点:
1.不管输入数据量多大,经过同一个hash算法加密,得到的加密结果长度固定
2.哈希算法确定,输入数据确定,输出数值能够保证不变
3.哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大
4.哈希算法不可逆 - Git底层采用的是SHA-1算法。
6.2git保存版本的机制
6.2.1集中式版本控制工具的文件管理机制

6.2.2 git的文件管理机制

6.2.3 git文件管理细节
- git的提交对象

- 提交对象及其父对象形成的链条

6.3git分支管理机制
6.3.1分支的创建

6.3.2分支的切换




7.GitHub
7.1 创建远程库

7.2 起别名
git remote add [别名] [地址]
7.3 推送操作
git push [远程库别名/地址] [分支]
7.4 克隆
- 完整的吧远程库下载到本地
- 创建origin远程库别名
- 初始化本地库
Git clone [地址]

7.5 添加项目成员

7.6 远程库拉取
- 先fetch

- 后merge

- 总结:
- Pull = fetch + merge
- git fetch [远程库地址别名] [远程分支名]
- git merge [远程库地址别名/远程分支名]
- 不容易产生冲突的话,可以直接pull : git pull origin master
7.7 解决冲突
- 要点:
如果不是基于GitHub远程库最新版所作的修改,不能推送,必须先拉取。
拉取下来后如果进入冲突状态,则按照“分支冲突解决”操作解决即可。
7.8 跨团队协作
- fork

7.9 SSH登录
- 进入当前用户目录
$cd ~ - 删除.ssh目录
$rm -rvf .ssh - 运行命令生成.ssh密钥目录
$ssh-keygen -t rsa -C [用户邮箱] - 进入.ssh目录查看文件列表
- 查看id_rsa.pub文件内容
$cat id_rsa.pub - 复制id_rsa.pub文件内容,登录GitHub,点击用户头像–>settings–>SSH and GPG keys
- New SSH Key
- 输入复制的密钥信息
- 回到GitHub创建远程地址别名
$git remote add origin_ssh git@github.com:fairy7/huashan.git - 推送文件进行测试




8.Idea上使用git
- 设置git路径

8.1创建本地库

8.2 加入.ignore插件,项目内部加入.gitignore文件

- 注:全局ignore方式(路径使用“/”)

8.3 添加远程库

9.Git工作流
9.1概念
- 在项目开发过程中使用git的方式
9.2分类
- 集中式工作流

- GitFlow工作流(多数)

- Forking工作流
9.3 gitflow工作流详解
- 举例

- 分支实战

10.GitLab
10.1下载安装
rpm -vif gitlab-ce-12.7.2-ce.0.el7.x86_64.rpm- 然后按照官网给的安装步骤进行:

- 可以整理成bash文件直接运行(安装前可以拍个快照)
- 走完后reboot。
10.2GitLab服务操作
- 初始化配置gitlab
gitlab-ctl reconfigure - 启动gitlab服务
gitlab-ctl start - 停止gitlab服务
gitlab-ctl stop
10.3浏览器访问
- 访问Linux服务器IP地址即可,如果想访问EXTERNAL_URL指定的域名还需要配置域名服务器或本地hosts文件。
- 初次登录时需要为gitlab的root用户设置密码。
- 注意防火墙




