1 集中式和分布式的区别
1.1 集中式
集中式VCS必须有一台电脑作为服务器,每台电脑都把代码提交到服务器上,再从服务器下载代码。如果网络出现问题或服务器宕机,系统就不能使用了。

1.2 分布式
分布式VCS没有中央服务器,每台电脑都可以保存代码版本,没有网络的时候可以先提交到本地,每台电脑也都可以作为服务器,其他电脑可以从作为服务器的电脑上克隆代码,可见分布式系统比集中式系统的安全性高很多。

2 GIT的工作流程

代码保存位置分为:
-
Remote 远程仓库,在网络中保存代码的位置
-
Repository 本地仓库,在本机上保存代码
-
Index 暂存区,在本机上临时保存代码的位置
-
Workspace 工作区,开发代码的位置
1、git clone 克隆远程资源到本地目录,git checkout作为工作目录;
2、然后在本地的克隆目录上添加或修改文件;
3、如果远程修改了,需要同步远程的内容,直接git pull就可以更新本地的文件;
4、本地在修改之后,可以通过git status 查看修改的文件。然后使用git add 添加修改的文件到缓冲区(暂存区);
5、在添加之后,可以使用git commit添加到当前的工作区;
6、在修改完成后,如果发现错误,可以撤回提交并再次修改并提交;
7、git push将本地的修改推送到远程的git服务器。
3 Git安装
在Windows上使用Git,可以从Git官网直接下载安装程序,(网速慢的同学请移步国内镜像),然后按默认选项安装即可。
注意 安装目录不要有中文
4 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 版本号 | 版本回退 |
git remote -v | 查看当前配置的远程仓库地址 |
git remote remove origin | 移除当前的远程仓库 |
git remote add origin(别名) 新的仓库地址 | 添加新的远程仓库地址 |
git remote -v | 验证新的远程仓库地址是否生效 |
git reset --soft HEAD~1 | 删除最后一个提交,但保留更改内容(交互式变基): |
git reset --hard HEAD~1 | 删除最后一个提交,并且也删除更改内容(硬重置) |
4.1 设置用户签名
4.1.1 基本用法
git config --global user.name 用户名
git config --global user.email 邮箱
4.1.2 说明 :
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git首次安装必须设置一下用户签名,否则无法提交代码。
※注意 : 这里设置用户签名和将来登录GitHub (或其他代码托管中心)的账号没有任何关系。-
4.1.3 以文件查看自己设置的签名
安装之后桌面右击,选择Git Bash Here
注意上面@前面部分,找到对应文件,如下图,找到.gitconfig文件,里面就有name和email---没找到是因为该文件属于隐藏文件,打开即可
4.1.4 以代码形式查看自己设置的签名

4.2 初始化本地库
4.2.1 基本语法
git init
在**该项目文件里面**使用这个命令是为了让该项目可以git管理
4.3 查看文件当前状态
4.3.1 基本语法
git status
4.4 添加暂存区
4.4.1 基本语法
git add 文件名
4.4 .2 使用方法
建立Gittt 文件,右击选择Git Bash Here 运行 git init得到.git文件

输入命令 vim hello.txt(文件名),随便属于几行 点击键盘 "I" 即可打字
输入完毕按 esc 键 输入wq 回车即可 跟Linux一样
执行以下命令就可以添加到暂存区
删除暂存区
git rm --cached hello.txt
4.5 提交本地库
4.5.1 基本语法
git commit -m "日志信息" 文件名
4.5.2 使用方法

4.6 Git时光机
4.6.1 查看提交记录
$ git reflog 简略
$ git log 详细
4.6.2 版本回退
$ git reset --hard HEAD^
$ git reset --hard 版本号
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
4.7 修改文件
修改hello.txt (代码为vim hello.txt)如下,保存退出
查看状态
提交暂存区,并看日志
4.8 版本回退
4.8.1 基本语法
$ git reset --hard HEAD^
$ git reset --hard 版本号
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
4.8.2 使用方法,回退上一个版本

