Git

104 阅读12分钟

Git介绍

Git是免费的、开源的一个分布式版本控制系统,可以有效地跟踪文件地变化、协作开发、管理项目代码,并支持多人协同开发。

  • 版本控制:一种记录文件内容变化,追踪文件修改历史,并协助多人协作开发地系统。主要用于管理文本文件的变化,并保留文件的历史记录。
  • 集中式版本控制:所有的版本控制的操作和数据都存储在中央服务器上,用户通过与中央服务器进行交互,进行代码更新、提交和版本控制操作。集中式版本控制存在单点故障和依赖网络问题。
  • 分布式版本控制:每个开发者都拥有一个完整的代码仓库副本,并且完整的版本历史记录。每个开发者可以在本地进行代码的提交、修改、分支操作,而不需要始终依赖于中央服务器。所以不存在单点故障和依赖网络等问题。

Git工作机制

  • 工作区:用来写代码的地方,可以将工作区的文件添加到暂存区,工作区的代码可以增删。
  • 暂存区:临时存储代码的地方,可以将临时区的文件提交到本地库,变成一个历史版本,暂存区的代码可以增删。
  • 本地库:存储临时版本代码的地方,本地库中的代码无法删除,只能拿到一个版本代码,进行修改后增加一个新的版本。本地库中的代码可以push到远程库。
  • 远程库:位于网络上的一个中央仓库,可以提供多个开发者共享和协作。远程仓库托管再云端的代码托管服务(GitHub、GitLab)等,开发者可以通过远程库实现代码的共享、协同开发和版本控制。

Git工作机制.png

Git的下载安装

Git官网:git-scm.com/

Git下载地址:git-scm.com/downloads

Git安装验证:git -version

Git团队协作机制

团队内协作

团队内协作.png

跨团队协作

跨团队协作.png

Git的使用

设置个人签名

设置个人用户信息

注意:签名的作用是区分不同操作者身份,用户签名在每一个版本的提交信息中可以看到,以此来确认本次提交者,Git首次安装必须设置用户签名,否则无法提交代码。

# 设置用户签名
git config --global user.name wenxuan

# 设置用户邮箱
git config --global user.email wenxuan@qq.com

# 查看配置信息
git config --list

配置SSH免密登录

Git支持使用SSH协议和HTTPS协议进行代码仓库的访问:

  • SSH免密登录:需要在本地生成SSH公钥和私钥,并将公钥添加到GitHub账号的SSH keys中。SSH免密登录较为安全,因为通信过程中会使用公钥和私钥进行加密和认证。SSH免密登录无序每次输入用户名和密码,提供了便利的操作体验。
  • HTTPS登录:使用HTTPS协议进行代码仓库的访问需要在每次推送或拉取时输入GitHub的用户名和密码。HTTPS登录需要输入用户名和密码,相对来说安全性较低。HTTPS登录较为简单,无需生成和配置SSH密钥。

本地生成SSH公钥和私钥,并配置到GitHub账号中:

  1. 本地生成 .ssh 秘钥目录,找到 C:\用户\文轩 目录,然后在Git命令行中运行命令,后面按三次enter键即可,就能生成.ssh目录。
ssh-keygen -t rsa -C xxx@qq.com

注意:

  • 用户目录也就是Users目录
  • 文轩目录这里只是我的电脑目录,个人电脑按照自己的电脑设置的用户名选择
  1. 复制 .ssh 目录下的 id_rsa.pub 文件内容,登录 GitHub(Gitee),点击用户头像 ---> Settings ---> SSH and GPG keys

  2. 验证SSH是否配置成功,在git命令行上输入以下指令回车,然后输入yes,出现成功之后表示SSH配置成功。

# Github验证是否成功
ssh -T git@github.com

# Gitee验证是否成功
ssh -T git@gitee.com

注意:如果命令执行报错,connect to host github.com port 22: Connection refused,说明SSH通过22端口号连接被拒绝,则可以尝试修改配置改用443端口号尝试。

新建文件 C:\Users\文轩.ssh\config ,编辑config文件,添加以下内容

Host github.com
  Hostname ssh.github.com
  Port 443

管理员建立本地仓库

  1. 在gitee.com或者github.com中创建一个仓库
  2. 将远程仓库克隆到本地
git clone git@gitee.com:xx.git
  1. 将文件放到仓库目录下
  2. 将工作区文件添加到暂存区
git add .
  1. 将暂存区文件提交到本地库
git commit -m '初始化'
  1. 将本地仓库与远程仓库建立关系
git remote add origin git@gitee.com:xxx.git
  1. 拉取远程仓库的文件
