当前位置: 首页 > news >正文

【常用工具系列】Git 教程——从入门到大师

目录

  • 前言
  • 一、Git 基础
    • 1-1、Git 简介与安装
      • 安装 Git
    • 1-2、 Git 工作流程
    • 1-3、 Git 配置与管理
      • 用户配置
      • 查看配置
    • 1-4、 Git 仓库操作
      • 克隆仓库
      • 推送更改
      • 拉取更新
    • 1-5 Git 分支管理
      • 创建分支
      • 切换分支
      • 删除分支
      • 解决冲突
  • 二、 Git 进阶
    • 2-0、 Git 标签使用
      • 创建标签
      • 查看标签
      • 检出标签
      • 推送标签到远程仓库
    • 2-1、 Git 远程仓库
      • 添加远程仓库
      • 从远程仓库拉取
      • 推送到远程仓库
      • 查看远程仓库信息
    • 2-2、Git 分布式工作流
    • 2-3、Git 冲突解决
    • 2-4、Git 日志与历史
      • 查看提交历史
      • 回退到之前的提交
      • 暂存更改
  • 三、Git 实用技巧
    • 3-1、Git 忽略文件与.gitignore
      • 创建.gitignore
      • 示例
      • 注意事项
    • 3-2、Git 别名与自定义命令
      • 设置别名
      • 自定义命令
    • 3-3、Git 子模块管理
      • 添加子模块
      • 更新子模块
    • 3-4、Git 回退与数据恢复
      • 回退到某个提交
      • 恢复已删除的文件
    • 3-5、Git 工具集成(如:GitHub, GitLab)
      • GitHub
      • GitLab
  • 四、Git 高级话题
    • 4-1、Git 内部原理浅析
      • 提交对象
      • 树对象
      • Blob 对象
      • 工作流
    • 4-2、Git 二进制文件管理
    • 4-3、Git hooks 应用
      • 示例:预提交钩子(pre-commit)
    • 4-4、Git 仓库维护与优化
      • 清理不再使用的分支
      • 压缩仓库大小
    • 4-5、Git 安全策略
      • 使用SSH密钥而非HTTPS
      • 保护分支
      • 定期审计
  • 五、Git 在团队中的应用
    • 5-1、Git 流程规范
    • 5-2、代码审查与合并请求
    • 5-3、分支策略与版本发布
    • 5-4、持续集成与持续部署(CI/CD)
    • 5-5、多人协作最佳实践
  • 总结


前言

Git 是一个分布式版本控制系统,由 Linus Torvalds 在2005年为管理 Linux 内核开发而创建。它设计用于处理从小型到非常大型的项目版本管理,具有高效、可靠的特点,并支持非线性开发。

一、Git 基础

1-1、Git 简介与安装

Git 是一个分布式版本控制系统,由 Linus Torvalds 在2005年为管理 Linux 内核开发而创建。它设计用于处理从小型到非常大型的项目版本管理,具有高效、可靠的特点,并支持非线性开发。

安装 Git

在 Windows 上安装

  1. 访问 Git 官方下载页面。
  2. 下载适合你的操作系统的安装程序。
  3. 按照安装向导指示完成安装过程,推荐勾选“Git Bash Here”选项以便在Windows资源管理器中快速打开Git Bash。

在 macOS 上安装

  1. 使用 Homebrew(如果尚未安装,请先通过 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"" 安装 Homebrew)。
  2. 运行 brew install git 命令安装 Git。

在 Linux 上安装

对于基于 Debian 的系统(如 Ubuntu),使用以下命令:

sudo apt-get update
sudo apt-get install git

对于基于 Red Hat 的系统(如 Fedora),使用:

sudo dnf install git

1-2、 Git 工作流程

Git 的基本工作流程包括以下几个步骤:

  1. 初始化仓库:在项目根目录下运行 git init 以创建新的 Git 仓库。
  2. 添加文件:使用 git add <file> 将文件添加到暂存区,或 git add . 添加所有修改过的文件。
  3. 提交更改:通过 git commit -m "提交信息" 将暂存区的内容提交到本地仓库。
  4. 查看状态:使用 git status 查看当前工作目录和暂存区的状态。
  5. 分支操作:利用 git branch 创建、查看分支,git checkout <branch> 切换分支。
  6. 合并分支:当开发完成后,使用 git merge <branch> 合并分支到主分支。

