BOB CHEN

POST  ·  2026-07-13

GIT
+ CLIP

LOG FILE / SAVE 004

先给项目上 Git,再给串流补个剪贴板

今天这堆事,是从昨晚那次 git init 开始的。

前几天一直让不同的 AI 接力改 Blog 和 status。没有 Git,下一位接手时不知道上一位动了哪里,只能把几十 KB 的 app.jsstyle.css 和 README 重新通读一遍。token 烧掉一堆,最后还不一定找得出哪几行刚改过。

这就很像接班的人找不到交接本,只能把整个办公室翻一遍。

先让 Git 记住上一手

所以先把 Blogstatus 分别建成了本地 Git 仓库。我没在 ~/AI 顶层再套一个大仓库。两个项目本来就没关系,旁边还放着 .secrets,没必要把它们绑在一起。

第一次提交之前先写 .gitignore。这一步不能省:本地仓库以后也可能加远端,今天误提交进去的密钥,到时候会连着整段历史一起推上去。

  • Blog 忽略部署快照和系统杂物,HTML、CSS、JS、文章原稿和部署脚本正常跟踪。
  • status 直接忽略整个 data/,里面既有 SwitchBot、远程 GPU 的凭据,也有每两秒变化的历史数据和内网配置。
  • voice 没有另建仓库。里面的 VibeStick 本来就自带 Git 和远端,llama.cpp 又是可重新下载的大体积第三方文件,再套一层只会把事情弄乱。