git pull --rebase origin master
  1. 将本地仓库文件推送到远程仓库,并关联分支
# 推送到指定分支
git push -u origin "master"

组员建立本地仓库

  1. 创建一个存放仓库的目录
  2. 初始化本地仓库
git init
  1. 将文件放到仓库目录下
  2. 将工作区文件添加到暂存区
git add .
  1. 将暂存区文件提交到本地库
git commit -m '初始化'
  1. 将本地仓库与远程仓库建立关系
git remote add origin git@gitee.com:xxx.git
  1. 拉取远程仓库的文件
git pull --rebase origin master
  1. 将本地仓库文件推送到远程仓库,并关联分支
# 推送到指定分支
git push -u origin "master"

Git相关指令

初始化本地仓库

指令描述
git init初始化本地库
git clone 远程仓库地址从远程仓库进行克隆
git clone 远程仓库地址 重命名从远程仓库进行克隆并重命名项目
git clone -b 分支名 远程仓库地址从远程仓库指定分支进行克隆

查看本地仓库状态

指令描述
git status查看本地仓库状态

添加暂存区和提交操作

指令描述
git add 文件名将指定文件添加到暂存区
git add *.class将所有class文件添加到暂存区
git add .将所有文件添加到暂存区
git rm --cached 文件名将指定文件从暂存区中移除
git rm -r --cached .将所有文件从暂存区中移除
git commit -m 提交信息将暂存区中文件提交到本地库,并设置提交信息

拉取和推送操作

注意:push操作前需要先进行pull操作,先将最新数据拉取下来,如果直接push会将远程仓库中的新数据覆盖(也就是会将其他开发者提交的代码覆盖掉)。

指令描述
git pull将对应的远程地址对应分支最新数据拉取到本地
git pull 远程地址别名 远程分支名将指定远程地址和远程分支最新数据拉取到本地
git push推送本地分支内容到远程仓库
git push -u 远程地址别名 远程分支名推送本地分支的内容到指定远程仓库和分支上
git push -u 远程仓库地址别名 远程分支名将本地分支推送到远程仓库时同时建立本地分支与远程分支的关联关系

分支操作

指令描述
git branch 分支名创建新的分支
git branch -v列出本地库所有分支
git branch -r列出远程库所有分支
git branch -a列出所有本地分支和远程分支
git branch -d 分支名删除分支
git checkout 分支名切换分支
git checkout -b 分支名创建新的分支并切换到新的分支
git merge 分支名将指定分支合并到当前分支
git branch -d 分支名删除分支

拉取最新数据

指令描述
git fetch --all拉取远程仓库所有的最新数据
git fetch --prune拉取远程仓库新的分支,同时删除本地中已经不存在远程库中的分支
git fetch --tags拉取远程仓库新的标签

建立远程仓库关联

指令描述
git remote -v查看当前所有远程地址和对应的别名
git remote add 别名 远程地址给指定远程仓库地址起别名
git remote remove 别名删除指定别名

标签操作

指令描述
git tag查看所有标签
git tag 别名 版本号给指定提交操作添加一个标签
git tag -d 别名删除指定标签

查看版本数据

指令描述
git log查看版本详细信息
git log --oneline查看版本简要信息
git reflog查看历史记录
git reset 版本号穿梭到指定版本号,且形成一个新的提交
git reset -hard 版本号穿梭到指定版本号,但不形成一个新的提交

IDEA集成Git

初始化本地库

方式一:创建项目时初始化本地库

image.png

方式二:创建项目后初始化本地库

image.png

Git忽略文件

Git忽略文件是一个用来指定不希望Git进行版本控制的文件或文件夹的列表文件。通常情况下,会将一些无需进行版本控制的文件或文件夹列在忽略文件中,这样可以避免被误添加到版本库中。

配置Git全局忽略文件

  1. 编写忽略规则文件git.ignore
# 忽略所有的class文件
*.class
# 忽略test.txt文件
test.txt
  1. 引用忽略配置文件

编辑C:\Users\文轩.gitconfig文件,在.gitconfig文件中引用忽略配置文件。

[core]
	excludesfile = C:/Users/文轩/git.ignore
[user]
	name = wenxuan
	email = xxx.@qq.com

配置项目忽略文件

项目中如何添加配置忽略文件:在项目下创建.gitignore文件,在文件中指定忽略文件即可。

忽略文件常见配置

# 忽略根目录下的text.txt文件
/text.txt

# 忽略根目录下的test目录下的text.txt文件
/test/text.txt

# 忽略所有的text.txt文件
text.txt