1-3、 Git 配置与管理

用户配置

首次使用 Git 前,需要配置用户名和邮箱,这些信息将被用于记录提交:

git config --global user.name "你的名字"
git config --global user.email "you@example.com"

查看配置

可以使用以下命令查看配置信息:

git config --list

1-4、 Git 仓库操作

克隆仓库

从远程仓库克隆项目到本地,使用命令:

git clone https://github.com/用户名/仓库名.git

推送更改

将本地仓库的更改推送到远程仓库:

git push origin 主分支名

拉取更新

获取远程仓库的最新更改并合并到本地:

git pull origin 主分支名

1-5 Git 分支管理

创建分支

创建一个新的分支并立即切换到该分支上:

git checkout -b 新分支名

切换分支

切换到已存在的分支:

git checkout 分支名

删除分支

删除本地分支:

git branch -d 分支名

删除远程分支(需先在本地删除):

git push origin --delete 分支名

解决冲突

当合并时发生冲突,Git 会标记出冲突文件。手动编辑这些文件,解决冲突后,再提交。

以上内容覆盖了 Git 的基础操作,通过实践这些命令,你将能熟练地使用 Git 进行版本控制。

二、 Git 进阶

2-0、 Git 标签使用

在 Git 中,标签用于标记某个特定的提交,常用于版本发布。创建轻量标签只需指定标签名,而注解标签则会包含作者信息、日期以及标签信息。

创建标签

  • 轻量标签:直接指向提交对象。
git tag v1.0
  • 注解标签:包含额外信息,使用 -a 参数,并可添加 -m 参数描述标签信息。
git tag -a v1.1 -m "Version 1.1 release"

查看标签

git tag

检出标签

检出到标签对应的提交:

git checkout tags/v1.0

推送标签到远程仓库

默认情况下,git push 不会推送标签。需要显式地推送标签:

git push origin v1.0

或推送所有标签:

git push origin --tags

2-1、 Git 远程仓库

远程仓库是团队协作的基础,允许共享代码和协作开发。

添加远程仓库

git remote add origin https://github.com/yourusername/yourrepo.git

从远程仓库拉取

git fetch origin

推送到远程仓库

git push origin master

查看远程仓库信息

git remote -v

2-2、Git 分布式工作流

分布式工作流强调每个开发者都有一个完整的仓库副本,包括历史记录和分支,可以独立进行开发和提交。

  1. Forking Workflow:适合开源项目,开发者先Fork主仓库到自己账户,然后在其上开发,完成后发起Pull Request。
  2. Feature Branch Workflow:团队内部常用,基于主分支创建特性分支开发新功能,完成后合并回主分支。

2-3、Git 冲突解决

冲突发生在两个或多个提交修改了同一文件的同一部分时。解决步骤如下:

  1. 查看冲突:Git会标记冲突区域。
  2. 手动编辑:手动决定如何解决冲突。
  3. 添加更改:解决后,需要将其添加到暂存区。
  4. 提交更改:完成冲突解决后提交。
git add .
git commit -m "Resolved conflicts in file.txt"

2-4、Git 日志与历史

查看提交历史

  • 简略历史
git log
  • 详细历史
git log --oneline --decorate --graph --all
  • 搜索提交历史

通过关键字搜索提交信息:

git log --grep="feature"

回退到之前的提交

使用 git resetgit revert 可以回到之前的提交状态。

  • 软重置(保留工作目录改动):
git reset --soft HEAD^
  • 硬重置(丢弃工作目录改动):
git reset --hard HEAD^

暂存更改

如果想恢复到某个提交的状态,但不提交,可以使用 git stash

git stash

之后可以通过 git stash applygit stash pop 恢复暂存的更改。

三、Git 实用技巧

3-1、Git 忽略文件与.gitignore

在使用Git进行版本控制时,你可能希望某些文件或目录不被Git跟踪,比如编译生成的文件、日志文件、个人配置文件等。这时,.gitignore文件就显得尤为重要。