真要照抄,先在项目根目录写一份最小 .gitignore.secrets/*.env 是密钥,data/ 是高频变化的运行数据,都不该进历史:

.gitignoreGITIGNORE
.secrets/
*.env
data/
*.log

然后再初始化和做第一次提交。git init -b main会直接把初始分支设成 maingit check-ignore -v 可以在暂存前验证某个文件到底命中了哪条规则:

初始化仓库前先验证忽略规则SHELL
git init -b main
git check-ignore -v .secrets/example.env
git status --short
git add .
git diff --cached --check
git commit -m "Initial snapshot"

如果文件早就被 Git 跟踪了,后来再写 .gitignore 不会让它自动消失。Git 官方也明确说了,ignore 只针对未跟踪文件。所以第一次 git add . 之前一定先看 git status --short

两个仓库目前都是纯本地的 main,没有推到任何远端。以后每次改完、验证通过就自动提交,不再留一堆“这到底是谁动的”现场。

Git 当然不会让文件变小,省下的是下一位接手时重新摸清状态的时间。git diff 看改动,git log 看原因,几百个字能说清的事情,不用再读几万个字。

Git 当天就开始干活

仓库建好之后,status 马上又改了两轮。

第一轮是 Claude 额度。原来的 status 只读取 ~/.claude/.credentials.json,自己不会续期。只有我打开 Claude Code 或 VS Code 插件时,客户端才顺手刷新 token。于是我不用 Claude,额度面板反而会过期冻住;我一用,它又活了。

最后加了一个独立的 Node 续期脚本和 systemd 用户定时器,每 30 分钟检查一次,快过期才刷新。status 继续只读额度,不需要拿到写登录态的权限。

中间还踩了个很像笑话的坑:Python 和 curl 请求 OAuth 端点都收到 429,一开始以为真被限流,安静等了一夜也没用。第二天翻本机官方客户端代码确认端点,再换 Node 的网络栈,第一发就成功。那个 429 更像 WAF 看 TLS 指纹不顺眼,并不是真的“请求太多”。

第二轮是 Codex 自己改规则。上游把 5 小时额度窗取消了,只剩周额度,原来并排的两张额度卡突然一边三行、一边一行。数据没坏,界面只是被厂商改空了。于是 Codex 卡补上 Credits 余额、限额重置券和“5 小时限额已取消”的说明。哪天上游把双窗口加回来,说明也会自动消失。

这两轮各自留了一个 commit。厂商爱怎么改就怎么改,至少我知道自己为什么跟着动。

副屏上的 Linux 少了一块剪贴板

下午又去收拾另一个每天都能碰到的小麻烦。

这台 Linux 平时主要靠 Sunshine + Moonlight 串到副屏上用。画面、声音、键盘和鼠标都有了,唯独剪贴板没有。主屏上复制一段命令,到了副屏里的 Linux 还得重新打;Linux 里看到一个链接,想贴回另一台机器也不行。

短句还能忍,长命令和中文就只剩下折磨。串流看起来像本地桌面,复制粘贴时又突然提醒我:不是,你还隔着一台机器。

SyncClipboard:Linux 自己当服务端

最后装了 SyncClipboard 3.1.8。没有另外搭一套服务,直接让 Linux 客户端打开内置服务器,自己连自己的 5033 端口,另一端也连到这台 Linux。

配置上做了几件事:

  • 服务端设置独立账号和随机密码,凭据只留在本机配置里。
  • 先用 HTTP 跑通,再给局域网签一套自己的根证书和服务器证书,改成 HTTPS。
  • 证书覆盖局域网地址、localhost 和主机名;另一端导入根证书后正常校验,没有打开“忽略证书错误”。
  • 文本、图片和文件同步都打开,单个文件上限 20 MB。
  • KDE 登录后自动启动,窗口默认隐藏,平时不用再管它。

我这次直接用了客户端内置服务器,因为 Linux 机器本来就会常驻登录。如果是给多台机器共用,我更建议把服务端拆成 Docker Compose,别让「服务是不是活着」取决于某个桌面客户端有没有打开。SyncClipboard 官方仓库已经提供了镜像,一份最小 compose.yml 可以这样写:

compose.ymlYAML
services:
  syncclipboard:
    image: jericx/syncclipboard-server:latest
    container_name: syncclipboard-server
    ports:
      - "5033:5033"
    environment:
      SYNCCLIPBOARD_USERNAME: ${SYNCCLIPBOARD_USERNAME}
      SYNCCLIPBOARD_PASSWORD: ${SYNCCLIPBOARD_PASSWORD}
    volumes:
      - ./data:/app/data
    restart: unless-stopped

账号密码放在同目录的 .env,再把 .env 加进 .gitignore。示例值不要原样照抄:

.envENV
SYNCCLIPBOARD_USERNAME=change-me
SYNCCLIPBOARD_PASSWORD=replace-with-a-long-random-password

启动前先让 Compose 展开一次配置,这一步能提前抓到缩进、变量和端口错误:

启动并检查 SyncClipboard 服务端SHELL
docker compose config
docker compose up -d
docker compose ps
docker compose logs --tail=50 syncclipboard

客户端先用 http://服务器局域网地址:5033 跑通,确认账号密码和文本同步没问题,再用自签证书或反向代理补 HTTPS。这个端口只对局域网放行,不要顺手映射到公网。

这套东西只在家里局域网解决一件事,不准备再给它套公网、域名和反向代理。能少养一个公开服务,就少一个以后忘了更新的东西。

Wayland 还是要交学费

第一次跑起来时,两边确实能同步,但中文偶尔会变成一排问号。

日志里能看见 SyncClipboard 同时在尝试 Avalonia、X11 和命令行剪贴板后端。可我现在是 KDE Plasma Wayland,会话里没有 xclip,真正该走的是 wl-clipboard。几条路径混在一起最可疑:英文看不出问题,中文先暴露了。

装好 wl-clipboard 后,又在 SyncClipboard 的配置里禁用 Avalonia 和 xclip 来源,强制它走 Wayland 原生的 wl-copy / wl-paste。重启后日志明确显示 wl-clipboard initialized

这部分不能丢进 Docker。服务端只管传输,真正读写 Wayland 剪贴板的是桌面客户端。先单独验证 wl-copy / wl-paste,再回头看 SyncClipboard 日志:

验证 Wayland 原生剪贴板SHELL
sudo apt install wl-clipboard
printf '中文剪贴板测试' | wl-copy
wl-paste

最后来回测了几轮:Windows 复制中文到 Linux,Linux 再复制中文、网址和一整段网页文字回去,都能原样到达。图片和文件也能走同一套同步。那个最基础的 Ctrl+C / Ctrl+V,终于不用再看机器脸色。

两件不相干的小事

硬把 Git 和 SyncClipboard 放在一起总结,其实有点牵强。一个管项目历史,一个管两台机器之间的复制粘贴,技术上没什么关系。

它们只是碰巧解决了同一种烦躁:明明刚做过一遍,换个人或换台机器,又得从头来。

现在 Sunshine + Moonlight 不只把 Linux 的画面送到副屏,剪贴板也终于跟了过来。桌面还是远程的,用起来总算不用处处提醒我它很远。

今天没造新轮子。只是让下一位接手的人少翻一次办公室,也让我少重打一条命令。机器没白开。

02

COMMENTS 留言

PLAYER MESSAGES 留言

READING MEMORY CARD…