# 忽略test目录下的所有文件和目录
test/

# 忽略所有的test目录和文件
test

# 忽略所有以test开头的目录和文件
test*

# 忽略所有md文件
*.md

# 不忽略README.md文件
!README.md

忽略以前提交的文件

  1. 在.gitignore文件中忽略需要忽略的文件
.env
  1. 移除Git跟踪该文件
# 移除env文件
git rm --cached .env

# 移除所有文件
git rm -r --cached .
  1. 提交更改忽略文件
git commit -m '提交更改忽略文件'
  1. 将提交的忽略文件推送到远程仓库
git push

IDEA整合GitHub

IDEA登录GitHub账号:File ---> Settings ----> Version Control ---> GitHub ---> 点击+号

注意:IDEA登录GitHub账号需要关闭代理

将项目推送到GitHub形成远程仓库:

  • 如果当前项目没有创建成本地Git仓库:VCS ---> Share Project on GitHub
  • 如果当前项目创建成本地Git仓库:Git ---> GitHub ---> Share Project on GitHub

拉取数据(比如远程仓库的分支数据):Git ---> Fetch

IDEA整合Gitee

IDEA登录GitHub账号:File ---> Settings ----> Version Control ---> Gitee ---> 点击+号

将项目推送到GitHub形成远程仓库:

  • 如果当前项目没有创建成本地Git仓库:VCS ---> Share Project on Gitee
  • 如果当前项目创建成本地Git仓库:Git ---> GitHub ---> Share Project on Gitee

拉取数据(比如远程仓库的分支数据):Git ---> Fetch

GitHub操作

GitHub官网:github.com/

邀请团队内协作

  1. 管理员在GitHub上发送邀请其它GitHub账号

image.png

  1. 管理员复制邀请码,发送给成员
  2. 成员复制邀请码在GitHub上打开,并同意成为成员

邀请跨团队协作

  1. 跨团队成员先将项目Fork到自己的GitHub本地库中
  2. 跨团队成员可以填写描述信息并点击左下角绿色按钮提交
  3. 跨团队成员发送pull request(pull请求)
  4. 管理员可以点击 Merge pull reque 合并代码

Git问题

IDEA登录GitHub账号报错

报错信息:Invalid authentication data. Connection refused: no further information

问题产生原因:电脑使用代理,导致连接被拒绝。

解决方案:将电脑代理关闭即可。

IDEA登录Gitee报错

IDEA登录Gitee,使用邮箱和密码登录时报错:Incorrect credentials: 401 Unauthorized, Please remove invalid credentials manually.

问题产生原因:因为Gitee账号没有绑定邮箱,导致无法使用邮箱登录。

解决方案:登录Gitee进行邮箱绑定

SSH下载push失败

报错信息:git SSL certificate problem: unable to get local issuer certificate

问题产生原因:没有配置信任的服务器HTTPS验证,默认CURL被设为不信任任何CAS,也就是说不信任任何服务器验证。

解决方案:在git命令行中执行以下指令

git config --global http.sslVerify false

这条指令表示设置全局配置,即对所有的仓库都生效,将http.sslVerify配置项设置为false,禁用Git在进行远程仓库的HTTP通信时对SSL证书的验证,即不再验证SSL证书的有效性。

Git本地仓库上传到远程仓库后目录不能打开

报错信息:Git本地仓库上传到远程仓库后目录不能打开

问题产生原因:上传的目录中含有.git文件,被识别为子模块。

解决方案:

  1. git rm --cached 子文件夹路径
  2. git add 子文件夹路径/
  3. git commit -m '提交信息'
  4. git push

Git pull推送失败

报错信息:Couldn't find remote ref master

问题产生原因:

  1. 远程仓库为空
  2. 本地GIT的配置错误或未配置
  3. 远程仓库配置仓库信息有误

解决方案:

  1. 将本地仓库文件推送到远程
git add .
git commit -m '初始化'
git push -u origin master
  1. 设置Git本地配置
git config user.name/git config --global user.name wenxuan
git config user.email/git config --gloabl user.email xxx@163.com
  1. 删除本地仓库配置,并且设置相关地址
# 查看当前所有远程地址和对应的别名
git remote -v

# 删除指定远程仓库别名
git remote rm origin

# 删除指定远程仓库别名
git remote add origin XXXX

Git Push failed to push some refs

报错信息:failed to push some refs to

报错原因:Git远程库版本和本地库版本不一致,导致推送代码失败

解决办法:将远程仓库的代码拉取到本地,然后重新add、commit、push

git pull --rebase origin master