Skip to main content

Command Palette

Search for a command to run...

git切换分支缓慢问题

Updated
1 min read
H

I am ZhangSan, a mere nobody. 我是张三,一个无名小子。

背景

最近在项目中 test 分支与 master 分支切换时感到非常慢,大概需要1-2分钟

解决

  • 找出两个分支的最大的差异
# 找出两个分支的差异
git diff --dirstat=files master..test
# 输出
98.7% vendor/alipaysdk/openapi/v2/aop/request/

分别检出两个分支到不同目录,经过比较发现文件主要差异为行尾表现不同,master 分支的文件为 LF、test 分支的为 CRLF。

处理方案

使用 .gitattributes 文件来强制转换,内容如下

# 标记所有文件由 Git 自动处理换行
* text=auto

# 明确指定 PHP 文件在检出时根据 OS 决定,但内部存储为 LF
*.php text

# 针对那个巨大的目录,强制使用 LF(或者根据需要设为固定格式)
/vendor/alipaysdk/** text eol=lf

之后推送远端,同时将变动文件合并到所有分支。

# 1. 确保当前工作区是干净的(已 commit 或 stash)
git add .gitattributes

# 2. 强行触发重新标准化
git add --renormalize .

# 3. 提交变动
git commit -m "build: Apply new .gitattributes rules"

# 4. 推送到远端
git push

TLDR


问题排查

将表象描述给 AI 后,给出了几个方向。逐个尝试后效果并不好。

git switch test
Updating files:  23% (1653/7186)

AI 给出的方向

备用方案

使用 git worktree (进阶方案)

如果你经常需要在两个差异巨大的分支间来回切换,与其在同一个文件夹下 switch,不如使用 worktreetest 分支创建一个独立的目录

More from this blog

软件生产范式: 从 Ddd 到 Sdd + Tdd 的未来之路

未来的软件系统,很可能不再依赖大量手写的代码,而是依赖可验证的业务规范,以及对这些规范的自动化实现。——这正是从 DDD → SDD + TDD 的演进方向。 在 AI 深度参与软件开发的时代,传统的代码中心开发方式正在加速老化。我们正在经历一次结构性转变:从“写代码”转向“写规范 + 写测试 + 让 AI 自动补全逻辑”。 这篇文章试图提供一个前瞻性的观点(深度使用 vibe coding 近

Dec 9, 20253 min read13
软件生产范式: 从 Ddd 到 Sdd + Tdd 的未来之路

多项目部署时使用不同node版本与包管理器

nvm 项目地址:https://github.com/nvm-sh/nvmcorepack 项目地址:https://github.com/nodejs/corepack#readme 场景 前端多项目依赖不同的 nodejs 版本和不同的包管理器(npm、yarn、pnpm) 解决方案 1、依赖不同 nodejs 版本使用 nvm 来解决,项目中新增 .nvmrc 来指定版本号 2、针对不同包管理器的问题使用node自带的 corepack 来解决 # 使用指定版本 node nvm us...

Nov 5, 20251 min read1

hello1024

46 posts