创建.gitignore

在你的仓库根目录下创建一个名为.gitignore的文件。在这个文件中,你可以指定要忽略的文件模式。每行一个模式,空行或以#开头的行会被忽略。

示例

# 忽略所有.log文件
*.log# 但.gitlog文件除外
!gitlog.txt# 忽略build目录下的所有文件
build/# 忽略所有以.tmp结尾的文件
*.tmp

注意事项

  • 使用斜杠/表示目录,例如dir/会忽略dir目录下的所有文件,但不会忽略dir本身。
  • 使用星号*作为通配符匹配任意字符,但不包括.
  • 使用双星号**可以递归匹配目录和文件。

3-2、Git 别名与自定义命令

为了提高效率,Git允许用户为常用命令设置别名,或者创建自定义命令。

设置别名

通过git config命令可以设置别名:

# 在全局配置中设置别名
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit

这样,你可以使用git co代替git checkoutgit br代替git branch等。

自定义命令

更进一步,你可以通过编写脚本并在Git中设置别名来实现自定义命令。例如,创建一个显示最近几次提交摘要的命令:

# 在~/.gitconfig中添加如下内容
[alias]recent = "!f() { git log --oneline -n $1; }; f"# 然后,你可以使用git recent 5来查看最近5次提交

3-3、Git 子模块管理

当你的项目依赖于其他项目时,Git子模块提供了一种有效的方式来管理这些依赖。每个子模块都是一个独立的Git仓库。

添加子模块

git submodule add https://github.com/example/repo.git path/to/submodule

这会在当前仓库中添加一个名为repo的子模块,并将其置于path/to/submodule目录下。

更新子模块

进入子模块目录并执行Git命令:

cd path/to/submodule
git pull
cd ..
git add path/to/submodule
git commit -m "Update submodule"

或者直接使用:

git submodule update --remote

3-4、Git 回退与数据恢复

回退到某个提交

git reset --hard <commit_hash>

这会将HEAD指向指定的提交,并重置工作目录和索引,丢失的提交将无法找回。

恢复已删除的文件

git checkout <commit_hash> -- path/to/file

这会从指定的提交中恢复文件到工作目录。

3-5、Git 工具集成(如:GitHub, GitLab)

GitHub

  1. Fork:在GitHub上找到你想要贡献的项目,点击"Fork"按钮将其复制到你的账户下。
  2. Clone:在本地克隆你的Fork。
    git clone https://github.com/your_username/repo.git
    
  3. 创建新分支:基于mainmaster分支创建新分支。
    git checkout -b new-feature
    
  4. 提交更改
  5. 推送至远程仓库
    git push origin new-feature
    
  6. 发起Pull Request

GitLab

流程与GitHub类似,主要区别在于URL和一些特定功能(如Merge Requests)。

以上是Git实用技巧的一些关键点,掌握它们能显著提升日常开发的效率和协作体验。

四、Git 高级话题

4-1、Git 内部原理浅析

Git 是一个分布式版本控制系统,其内部原理基于快照和内容寻址存储机制。每个 Git 仓库都包含一个对象数据库,用于存储四种类型的对象:提交(commit)、树(tree)、blob(文件内容)和标签(tag)。这些对象通过 SHA-1 哈希值唯一标识,确保了数据的完整性和一致性。

提交对象

提交对象记录了一次保存快照的操作,包括指向根树对象的指针、父提交的指针(首次提交除外)、作者信息、提交者信息及提交信息。

树对象

树对象代表了一个目录结构,记录了该目录下的所有文件(作为 blob 对象)和子目录(作为其他树对象)的信息。

Blob 对象

Blob 对象用来存储文件的具体内容。当文件被添加到 Git 仓库时,其内容会被转换为 blob 对象并存储在数据库中。

工作流

工作目录、暂存区(索引)和HEAD指针是理解Git工作流程的关键。HEAD是一个特殊的指针,通常指向当前分支的最新提交。通过git add命令将更改从工作目录移动到暂存区,然后使用git commit将暂存区的内容创建一个新的提交。

4-2、Git 二进制文件管理

