最近在项目中 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
将表象描述给 AI 后,给出了几个方向。逐个尝试后效果并不好。
git switch test
Updating files: 23% (1653/7186)
<br />

git worktree (进阶方案)如果你经常需要在两个差异巨大的分支间来回切换,与其在同一个文件夹下 switch,不如使用 worktree 为 test 分支创建一个独立的目录