Git和GitHub学习笔记
git
- git介绍 分布式版本控制工具 VS 集中式版本控制工具
- git安装 基于官网发布的最新版本2.31.1 安装讲解
- git命令 基于开发案例 详细讲解了git的常用命令
- git分支 分支特性 分支创建 分支转换 分支合并 代码合并冲突解决
- idea集成git
GitHub
- 创建远程仓库
- 代码推送push
- 代码拉取 pull
- 代码克隆 clone
- SSH免密登录
- idea集成Github
Gitee码云
码云创建远程仓库
idea集成Gitee码云
码云连接GitHub进行代码的复制和迁移
GitLab
GitLab服务器的搭建和部署
idea集成GitLab
第1章 Git概述
Git官网:https://git-scm.com/
Git是一个分布式版本控制系统
1.1 版本控制
记录文件内容变化,记录文件修改历史,查看历史版本
1.2 为什么需要版本控制
个人开发过渡到团队协作
1.3 版本控制工具
集中式版本控制工具
CVS、SVN(Subversion)、VSS
有一个单一的集中管理的服务器,保存所有文件的修订版本,通过客户端连接到服务器
如果服务器发生故障,无法工作
分布式版本控制工具
Git、Mercurial、Bazaar、Darcs
客户端把代码仓库完整的拉到本地库
- 服务器断网的情况下也可以进行开发(版本控制在本地进行)
- 每个客户端保存的都是整个完整的项目
此处还有一个远程库
1.4 Git简史
1.5 Git工作机制
本地库再通过git push推送到远程库
1.6 Git和代码托管中心(远程库)
基于网络服务器的远程代码仓库
- 局域网:GitLab
- 互联网
- GitHub(外网)
- Gitee码云(国内)
第2章 Git安装下载
各版本下载地址:https://npm.taobao.org/mirrors/git-for-windows/
测试,右键Git Bash Here,输入git --version
2.1 Git常用命令
命令 | 作用 |
---|---|
git config --global user.name 用户名 | 设置用户名 |
git config --global user.email 邮箱 | 设置邮箱 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区 |
git commit -m "日志信息" 文件名 | 提交到本地库 |
git reflog | 查看历史记录 |
git reset --hard 版本号 | 版本穿梭 |
2.2 设置用户签名
全局范围的签名,区分不同操作者身份,是哪个用户提交的代码,Git首次安装必须设置一下用户签名,否则无法提交代码
注意:这个用户签名与其他(GitHub)的账号无关
WGG@LAPTOP-7S84JVQ1 MINGW64 ~/Desktop
$ git config --global user.name wgg
WGG@LAPTOP-7S84JVQ1 MINGW64 ~/Desktop
$ git config --global user.email zhishuchen@qq.com
2.3 初始化本地库
初始化用于获取目录管理权限
在目录中右键执行git init
2.4 查看本地库状态
git status查看
新建一个文件,查看状态
2.5 添加到暂存区
LF行尾换行方式替换CRLF方式(Linux系统中是LF,Windows中是CRLF,安装Git时默认勾选自动转换了)
2.6 提交本地库
简写版本号只取前7位
2.7 修改文件
Head指针指向第二个版本
本地始终只有一个文件
2.8 版本穿梭(切换版本)
往前往后都可以
指针所在分支
具体的版本号
版本切换的原理就是移动的head指针
第3章 Git分支
用户使用的分支,程序员进行开发的分支
3.1 分支
同时推进多个任务,就可以为每个任务创建单独的分支,把自己的工作从开发主线上分离出来,开发时不会影响主线分支的运行。可以理解为分支就是一个单独的副本(底层就是指针的引用)
3.2 分支的好处
同时并行推进多个功能开发,提高开发效率
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响,失败的分支删除重新开始即可。
3.3 分支的操作
命令 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
指针进行操作
合并分支
需要先切换到master分支才能进行合并
冲突
在master分支修改hello.txt倒数第二行并提交到本地库
brone分支中修改hello.txt中倒数第一行
在master分支进行合并
手动修改hello.txt
提交到本地库,不带文件名
brone分支中的数据并不会受到影响
创建分支和切换分支本质上都是head指针,head指向哪个分支就在哪个分支上
第4章 Git团队协作机制
4.1 团队内协作
- 岳不群创建华山剑法推送到远程库
- 令狐冲学习华山剑法并加了两招,推送到远程库(需要加入团队:拜师)
- 岳不群更新华山剑法
4.2 跨团队协作
- 东方不败从岳不群的远程库fork(叉子:复制)华山剑法到自己的远程库
- 东方不败clone到本地,改造成僻邪剑法
- 推送到远程库
- 给岳不群发一个拉取剑法的请求
- 岳不群进行审核
- 审核通过后合并到自己的远程库
- 岳不群和令狐冲都可以pull到本地学习僻邪剑法
第5章 GitHub操作
5.1 创建远程库
GitHub:https://github.com/
远程库名最好和本地库名相同
库名,公有库
链接太长了可以给远程库起别名
5.2 推送本地分支到远程库
也可以使用别名代替链接(不成功,不知道为啥),可能需要在凭据管理器中删除凭据
git push git-demo master
在远程库中就可以看到hello.txt(成功的话)
5.3 拉取远程库到本地库
本地库和远程库不同步了
更新本地库,拉取后会自动提交本地库
(用别名试了好多次,又用链接试了好多次)
5.4 克隆远程库到本地
复制仓库地址
公共库克隆不需要登录,需要一个空的文件夹
克隆后文件夹中会有.git文件夹,克隆会1、拉取代码。2、初始化本地库。3、创建别名(origin)
5.5 团队内协作
令狐冲克隆到本地后修改了代码
想push到远程库,此时会报没有权限(Permission denied to...)
少了一个认师的动作(需要加入岳不群的团队)
在岳不群的账号中邀请令狐冲加入团队
复制邀请函发送给令狐冲
https://github.com/zhishuchen/git-demo/invitations
在令狐冲的账号访问该链接,选择接受邀请还是婉拒
令狐冲加入项目团队后就可以push代码到远程库了
岳不群再pull代码下来
5.6 跨团队协作
东方不败访问岳不群的远程库
https://github.com/zhishuchen/git-demo.git
点击fork到自己的账号
修改代码(在线修改或clone到本地库)
修改好后,新建一个pull request
填写信息
在岳不群的账号就可以看到pull request
查看代码
审核后就可以进行合并
5.7 SSH免密登录
HTTPS协议和SSH协议
生成SSH的公钥和密钥
在此目录下右键git bash here
输入命令生成公钥和私钥
ssh-keygen #生成公钥和私钥的命令
-t rsa #指定rsa加密算法来生成
-C #描述
三次回车
在当前目录生成了.ssh文件
复制公钥
添加SSH公钥后进行测试免密登录,拉取推送代码无需登录
第6章 IDEA集成Git
6.1 配置Git忽略文件
eclipse和idea项目会生成特定文件.idea等
我们只想要pom.xml
和代码
在C:\Users\666
目录下新建以.ignore
结尾的文件
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see
http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
.classpath
.project
.settings
target
.idea
*.iml
在.gitconfig
中使其生效
使用正斜线
idea中准备Git
6.2 在idea中使用Git
红色文件表示未被追踪,还没有被添加到暂存区
右键文件添加到暂存区
绿色文件表示已经添加到暂存区,还未提交本地库
写了很多代码,可以直接在项目名上右键添加到暂存区,可能会弹出提示框是否强制添加忽略文件,点击取消
提交到本地库
不同的idea版本界面不同
提交后变成了这种颜色
6.3 切换版本
修改代码,文件变成了蓝色,表示该文件已被追踪,发生了修改
可以直接提交本地库
右下角git,黄色指针表示当前界面,绿色指针表示当前分支
版本上右键进行切换
6.4 创建分支
方法一:右键项目
方法二:右下角
右下角表示当前分支,可进行切换分支
6.5 合并分支
修改hot-fix分支代码,提交本地库,切换到master分支
进行合并
6.6 代码冲突
修改hot-fix分支代码,提交到本地库
修改master分支提交本地库
进行合并发生冲突,需要手动合并
左边master,中间未修改前,右边hot-fix
第7章 IDEA集成Github
使用口令登录GitHub账户
在GitHub账户生成口令,起名字,勾选所有权限,复制口令到上述Token栏
7.1 分享项目到GitHub(创建远程库)
7.2 推送代码到远程库
修改代码后,提交到本地库,push到远程库
默认是使用HTTPS协议,容易受到网络影响,建议使用SSH协议
复制SSH链接
push操作中本地库的版本要比远程库的版本高,否则push会被拒绝,所以程序员在动手修改本地代码之前,会先检查远程库和本地库的区别,如果本地库代码已经落后,就需要先pull拉取远程库的代码,更新到最新,再修改、提交、推送
7.3 拉取远程库的代码到本地
本地库的代码不是最新的了就需要pull
如果远程库代码和本地库代码不一致,会自动合并,合并失败的话需要手动解决冲突问题
7.4 克隆远程库到本地
输入远程库的SSH链接
第8章 码云
8.1 码云简介
Gitee是国内的一个代码托管中心,和GitHub一样,访问较好
Gitee:https://gitee.com/
8.2 创建仓库
8.3 IDEA集成码云
安装插件
登录Gitee账户
SSH免密登录和GitHub设置一样
8.4 push到Gitee远程库
链接填gitee上创建的远程
也可以直接创建远程库
在新建仓库中也可以复制GitHub项目到码云中
第9章 自建代码托管平台GitLab
GitLab简介
GitLab安装