写了个 Git 账户切换工具,顺便练了练 Flutter
自己写了个 Git 账户切换工具 Git Switcher, 为啥非要做个工具 —— 既然觉得命令行切换麻烦,直接写个 shell 脚本不更简单?其实最开始我也是这么想的 —— 毕竟对天天用终端的人来说,脚本 + zsh 别名确实够快。但最后拐去做了 Flutter 桌面端,说起来还是「懒」和「想折腾」这两个念头在打架。
最初的想法:用命令行脚本解决「懒」
最开始被账户切换折磨时,我的第一反应是写个 shell 脚本。毕竟命令行才是「效率神器」:
- 可以用
alias
定义快捷命令,比如git-switch work
一键切工作账号,git-switch me
切个人账号,比点鼠标快多了。 - 处理 SSH 配置也直接,脚本里用
sed
替换~/.ssh/config
里的IdentityFile
路径,几行代码就能搞定。 - 配合 zsh 的自动补全,连账号名可能都不用输全,按个 Tab 就出来了。
我甚至真的写了个雏形脚本,大概长这样(简化版):
1 | # 切换 Git 用户名和邮箱 |
然后在 .zshrc
里配个别名:
1 | alias gsw='source ~/scripts/git-switch.sh' |
为什么放弃脚本,转头学 Flutter?
脚本用了两天,懒癌又犯了 —— 每次新增账号都要改脚本、记参数,对不熟悉命令行的朋友也不友好。更关键的是,我当时正想练 Flutter 的桌面端开发。
之前用 Flutter 只写过移动端 Demo,总觉得「跨平台」的卖点在桌面端才更有吸引力。但一直没找到合适的练手项目:太复杂的做不来,太简单的又学不到东西。而 Git 账户切换这个场景,刚好能覆盖桌面端开发的几个核心点:
- 文件操作:读写
.gitconfig
、~/.ssh/config
这些系统文件,得处理不同系统的路径格式(Windows 的C:\
和 Linux 的/
差异)。 - 系统交互:最小化到托盘(用
tray_manager
库)、窗口大小控制(window_manager
),这些都是桌面端特有的需求。 - 用户体验:比如输入 SSH 密钥路径时加个「文件选择器」(用
file_picker
库),比脚本里手动输路径容错率高多了。
说白了,就是借着「解决自己的小麻烦」的名义,逼自己啃 Flutter 桌面开发的知识点。
现在回头看:脚本和 GUI 各有各的「懒法」
折腾出 Flutter 版本后,我偶尔还是会用脚本 —— 比如在服务器上临时切换账号时,一行命令确实比启动 GUI 快。但日常开发里,GUI 版用得更多:
- 不用记参数,账号信息存在列表里,点一下就切换。
- 自动备份配置这个功能,脚本里虽然能实现,但要写一堆判断逻辑,Flutter 里用
path_provider
找备份目录反而更直观。
当然,这本质上还是「个人习惯优先」。比如我写的 SSH 配置冲突检测(当检测到主机密钥路径不一致时弹窗提示),对熟手来说可能是多余的,但对我这种偶尔会手滑改错配置的人来说,就很实用。
最后还是那句大实话
这个工具从命令行脚本变成 Flutter 桌面端,一半是为了「偷懒」,一半是为了「练手」。代码里肯定有不少不严谨的地方 —— 比如处理配置文件时没考虑极端格式,状态管理用单例模式可能不够优雅。
但对我来说,能用它解决自己的日常问题,还顺便搞懂了用GitHub Action打包Flutter 桌面端的流程.
如果有人觉得命令行脚本更顺手,完全可以基于这个思路自己改;如果想用 GUI 但觉得功能不够,欢迎提 PR 一起完善。毕竟工具嘛,自己用着舒服最重要~