对于图片、视频等二进制文件,Git 通过同样的方式管理,但默认不会进行差异比较,而是每次修改视为全新的文件。为了优化存储空间和传输效率,可以考虑使用git-lfs(Large File Storage),它允许将大文件存储在外部服务上,并在Git仓库中只保留文本指针。

# 安装git-lfs
git lfs install# 将特定类型文件跟踪为LFS
git lfs track "*.mp4"# 提交包括LFS文件的更改
git add . && git commit -m "Add large files with git-lfs"

4-3、Git hooks 应用

Git Hooks 是在特定事件发生前或发生后执行的脚本,位于.git/hooks目录下。它们让开发者能够在提交前自动检查代码风格、自动打包或发送通知等。

示例:预提交钩子(pre-commit)

此钩子在提交前运行,可用于代码格式检查。

#!/bin/sh
# pre-commit 文件内容
echo "Running code checks..."
flake8 .  # 假设使用Flake8进行Python代码检查
if [ $? -ne 0 ]; thenecho "Code style check failed. Please fix the issues before committing."exit 1
fi
echo "Code checks passed."

4-4、Git 仓库维护与优化

清理不再使用的分支

定期清理不再需要的远程分支可以保持仓库整洁。

git remote prune origin

压缩仓库大小

通过git gc手动进行垃圾回收,优化存储空间。

git gc --aggressive --prune

4-5、Git 安全策略

使用SSH密钥而非HTTPS

SSH连接提供了更强的安全性,避免在每次操作时输入密码。

保护分支

通过设置git config中的branch.*.protection属性,可以防止关键分支被误删或强制推送。

定期审计

定期审查提交历史和访问权限,确保没有异常活动。

以上内容深入探讨了Git的一些高级特性及其应用,帮助用户更高效、安全地管理版本控制。

五、Git 在团队中的应用

5-1、Git 流程规范

在团队开发中,遵循一套明确的Git流程规范至关重要,以确保代码质量和团队协作效率。规范通常包括以下步骤:

  1. 初始化仓库:项目开始时,首先在GitHub、GitLab等平台上创建远程仓库,并通过git clone命令将仓库克隆到本地。

    git clone https://github.com/your-username/your-repo.git
    
  2. 分支管理:为每个新功能、修复或特性创建独立的分支,避免直接在mainmaster分支上工作。

    git checkout -b feature/new-feature
    
  3. 提交规范:每次提交应仅包含逻辑相关的改动,并附带清晰的提交信息,采用 Imperative mood,如“Add feature X”。

    git add .
    git commit -m "Add feature X"
    
  4. 拉取最新代码:在推送前,先从远程仓库拉取最新代码并解决可能的冲突。

    git pull origin main
    
  5. 代码审查:通过合并请求(Merge Request)或Pull Request进行代码审查,确保代码质量。

5-2、代码审查与合并请求

代码审查是提高代码质量和团队成员技能的关键环节。在Git中,这一过程通过创建合并请求实现:

  1. 创建合并请求:在完成开发后,向主分支发起合并请求,详细描述变更内容和目的。

  2. 添加审查员:指定其他团队成员作为审查员,他们将审查代码并提出建议或要求修改。

  3. 讨论与迭代:根据审查反馈,在自己的分支上进行必要的修改,然后推送到远程分支。

    git push origin feature/new-feature
    
  4. 合并:审查通过后,可以安全地将分支合并到主分支。

5-3、分支策略与版本发布

