Git版本控制-文件上传-阿里云OSS重点总结

Git 版本控制 · 文件上传 · 阿里云 OSS · 重点总结

一、Git 概述

1.1 版本控制

项目 说明
定义 对文件的修改历史进行记录和管理,方便随时恢复、对比版本
分类 集中式(SVN/CVS/VSS)、分布式(Git)

1.2 Git 核心功能

功能 说明
代码回溯 记录每次提交日志,方便回退到历史版本
版本切换 一个项目可有多个分支,自由切换
多人协作 团队共同开发,每人负责一部分代码
远程备份 通过远程仓库管理文件,本地丢失可从远程恢复

1.3 仓库类型

仓库 位置 说明
本地仓库 开发人员自己电脑 编辑、提交代码
远程仓库 远程服务器 团队共享,实现协作

1.4 三大核心操作

操作 命令 说明
commit git commit -m "描述" 将本地文件和版本信息保存到本地仓库
push git push origin 分支名 将本地仓库推送到远程仓库
pull git pull origin 分支名 将远程仓库拉取到本地仓库

二、Git 代码托管服务

2.1 常用代码托管平台

平台 网址 特点
GitHub github.com 全球最大开源平台
Gitee(码云) gitee.com 国内首选,速度快
GitLab about.gitlab.com 开源,可自建私有平台
BitBucket bitbucket.org 收费/免费账户

2.2 创建远程仓库流程(以 Gitee 为例)

步骤 操作
① 注册账号 gitee.com/signup
② 登录 gitee.com/login
③ 创建仓库 仓库名称必填;选择开源/私有
④ 邀请成员 仓库管理 → 仓库成员管理(被邀请人必须为 Gitee 注册用户)

开源 vs 私有:开源所有人可见;私有只有仓库成员可见。


三、Git 全局配置

3.1 首次使用必做配置

命令 说明
git config --global user.name "用户名" 设置全局用户名
git config --global user.email "邮箱" 设置全局邮箱
git config --list 查看所有配置信息
1
2
3
git config --global user.name "itxg"
git config --global user.email "hello@itxg.cn"
git config --list

⚠️ 必须先配置:每次提交都会使用该用户信息记录到日志。


四、Git 工作区域(⭐ 核心概念)

4.1 三大区域

区域 位置 说明
工作区 包含 .git 文件夹的目录 存放开发的代码(我们写代码的地方)
暂存区 .git/index 文件 临时保存修改的文件,等待提交
版本库 .git 隐藏文件夹 永久保存配置、日志、版本信息

4.2 文件状态流转

状态 说明
untracked(未跟踪) 新文件还未被 Git 管理
tracked(已跟踪) 已被 Git 管理,分三种子状态
└ Unmodified 未修改
└ Modified 已修改但未暂存
└ Staged 已加入暂存区
1
工作区文件 ──[ git add ]──> 暂存区 ──[ git commit ]──> 本地版本库 ──[ git push ]──> 远程仓库

五、Git 本地仓库命令(⭐ 重点)

5.1 命令速查表

命令 作用
git init 在当前目录初始化一个本地仓库
git status 查看文件状态
git add 文件名 将文件加入暂存区git add . 全部加入)
git reset 文件名 取消暂存
git reset --hard 版本号 切换到指定版本(回退)
git commit -m "描述" 将暂存区文件提交到版本库
git log 查看提交日志

5.2 标准开发流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1. 初始化本地仓库(在项目目录下右键 Git Bash Here)
git init

# 2. 修改文件后,查看状态
git status

# 3. 加入暂存区(推荐 . 全部加入)
git add .

# 4. 提交到本地版本库(-m 必填)
git commit -m "新增登录功能"

# 5. 查看提交日志
git log

# 6. 误操作时,回退到指定版本
git reset --hard 8a5d9c1b

六、Git 远程仓库命令(⭐ 重点)

6.1 命令速查表

