这篇会持续记录日常开发中踩到、又反复需要翻查的软件使用技巧。不追求大而全,只收真正常用的。

Git

让 git status 显示中文文件名

默认情况下,Git 会对非 ASCII 文件名(如中文)做八进制转义显示。在 PowerShell 或 Git Bash 里跑 git status,中文目录和文件名会变成一串难读的转义码:

1
modified:   "\344\270\252\344\272\272\347\254\224\350\256\260/..."

原因:Git 的 core.quotepath 选项默认开启,对非 ASCII 路径进行 quote 转义,导致中文显示为八进制序列。

解决:关闭该选项,Git 即可直接输出原始 UTF-8 中文:

1
2
3
4
5
# 仅对当前仓库生效
git config core.quotepath false

# 或全局生效(推荐,一次解决所有仓库)
git config --global core.quotepath false

设置后,同样的 git status 输出变为:

1
modified:   个人笔记/个人理财/经济学入门.md

中文文件名正常显示。

用 Syncthing 同步 Git 仓库时的冲突副本

如果像我一样用 Syncthing 等同步工具在多设备间同步 Git 仓库,仓库根目录可能冒出 .sync-conflict-2026xxxx-xxxxxx-XXXXXX.gitignore 这样的冲突副本。这是同步工具在两端都检测到改动、无法自动合并时生成的保留文件。处理方式是先用 diff 比对两份内容,确认当前 .gitignore 已是完整最新版本后,直接删除冲突文件即可,无需手动合并。

Gerrit 通过 SSH 克隆仓库报 Permission denied (publickey)

使用 Gerrit 这类代码评审平台时,常会直接复制这样的克隆命令:

1
git clone ssh://<gerrit-host>:29418/<repo-name>

如果照搬,很容易遇到如下报错:

1
2
3
4
<当前系统登录名>@<gerrit-host>: Permission denied (publickey).
fatal: 无法读取远程仓库。

请确认您有正确的访问权限并且仓库存在。

原因:SSH 地址里没有指定用户名时,SSH 客户端会默认使用当前操作系统的登录用户名去尝试认证。但 Gerrit 的 SSH 账号名是你在 Gerrit Web 上注册的账号(通常是邮箱前缀或工号),与 Linux 主机的登录名往往不是一回事。用错用户名去撞认证,自然每次都被拒绝,报 publickey 错误。

解决:在 SSH 地址中显式带上 Gerrit 账号名即可:

1
git clone ssh://<your-gerrit-username>@<gerrit-host>:29418/<repo-name>

指定正确用户名后,认证就能通过,克隆正常进行。

补充排查:如果带上正确用户名后仍报 publickey 错误,则问题大概率在本机公钥未登记到 Gerrit。按以下顺序检查:

  1. 本地生成密钥(若尚无):ssh-keygen -t rsa -b 4096 -C "your-email@example.com"
  2. 取出公钥内容:cat ~/.ssh/id_rsa.pub,复制整行
  3. 登录 Gerrit Web → Settings → SSH Keys,粘贴并添加
  4. 验证连通性:
1
ssh -p 29418 <your-gerrit-username>@<gerrit-host> gerrit version

返回 gerrit version X.Y.Z 即表示认证成功,之后 clone / push 都不会再被拦。

提示:Gerrit 默认 SSH 端口是 29418(区别于标准 22 端口),地址里务必带对端口号。

Repo(Android 编译工具)

repo init 报 GPG「无法检查签名:没有公钥」

在内部编译服务器(如 192.168.1.47:29418 上的 Rockchip / RV1103B 系 SDK)执行 repo init 时,常卡在 git-repo 自身的标签校验,报类似:

1
2
3
gpg: 签名建立于 2013年06月24日 星期一 18时04分20秒 CST
gpg:                使用 RSA 密钥 C0E62B258BA24D13
gpg: 无法检查签名:没有公钥

原因:repo 启动器在初始化时会校验它自身(git-repo 代码)的发布标签 GPG 签名。这个 SDK 的 repo 标签由厂商内部账号 build@wiselinksz.com 用密钥 C0E62B258BA24D13 签名,而本机 GPG 密钥环里没有这把公钥,于是校验中断、init 失败。

注意:报错里的 C0E62B258BA24D13 是 repo 工具自身的标签签名密钥,和你的 Gerrit SSH 密钥不是一回事,别混淆。

解决

  • 最快、已采纳方案(推荐):给 repo init 加 --no-repo-verify,跳过 repo 工具自身发布标签的签名校验。它只关掉供应链自检,不影响业务代码拉取和后续 repo sync。

    1
    2
    3
    4
    
    ../../remote_build/FM270/RV1103B/.repo/repo/repo init \
      -u ssh://sjinqian@192.168.1.47:29418/manifest.git \
      -m EVB-RV1103B-SDK.xml \
      --no-repo-verify
    
  • 更严谨的正解:把公钥导入 GPG 密钥环,让校验能通过:

    1
    2
    3
    
    gpg --recv-keys C0E62B258BA24D13     # 需能访问公钥服务器
    # 或拿到厂商提供的 key 文件后:
    gpg --import <keyfile>
    

    但在内网友好环境、且厂商公钥未公开的情况下,--recv-keys 往往取不到,所以实际采用「跳过校验」。