采用合理的分支策略能有效管理版本发布:

  • 主分支(main/master):代表当前稳定版本,只接受经过测试和审查的代码合并。
  • 开发分支(develop):日常开发分支,所有新功能和修复均在此分支上开发。
  • 特性分支(feature/*):针对特定功能或修复的分支,开发完成后合并回develop。
  • 发布分支(release/*):从develop分支分出,用于准备新版本发布,最终合并至main并打标签。

版本发布时,使用以下命令打标签:

git tag -a v1.0.0 -m "Version 1.0.0 release"
git push origin v1.0.0

5-4、持续集成与持续部署(CI/CD)

CI/CD流程自动化了代码构建、测试和部署过程,保证快速且可靠的交付。

  1. 配置CI服务器:使用Jenkins、GitLab CI/CD、Travis CI等工具配置自动构建和测试。

  2. 编写yaml文件:定义自动化流程,包括构建触发条件、测试命令、部署步骤等。

    # 示例:GitLab CI YAML 配置
    stages:- build- test- deploybuild:stage: buildscript:- npm install- npm run buildtest:stage: testscript:- npm testdeploy:stage: deployscript:- ssh user@server "cd /var/www/my_app && git pull origin main"
    
  3. 监控与优化:持续监控CI/CD流程,根据需要调整优化,确保高效稳定运行。

5-5、多人协作最佳实践

  1. 保持通讯透明:定期同步进度,使用Issue、PR注释或团队沟通工具讨论问题。
  2. 频繁提交并推送:小而频繁的提交有助于追踪更改历史和问题定位。
  3. 尊重代码所有权:在修改他人代码前,通过评论或聊天工具进行沟通。
  4. 定期同步远程分支:确保本地工作基于最新的远程分支,减少合并冲突。
  5. 学习和分享:团队内部定期分享Git高级技巧,提升整体协作效率。

总结

talk is cheap, show me the code !

相关文章:

【常用工具系列】Git 教程——从入门到大师

目录 前言一、Git 基础1-1、Git 简介与安装安装 Git 1-2、 Git 工作流程1-3、 Git 配置与管理用户配置查看配置 1-4、 Git 仓库操作克隆仓库推送更改拉取更新 1-5 Git 分支管理创建分支切换分支删除分支解决冲突 二、 Git 进阶2-0、 Git 标签使用创建标签查看标签检出标签推送标…...

每天坚持写java锻炼能力---第一天(6.4)

今天的目标是菜单&#xff1a; B站/马士兵的项目菜单 package java1;import java.util.Scanner;public class Test {public static void main(String[] args) {while(true){ //3.加入死循环&#xff0c;让输入一直有System.out.println();System.out.println("--->项…...

mysql 如何分布式部署

MySQL的分布式部署是一个涉及多个步骤和配置的过程&#xff0c;以确保数据库系统能够支持大规模数据存储、高并发访问和容错性。以下是MySQL分布式部署的主要步骤和要点&#xff0c;结合参考文章中的相关信息进行整理&#xff1a; 一、前期准备 环境准备&#xff1a; 选择合…...

Git的概念

Git 一些概念 **工作区&#xff1a;**电脑上你能看到的目录 **版本库&#xff1a;**工作区的隐藏目录.git。含 暂存区&#xff1a;git add后但未git commit的文件修改被添加到暂存区本地分支&#xff1a;git commit后&#xff0c;但未git push&#xff0c;即把暂存区的所有…...

【每日刷题】Day58

【每日刷题】Day58 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c;​​​​​​​ 1. 3038. 相同分数的最大操作数目 I - 力扣&#xff08;LeetCode&#xff09; 2. 868. …...

Python 的七个HTTP请求库对比

Python HTTP请求库对比 库名称特点优点缺点requests简单易用的HTTP库&#xff0c;基于urllib3。- 语法简洁- 社区支持强大- 易于上手和维护- 阻塞式调用&#xff0c;不支持异步操作- 相比aiohttp体积较大http.clientPython标准库中的低级HTTP库。- 无需安装第三方库- 提供底层…...

顶顶通呼叫中心中间件-如何配置识别不同语种的ASR

文章目录 前言联系我们创建不同语种的语音识别任务开始对接识别不同语种的ASR重启 asrproxy 程序使用识别不同语种的ASR 前言 之前讲过顶顶通的 asrproxy 程序如何对接第三方的ASR&#xff0c;比如&#xff1a;阿里云的ASR。不知道如何对接的&#xff0c;可以参考&#xff1a;…...

C# SolidWorks 二次开发-显示配置

在 SolidWorks 的二次开发中&#xff0c;显示配置&#xff08;Display States&#xff09;是一个非常重要的功能。显示配置允许用户在同一个配置&#xff08;Configuration&#xff09;下保存不同的显示状态&#xff0c;如隐藏或显示的零件、不同的颜色和材质等。本文将向新的开…...

PXE自动装机

一、PXE概述 PXE&#xff1a;c/s架构&#xff0c;允许客户端通过网络从远程服务器&#xff08;服务端&#xff09;下载引导镜像&#xff0c;加载安装文件&#xff0c;实现自动化安装操作系统。 c/s 架构&#xff1a;服务端和客户端都可以是多台。 无人值守&#xff1a;安装选…...

MQ之初识kafka

1. MQ简介 1.1 MQ的诞生背景 以前网络上的计算机&#xff08;或者说不同的进程&#xff09;传递数据&#xff0c;通信都是点对点的&#xff0c;而且要实现相同的协议&#xff08;HTTP、 TCP、WebService&#xff09;。1983 年的时候&#xff0c;有个在 MIT 工作的印度小伙突发…...

linux驱动学习(七)之混杂设备

需要板子一起学习的可以这里购买&#xff08;含资料&#xff09;&#xff1a;点击跳转 一、混杂设备 混杂设备也叫杂项设备&#xff0c;是对普通的字符设备(struct cdev)的一种封装,设计目的就是为了简化字符设备驱动设计的流程。具有以下特点&#xff1a; 1) 主设备号为10&a…...

【数据结构与算法 | 堆篇】力扣215, 703

1. 力扣215 : 数组中的第k个最大元素 (1). 题 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解…...

项目经理进入职场都会经历的三个阶段

对于项目经理而言&#xff0c;进入职场是一个不断学习和成长的过程。在这个过程中&#xff0c;项目经理通常会经历三个主要阶段&#xff0c;每个阶段都有其独特的特点和挑战。 一、基础建设与学习阶段 对于新入行的项目经理来说&#xff0c;最初的阶段主要是基础技能的积累和…...

消防设施工程乙级资质全解析:申请条件与流程“

消防设施工程乙级资质全解析&#xff1a;申请条件与流程 消防设施工程乙级资质&#xff0c;作为衡量企业从事特定规模消防设施设计能力的重要标尺&#xff0c;对于想要在消防工程领域拓展业务的企业而言至关重要。本文将全面解析申请消防设施工程乙级资质所需的条件、流程及相…...

【C语言】03.分支结构

本文用以介绍分支结构&#xff0c;主要的实现方式为if语句和switch语句。 一、if语句 1.1 if语句 if (表达式)语句表达式为真则执行语句&#xff0c;为假就不执行。在C语言中&#xff0c;0表示假&#xff0c;非0表示真.下图表示if的执行过程&#xff1a; 1.2 else语句 当…...

uniapp手机屏幕左滑返回上一页支持APP,H5

核心&#xff1a;touchstart"touchStart" touchend"touchEnd" 代码示例&#xff1a; <template><view class"payPasswordSetting" touchstart"touchStart" touchend"touchEnd"></view> </template&g…...

【Java毕业设计】基于JavaWeb的洗衣店管理系统

文章目录 摘要ABSTRACT目 录1 概述1.1 研究背景及意义1.2 国内外研究现状1.3 拟研究内容1.4 系统开发技术1.4.1 SpringBoot框架1.4.2 MySQL数据库1.4.3 MVC模式 2 系统需求分析2.1 可行性分析2.2 功能需求分析 3 系统设计3.1 功能模块设计3.2 系统流程设计3.3 数据库设计3.3.1 …...

使用sqlldr向oracle导入大量数据

&#xff08;1&#xff09;在Oracle主机安装oracle客户端 sqlldr&#xff0c;在命令行输入sqlldr&#xff0c;若有help指导即已经安装了&#xff1b; &#xff08;2&#xff09;创建一个xxx.ctl文件 这个文件是执行导入数据的语句&#xff0c;其中包含需要导入的数据&#x…...

Milvus LIKE操作符

在Milvus中&#xff0c;虽然LIKE操作符被用于模糊匹配字符串&#xff0c;但其支持的模式匹配能力有限。根据你收到的错误信息&#xff0c;Milvus目前只支持两种类型的LIKE模式匹配&#xff1a; 前缀匹配&#xff0c;例如LIKE ab%&#xff0c;这意味着任何以ab开头的字符串都会…...

iQOO neo 5精简内置组件

无他!系统自带了太多组件,都用不到,连打开都不曾打开过。 下午整理一篇精简组件的列表,各自按照各自的需要进行精简哦。别盲目跟风,要不然手机使用会出问题。 精简步骤 使用任意刷机工具,开启手机的开发权限,然后adb连接 删除组件列表如下: pm uninstall --user 0…...

为什么给网站安装SSL证书之后还是有被提示不安全?

分为两种情况一种是安装了付费证书之后还是显示无效&#xff0c;另一种是安装了免费SSL证书的。 付费SSL证书&#xff1a;直接找厂商帮助解决遇到的问题&#xff0c;一般都是有专业的客服来对接这些的。 免费SSL证书&#xff1a;出现这种情况的原因会有很多。因为免费SSL证书的…...

创建Frame单例,实现WPF页面跳转

需求&#xff1a; 有一个F0View主页面入口&#xff0c;三个子页面&#xff08;First.xaml/Second.xaml/Third.xaml&#xff09;用Frame默认加载第一个页面 First.xaml。实现三个页面之间顺序跳转&#xff0c;并且每个页面只初始化一次。 实现&#xff1a; 1&#xff0c;将三…...

正宇软件助力江西数字人大建设,高效解决群众“急难愁盼”问题

近日&#xff0c;赣州市南康区群众通过“江西数字人大”小程序成功解决道路塌陷等民生问题&#xff0c;引发社会广泛关注。这一成功案例不仅彰显了“数字人大”在解决群众“急难愁盼”问题中的重要作用&#xff0c;也凸显了江西地区近年来在数字化人大建设方面的显著成效。正宇…...

打造AIPC轻量化方案 360AI浏览器及360AI搜索全新发布

“搜索这20多年来没有发生变化&#xff0c;我们希望这次能来一场革命。”6月6日&#xff0c;360AI新品发布会暨开发者沟通会在京举办。会上&#xff0c;三六零&#xff08;股票代码&#xff1a;601360.SH&#xff0c;以下简称360&#xff09;集团发布全新360AI搜索及360AI浏览器…...

《effective c++》学习笔记

从今天开始看《effective c》这本书&#xff0c;把学到的东西当做笔记记下来&#xff0c;算是督促自己学习吧&#xff0c;也算是和大家一起分享一点东西&#xff0c;理解不当的地方&#xff0c;请谅解。&#xff08;每天更新三个条款&#xff09;。 一&#xff1a;让自己习惯C…...

11.盛水最多的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜容器。 示例 1&a…...

通过在idea上搭建虚拟hadoop环境使用MapReduce做词频去重

idea上的MapReduce ​ 一般在开发中&#xff0c;若是等到环境搭配好了再进行测试或者统计数据&#xff0c;数据处理等操作&#xff0c;那会很耽误时间&#xff0c;所以一般都是2头跑&#xff0c;1波人去在客户机上搭建环境&#xff0c;1波人通过在idea上搭建虚拟hadoop环境&am…...

AI技术变革与企业服务创新

1、AI的技术变革 1&#xff09;AI市场规模 2&#xff09;AI大模型发展历程 3&#xff09;AIGC发展背景 4&#xff09;AIGC技术能力 AIGC的技术架构逻辑上分为基础层、技术层、能力层、应用层、终端层五大板块&#xff0c;其中核心技术层涵盖AI技术群和大模型的融合创新&#…...

探秘Facebook:社交媒体的未来之路

Facebook&#xff0c;作为全球最大的社交媒体平台之一&#xff0c;一直处于数字社交革命的前沿。然而&#xff0c;随着科技和社会的不断发展&#xff0c;Facebook正面临着新的挑战和机遇。本文将探索Facebook的未来之路&#xff0c;揭示社交媒体的新趋势和发展方向。 1. 深度社…...

rust的类型转换和一些智能指针用法(四)

基础类型 使用 as 关键字&#xff1a;用于基本数值类型之间的转换&#xff0c;例如将 i32 转换为 u32。 例子&#xff1a;let x: i32 10; let y: u64 x as u64; 使用标准库中的转换方法&#xff1a;如 from() 和 into() 方法&#xff0c;这些方法通常用于无风险的转换&#…...