菜单
git切换分支缓慢问题

背景

最近在项目中 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)

<br />

AI 给出的方向

备用方案

使用 git worktree (进阶方案)

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