已固化为惯例:后续在这些编译服务器(gpu45 192.168.1.45、223 hasee 等)执行 repo init 一律带 --no-repo-verify。

补充:不同机器自带的 repo 启动器版本不一致也曾引发别的问题(如 gpu45 上老 repo 用 Python2 语法直接 SyntaxError)。长期建议各机改用一份干净的官方 repo 启动器,并固定 REPO_REV(如 stable),避免再踩版本坑。

PowerShell / 终端

解决 PowerShell 红字蓝底看不清

在经典 PowerShell(非 Windows Terminal)中,git status 的 modified 文件默认用红色显示,而 PowerShell 的默认背景是深蓝色(#012456)。红字配蓝底,对比度极差,几乎没法读。

有以下四种解法,按推荐程度排序:

方案一(推荐):改用 Windows Terminal

Windows 10/11 自带,按 Win + R 输入 wt 回车即可打开。默认黑色背景,红色文字清晰可辨,还支持多标签和自定义主题。把快捷方式固定到任务栏,以后默认用它替代 PowerShell 即可。

方案二(永久):修改 PowerShell 默认配色

右键点击 PowerShell 窗口标题栏 → 属性 → 颜色 → 选中「屏幕背景」→ 改为黑色 → 确定时选择「修改启动该窗口的快捷方式」。这样以后每次打开都会生效。

方案三(最快):临时改当前会话背景色

1
2
$Host.UI.RawUI.BackgroundColor = "Black"
Clear-Host

输入后背景立即变黑,但只影响当前窗口,关闭即失效。

方案四(Git 层面):修改 Git 输出颜色

让 Git 把 modified 文件从红色改为黄色,在蓝底上也能看清:

1
2
git config --global color.status.changed "yellow normal"
git config --global color.status.untracked "cyan normal"

此方案治标不治本——其他命令行工具的红字蓝底问题依旧存在。

小结:Windows Terminal 或把 PowerShell 背景改成黑色是从根本上解决问题;改 Git 颜色只是绕开显示问题。

Cursor

在 Cursor 中接入 DeepSeek API

Cursor 允许把任意「OpenAI 兼容」的接口注册为自定义模型。DeepSeek 的 API 在设计上就兼容 OpenAI / Anthropic 的请求格式,因此无需任何代理或转发层,直接填入参数即可在 Cursor 里用上 DeepSeek。

核心参数

参数值
base_url(OpenAI 格式)https://api.deepseek.com
base_url(Anthropic 格式)https://api.deepseek.com/anthropic
api_key到 DeepSeek 开放平台申请
modeldeepseek-v4-flash / deepseek-v4-pro

在 Cursor 里配置

  1. 打开 Cursor → Settings(Ctrl + ,)→ 搜索 Model 进入 Models 设置
  2. 找到自定义模型 / Add Custom Model(或切换到 OpenAI-compatible 提供商)
  3. 填入上述参数:
    • Base URL:https://api.deepseek.com
    • API Key:你的 DeepSeek Key
    • Model Name:deepseek-v4-flash(或 deepseek-v4-pro)
  4. 保存后,在模型下拉列表里即可选中 DeepSeek 进行对话 / 补全

模型选择的注意事项

  • deepseek-chat 与 deepseek-reasoner 计划于 2026/07/24 弃用。新接入请直接用 deepseek-v4-flash 或 deepseek-v4-pro,避免临近弃用期还要改配置。
  • deepseek-v4-flash:响应快、成本低,适合日常代码补全与轻量问答。
  • deepseek-v4-pro:能力更强,适合复杂推理、长上下文任务。

补充:用 OpenAI SDK 直接调用(首次联调)

如果想在脚本里验证 Key 是否可用,或把 DeepSeek 接进自己的工具链,直接用 OpenAI 官方 SDK 即可,只需把 base_url 指向 DeepSeek:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
from openai import OpenAI

client = OpenAI(
    base_url="https://api.deepseek.com",
    api_key="<your-deepseek-api-key>",
)

resp = client.chat.completions.create(
    model="deepseek-v4-flash",
    messages=[
        {"role": "system", "content": "你是一个严谨的编程助手。"},
        {"role": "user", "content": "用一句话说明什么是 API。"},
    ],
)
print(resp.choices[0].message.content)

提示:DeepSeek 同时提供 Anthropic 兼容端点(/anthropic)。如果你用的框架基于 Anthropic SDK,把 base_url 改成 https://api.deepseek.com/anthropic 即可复用同一套代码逻辑。