如何优雅地整理 Git 分支历史:从混乱到清晰
在实际项目开发中,分支管理常常是让人头疼的问题。尤其是当我们“先干了再说”,后面才发现分支规划不合理,就容易出现“乱七八糟”的历史记录。 这篇文章记录了我在一个项目里遇到的真实情况:原本想在 main 分支上直接开发 Vue 版本,后来又想要保持 main 干净,把 Vue 独立出来。于是就有了“历史修复”的一系列操作。下面我会一步步讲解,如何从混乱的分叉整理出清晰的三条线。 1. 问题背景最初的提交历史长这样: * bf4b504 chore: initialize project with Vue 3 and Vite| * 85093cd feat(ui): implement site under construction page|/* e9a3ade feat(branding): initialize project with Tootaio Studio branding* af429eb refactor(ui): migrate from custom CSS to Tailwind CSS* f0a0ac1 Initial commit 问题在于: Vu...
使用 Cloudflare Tunnel 将家里服务器映射到公网
很多朋友买了域名之后,都希望能在公网安全访问自己家里的服务。传统做法需要公网 IP、端口转发、防火墙配置,甚至要考虑动态 IP 的问题。其实,借助 Cloudflare Tunnel(cloudflared),我们可以绕过这些繁琐的步骤,让 Cloudflare 作为中转,把外网请求安全转发到家里的内网服务。 下面我整理了一份完整的教程,帮助你从零开始配置 Cloudflare Tunnel,并绑定到你购买的域名。 1. 前置准备 一个 Cloudflare 账号,并将你购买的域名的 DNS 托管到 Cloudflare(即域名的 NS 指向 Cloudflare 提供的地址)。 家里的服务器一台,可以是 Linux / Windows / macOS。 服务器需要能访问外网(内网即可,不需要公网 IP)。 2. 安装 cloudflared以 Linux 为例,安装 cloudflared: # Debian/Ubuntusudo apt updatesudo apt install cloudflared 或使用 Cloudflare 官方安装包: curl -fsSL...
Springboot JavaEE @Resource 注解解释
@Resource 是 Java EE(也称为 Jakarta EE)中的注解,但也可以用于 Spring 框架中来实现依赖注入。它主要用于标识依赖对象,并将该对象注入到类的字段、方法或构造函数中。 与 @Autowired 的区别在 Spring 中,@Resource 和 @Autowired 都可以用来实现依赖注入,但它们有以下区别: @Resource 来自 Java EE: @Resource 注解源自 Java EE 规范(javax.annotation.Resource),它遵循 Java 的标准,兼容多个依赖注入框架。 它使用 by name 的方式进行注入。即优先按名称(通过字段名或属性名)查找 Bean 进行注入,如果找不到与名称匹配的 Bean,再根据类型查找。 @Autowired 来自 Spring: @Autowired 是 Spring 框架特有的注解,默认使用 by type 的方式进行注入,按类型匹配所需的依赖对象。 如果需要按名称注入,可以配合 @Qualifier 注解使用。 @Resource 的使用@Resource 注...
Springboot Spring @Component 注解解释
@Component 是 Spring Framework 中的一个注解,用于将一个类标识为 Spring 容器的组件。它是 Spring 的一种构造方式,允许开发者以注解的方式定义 Bean,从而使得 Spring 能够自动扫描并注册这些类为 Bean。 主要特点 自动扫描: Spring 可以通过类路径扫描来检测被 @Component 注解标记的类,并将其自动注册为 Spring 容器中的 Bean。这个过程通常在应用启动时发生。 泛化的组件定义: @Component 是一个泛化的注解,意味着它可以用于任何类型的类。Spring 提供了其他特定功能的注解,例如 @Service(用于服务层组件)、@Repository(用于数据访问层组件)和 @Controller(用于控制层组件),这些注解实际上都是基于 @Component 的。 与依赖注入结合使用: 被 @Component 注解的类可以通过 Spring 的依赖注入机制(如 @Autowired)注入到其他组件中,促进了松耦合的设计。 示例下面是一个简单的使用 @Component 注解的示例...
Springboot Spring Security 的基础解释
最简单的 SpringSecurity 配置(毫无意义,基础)这段代码是一个 Spring Security 的配置类,用于定义应用程序的安全过滤链(SecurityFilterChain)。下面我将详细解释这段代码的执行过程以及它的作用。 @Configurationpublic class SecurityConfiguration { @Bean SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { return http.build(); }} 代码解析1. @Configuration 注解 作用:标识该类是一个配置类,类似于 Spring 的 XML 配置文件。 功能:Spring 在启动时会扫描被 @Configuration 注解的类,将其中定义的 Bean 注册到应用程序的上下文中。 2. @Bean 注解 作用:标记方法的返回值应该作为一个 Bean,被 Spring 容器管理。 功能:...
Springboot Spring @Configuration 和 @Bean 注解解释
@Configuration 注解在 Spring Framework 中,@Configuration 是一个注解,用于定义配置类。配置类是用来替代 XML 配置文件的,它可以用来声明 Bean 和配置 Spring 容器中的依赖关系。 具体来说,@Configuration 注解表明该类是一个配置类,负责创建和管理 Spring 容器中的 Bean。通常,与 @Bean 注解一起使用,@Bean 用于方法上,指示该方法返回一个要被 Spring 管理的 Bean 实例。 示例:@Configurationpublic class AppConfig { @Bean public MyService myService() { return new MyServiceImpl(); }} 工作原理: 当 Spring 容器启动时,它会扫描带有 @Configuration 注解的类。 容器会执行这些类中的 @Bean 方法,并将返回的对象作为 Bean 注册到 Spring 的 IoC 容器中。 这些 B...
The usage of Signal in Godot 4
BindUsing bind() method is useful when connecting a signal. In fact, bind is not a method for signal but for function (or Callable class in Godot). For example, we have three button on our start menu. @onready var start: Button = %Start@onready var settings: Button = %Settings@onready var quit: Button = %Quit Then we can bind the start event in _ready() method, and parse some custom parameter using bind() function. For example: func _ready() -> void: start.pressed.connect(handle_menu_pre...
在 Godot 中实现超大数十六进制转十进制
使用 Godot 引擎实现以太坊仪表盘 🛠️✨今天我打算分享一个如何使用 Godot 引擎实现以太坊仪表盘的项目。Godot 引擎是一款类 Python 语言开发工具,所见即所得的开发过程非常方便和高效。 本项目的数据获取采用了 Etherscan API 和 JSON-RPC 接口。以下是详细的实现过程和相关代码。 Etherscan 的数据获取 📊原先我使用 Etherscan API 获取账户数据。Etherscan 提供的 API 非常简单,只需要提供地址和 API Token,就能返回所需的数据,数据以 JSON 格式展示: request_url = """https://api.etherscan.io/api ?module=account &action=balance &address=0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae &tag=latest &apikey=YourApiKeyToken"""...
获取和某个智能合约交互的所有地址
本项目已经开源到 GitHub 中,地址为:https://github.com/hubei-xhjy/blockchain-history-analyzer Eigenlayer 交互地址查询1. get_txn_by_etherscan.py1. 获取 EigenLayer 合约地址一般上,项目都会在他们的官网提供合约地址。通常在 Documentation 文档中。 如 EigenLayer 的官网: https://www.eigenlayer.xyz/ 打开 Documentation 页面 直接搜索 Contract,找到类似 Contract Address 会跳转到这里: https://docs.eigenlayer.xyz/eigenlayer/deployed-contracts/ 从文档中可以看到,这里提供了几个站外连接,我们点击 README.md 文档 这时候会跳转到 GitHub(其他项目会有不同的方法,可能直接写在页面中) https://github.com/Layr-Labs/eigenlayer-contracts?tab=read...
Git Branch 分支的用法以及使用场景
Git 分支(branch)是 Git 中一项非常重要的功能,它允许您从主开发线(通常是 main 或 master 分支)分离出来,独立进行开发。这样做的主要目的是保持主开发线的稳定性,同时允许多个开发者或团队并行工作于不同的功能或修复上。 Git 分支的基本用法 创建分支: git branch <branch-name> 这个命令会创建一个新的分支,但不会自动切换到该分支。 切换分支: git checkout <branch-name> 使用这个命令切换到已有的分支。也可以使用 git switch <branch-name>,这是一个较新的命令,作用相同。 合并分支: git merge <branch-name> 当在一个分支上的开发完成并且准备合并回主分支时,使用这个命令。这将会把 <branch-name> 分支的变更合并到当前分支。 删除分支: git branch -d <branch-name> 当完成分支的所有工作并已经合并回主分支后,可以使用这个命令删除不再需要...