4.9 分支
4.9.1 概述
分支相当于副本,一个分支就是一个单独的副本,分支的底层就是指针的引用。
在开发中,一个分支给用户使用,一个分支给程序员开发。
4.9.2 分支的好处
同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
4.9.3 分支的操作
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
4.9.4 使用方式
创建并查看分支,切换分支
在新创建的分支下修改文件,并提交
切换master分支,发现hello.txt 没有和one分支添加的内容合并
进行合并,发现one分支添加的内容出现在了master分支里面
4.9.5 冲突合并
合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git无法替我们决定使用哪一个。必须人为决定新代码内容。
解决办法就是合并之后,分支后面会有 master|MERGING 标识,手动打开文件进行删留,解决好之后提交就阔以了
4.10 远程仓库
4.10.1 添加远程仓库
$ git remote add origin 远程仓库地址
4.10.2 从远程仓库克隆
$ git clone 远程仓库地址
4.10.3从远程仓库同步最新代码
$ git pull
4.10.4 将代码推送到远程仓库
$ git push
5 Github操作
5.1 创建远程库
注册之后,如下操作
5.2 远程仓库操作
命令名称 | 作用 |
---|---|
git remote -v | 查看当前所有远程地址别名 |
git remote add 别名 远程地址 | 起别名 |
git push 别名 分支 | 推送本地分支上的内容到远程仓库 |
git clone 远程地址 | 将远程仓库的内容克隆到本地- |
git pull 远程库地址别名 远程分支名 | 将远程仓库对于分支最新内容拉下来后与-当前本地分支直接合并- |
git remote remove 别名 | 删除别名 |
5.2.1 创建远程仓库别名
创建库之后界面可知远程地址
创建别名并查看
5.2.2 推送本地分支到远程仓库
git config --global --unset credential.helper
git-credential-manager configure

5.2.3 远程库拉到本地库

拉取到本地库之后,可用cat hello.txt 查看文件

5.2.4 克隆远程仓库到本地
5.2.5 ssh免密登录
需要添加key
开始获取key
复制公钥
表示添加成功,使用的时候就是把创库地址前面的 http 改为git
作用就是省去了push 登录环节
6 idea配合Git
6.1 配置GIT
1、 File -> Settings -> Version Control -> Git 配置Git的目录

6.1.1 配置Git忽略文件
与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽IDE工具之间的差异。
文件里面输入
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
hs_err_pid*
.classpath
.project
.settings
target
.idea
*.iml
.gitconfig引用这个文件
6.2 初始化本地库
他会自己选择本项目,点击欧克即可
这时候项目文件会出现不同的颜色
-
红色 没有加入到git暂存区
-
绿色 加入暂存区,没有提交
-
蓝色 做了修改,没有提交
-
白色 完成提交,是最新的
6.3 添加暂存区并提交
将pom文件加入暂存区,未提交
将整个项目提交到暂存区,并写了一个类
可写可不写,然后点击提交(commit)
6.4 切换版本
修改了,左边git_text 类变蓝了
加入暂存区,提交本地库
6.4.1 查看版本信息
有黄色( head )和绿色(分支)图标(指针)
6.4.2 切换版本
6.5 创建分支&切换
也可以点右下角有个master,里面也可创建(切换分支也是这,点击checkout就是切换)
6.6 合并分支
6.6.1 正常合并,无冲突

提交,切换到master分支
点击master,选择onebranch,点击merge--- 进行合并
6.6.2 冲突合并
进入onebranch分支修改,提交
进入master分支修改,提交
都提交之后
在master分支上合并
原因暂存区加入了这个,原因就是前面忽略文件没做,解决办法就是重新开始
重新创建项目之后
合并之后,一个是master分支,一个是onebranch分支
6.7 设置GitHub账号


登录GitHub点击setting 找到Developer settings
6.8 分享项目到GitHub
第一种
第二种
成功之后在GitHub官网刷新就可以看见
6.9 push推送本地库到远程库

https 推送
这种上转直接点击git->push
由于要考虑网速,所以用ssh
ssh 推送


把ssh地址放入url中
注意: push是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,push 的操作是会被拒绝的。也就是说,要想push成功,一定要保证本地库的版本要比远程库的版本高!因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地代码的区别!如果本地的代码版本已经落后,切记要先pull 拉取一下远程库的代码,将本地代码更新到最新以后,然后再修改,提交,推送!e
6.10 拉取远程库代码合并本地库
在GitHub网站中加入一行
idea中pull
6.11 clone克隆远程库到本地
需要删除本地项目,克隆是无到有
做完这些点击clone
6.12 gitee码云-账号注册登录&创建远程库
和github一样
6.13 idea集成码云
没有下载一个,操作跟github一样
6.14 导入gihub

6 GitLab
学习视频
https://www.bilibili.com/video/BV1vy4y1s7k6/?p=41\&vd_source=13cb4355a2724100e26f8fedb59caaa8
gitlab网站:(也有安装教程)