命令 作用
git remote 查看远程仓库(默认简称 origin
git remote -v 查看远程仓库详细信息
git remote add 简称 远程仓库地址 添加远程仓库
git clone 远程仓库地址 克隆远程仓库到本地
git push 简称 分支名 推送本地到远程
git pull 简称 分支名 拉取远程到本地(自动合并)

6.2 首次推送完整流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1. 远程仓库已创建(在 Gitee 上)

# 2. 本地初始化仓库
git init

# 3. 添加文件并提交
git add .
git commit -m "首次提交"

# 4. ⚠️ 第一次推送需要建立连接
git remote add origin https://gitee.com/xxx/repo.git

# 5. 推送(首次需输入 Gitee 用户名密码,会保存到 Windows 凭据管理器)
git push -u origin master

注意事项

  • 密码输入错误 → 在 Windows 凭据管理器中删除后重新输入
  • 本地仓库非克隆而来,首次拉取报 refusing to merge unrelated histories → 加 --allow-unrelated-histories 参数

七、Git 分支操作(⭐ 重点)

7.1 分支命令速查

命令 作用
git branch 列出本地所有分支
git branch -r 列出远程所有分支
git branch -a 列出所有分支(本地+远程)
git branch 分支名 创建新分支
git checkout 分支名 切换分支
git checkout -b 分支名 创建并切换到新分支
git push 简称 分支名 将分支推送到远程
git merge 分支名 将指定分支合并到当前分支
git branch -d 分支名 删除分支

7.2 分支操作示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 默认分支:master(用 git init 创建仓库时自动生成)

# 1. 查看分支
git branch # * master ← 当前分支前有星号
git branch -a # 查看本地+远程所有分支

# 2. 创建并切换到新分支
git branch dev # 创建 dev 分支
git checkout dev # 切换到 dev 分支
# 或一步到位:
git checkout -b dev

# 3. 在 dev 分支开发完成,推送到远程
git push origin dev

# 4. 切回 master,合并 dev 分支
git checkout master
git merge dev # 注意:是把 dev 合并到当前分支(master)

# 5. 删除已合并的分支
git branch -d dev

⚠️ 合并方向要看清楚:在哪个分支执行 git merge X,就是把 X 合并到当前分支


八、Git 标签操作

8.1 标签命令速查

命令 作用
git tag 查看所有标签
git tag 标签名 创建标签(在当前提交点)
git push 简称 标签名 推送标签到远程
git checkout -b 分支名 标签名 检出标签(创建一个分支指向标签)
1
2
3
4
5
6
# 创建版本标签
git tag v1.0
git push origin v1.0 # 推送到远程

# 从某个标签创建新分支
git checkout -b release-v1.0 v1.0

使用场景:标记发布版本(v1.0、v1.2 等)。


九、解决冲突

项目 说明
产生原因 多人同时修改同一个文件的同一处代码,再 push/pull 时产生冲突
解决方法 手动打开冲突文件,删除 <<<<<=====>>>>> 标记,保留正确代码后重新 add + commit + push

十、.gitignore 忽略文件

10.1 作用

指定 Git 不需要管理的文件(如编译产物、IDE 配置、日志),不会被提交到仓库。

10.2 标准 .gitignore 内容(Java 项目)

1
2
3
4
5
6
7
8
9
10
11
12
13
.git
logs
target/
*.class

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### macOS ###
.DS_Store
注意事项 说明
文件名固定 必须叫 .gitignore,不能改名
通配符 *.class 忽略所有 .class 文件;target/ 忽略 target 目录
创建时机 推荐新建仓库时就创建(Gitee 创建仓库时可勾选生成)

十一、IDEA 中使用 Git

11.1 配置 Git

IDEA 集成的 Git 本质还是调用本地安装的 git.exe,需要先安装 Git。

配置 路径
Settings → Version Control → Git 指定 git.exe 路径(默认 C:\Program Files\Git

11.2 IDEA 操作 = 命令行命令对照表

IDEA 操作 等价命令
VCS → Import into Version Control → Create Git Repository git init
Get from Version Control git clone
右键 → Git → Add git add
右键 → Git → Commit File git commit
工具栏 ✓ Commit and Push git commit + git push
工具栏 ↓ Update Project git pull
状态栏 master → Git Branches git branch 系列
Branches → New Branch git branch 名
Branches → Checkout git checkout
Branches → Merge into Current git merge

常用快捷按钮:IDEA 顶部工具栏的 ✓(提交+推送)、↓(拉取)按钮覆盖 90% 日常操作。


十二、文件上传(前后端实现)

12.1 概念

浏览器把文件传到服务器,服务器保存到本地或云端。

12.2 前端三要素(⭐ 必备)

要素 要求
① 请求方式 必须是 POST 或 PUT(GET 不行)
② 表单 enctype multipart/form-data
③ 表单项 必须有 <input type="file"> 文件上传组件
1
2
3
4
5
6
7
<!-- 文件上传表单完整示例 -->
<form action="/upload" method="POST" enctype="multipart/form-data">
用户名:<input type="text" name="username">
年龄:<input type="text" name="age">
头像:<input type="file" name="image"> <!-- 关键 -->
<input type="submit" value="提交">
</form>

12.3 后端 Controller 三要素

要素 要求
① 形参类型 必须是 MultipartFile
② 形参名 必须与前端表单 name 属性一致(或加 @RequestParam
③ 引入依赖 spring-boot-starter-web(已包含 MultipartFile 支持)

12.4 MultipartFile 常用 API

方法 作用
getOriginalFilename() 获取原始文件名(如 照片.jpg
getInputStream() 获取文件输入流(用于读取/写入文件)
getSize() 获取文件大小(字节)
getContentType() 获取文件 MIME 类型
transferTo(File dest) 直接保存到指定路径

12.5 本地保存文件完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@RestController
public class UploadController {

@PostMapping("/upload")
public Result upload(String username, Integer age,
MultipartFile image) throws IOException {

// 获取原始文件名
String originalFilename = image.getOriginalFilename();

// 避免文件名重复 → UUID + 原扩展名
String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
String newFileName = UUID.randomUUID().toString() + extension;

// 保存到指定路径
image.transferTo(new File("D:/uploads/" + newFileName));

return Result.success();
}
}

12.6 配置文件大小限制

1
2
3
4
5
6
# application.yml
spring:
servlet:
multipart:
max-file-size: 10MB # 单个文件最大
max-request-size: 100MB # 整个请求最大(默认 10MB)

十三、阿里云 OSS(对象存储服务)

13.1 概念

项目 说明
OSS Object Storage Service,阿里云提供的有偿对象存储服务
使用场景 用户头像、商品图片、视频等静态资源不存数据库,直接上传到 OSS
优势 高可用、可靠、无需自己搭建服务器

13.2 使用步骤

步骤 操作
① 开通服务 阿里云官网搜索 “OSS 对象存储” 并开通
② 创建 Bucket 控制台 → OSS → 创建 Bucket(存储空间)
③ 获取 AccessKey 创建 AccessKeyId 和 AccessKeySecret
④ 引入 SDK pom 引入 aliyun-sdk-oss 依赖
⑤ 配置参数 application.yml 配置 endpoint、密钥、bucket 名
⑥ 编写工具类 创建 OSSClient → 调用 putObject 上传

13.3 引入 SDK

1
2
3
4
5
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.1</version>
</dependency>

13.4 配置文件

1
2
3
4
5
6
7
# application.yml
aliyun:
oss:
endpoint: https://oss-cn-shanghai.aliyuncs.com
accessKeyId: 你的AccessKeyId
accessKeySecret: 你的AccessKeySecret
bucketName: web-framework01
1
2
3
4
5
6
7
8
9
10
// 配置类(@ConfigurationProperties 读取配置)
@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliOSSProperties {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
}

13.5 OSS 上传工具类完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@Component
public class AliOSSUtils {

@Autowired
private AliOSSProperties props;

/** 上传文件到阿里云 OSS,返回访问 URL */
public String upload(MultipartFile file) throws IOException {
// 1. 获取上传文件的输入流
InputStream inputStream = file.getInputStream();

// 2. 避免文件名重复(用 UUID 替换原文件名)
String originalFilename = file.getOriginalFilename();
String fileName = UUID.randomUUID().toString()
+ originalFilename.substring(originalFilename.lastIndexOf("."));

// 3. 创建 OSS 客户端
OSS ossClient = new OSSClientBuilder().build(
props.getEndpoint(),
props.getAccessKeyId(),
props.getAccessKeySecret());

// 4. 上传到 OSS
ossClient.putObject(props.getBucketName(), fileName, inputStream);

// 5. 拼接文件访问 URL
String url = props.getEndpoint().split("//")[0] + "//"
+ props.getBucketName() + "."
+ props.getEndpoint().split("//")[1] + "/"
+ fileName;

// 6. 关闭客户端
ossClient.shutdown();
return url;
}
}

13.6 Controller 调用

1
2
3
4
5
6
7
8
9
10
11
12
13
@RestController
public class UploadController {

@Autowired
private AliOSSUtils aliOSSUtils;

@PostMapping("/upload")
public Result upload(MultipartFile image) throws IOException {
// 上传到 OSS,返回访问地址
String url = aliOSSUtils.upload(image);
return Result.success(url);
}
}

十四、综合速查

Git 命令一表流

1
2
3
4
5
6
配置:     git config --global user.name/email
本地仓库: git init / git status / git add / git commit / git log
远程仓库: git remote add / git clone / git push / git pull
分支: git branch / git checkout / git merge / git push origin 分支
标签: git tag / git push origin 标签
撤销: git reset 文件名(取消暂存)/ git reset --hard 版本号(回退)

工作区域口诀

1
2
3
工作区   →  git add   →  暂存区   →  git commit  →  本地版本库
本地版本库 → git push → 远程仓库
远程仓库 → git pull → 本地版本库(自动合并到工作区)

文件上传 6 字诀

1
2
前端:post + multipart/form-data + <input type="file">
后端:MultipartFile 形参 + 名称一致 + transferTo/getInputStream

阿里云 OSS 使用流程

1
2
3
开通服务 → 创建 Bucket → 获取 AccessKey

引入 SDK → 配置参数 → 注入工具类 → 调用 upload(file) → 返回 URL

IDEA 三大快捷按钮(必学)

1
2
3
✓ Commit and Push     → 提交并推送(最常用)
↓ Update Project → 拉取最新代码
master ▼ → 分支管理(创建/切换/合并)