起因 (Why)
在科研与工作时常常有这种需求:想要在本地和服务器间传递代码。这可能是因为
- 本地代码编辑延迟较小、agent 无需配置,在本地进行开发与 lint、在服务器跑代码的范式越来越值得参考。
- 有些服务器不是为了开发进行考虑的,可能习惯上不安装开发环境/软件架构上安装开发环境不容易。
现有解决方案
在这种情境下,现有解决方案有两种选择:
- 使用 XShell 等直接上传文件/压缩包;
- 使用 rsync 等工具同步现有文件。
但这两种方法都丢弃了版本管理的优势,难以使用 git 追踪远侧变化与溯源。
git-ss
git-ss 提供了将本地工作目录上传到 GitHub 仓库、服务器可以再直接 checkout 该远端分支的功能。这有如下优势:
- git-ss 可以上传工作目录中未被 stage, commit, track 的修改——也就是说,你无需 commit 再再次上传。这对简化工作流大有用处。
- git-ss 每次上传都会生成一个标号。这可以用于记录某一次运行对应的代码。
使用示例
以下使用一个如下仓库进行示例。一开始,该仓库仅有单个文件 a.txt 与一条 git commit:
我们添加一个文件 b.txt,并在 a.txt 后添加一行:
现在 a.txt 已被修改,b.txt 未被追踪。我们假设这样的修改是一个临时的 debug 语句,不想开一个 commit 去追踪它。没关系,我们可以使用 git-ss 的上传 workdir 的功能:
记住这个 id;在服务器上,我们直接 download 这个 id:
可以看到在远侧成功 checkout 到了一个临时 commit 可以用于运行代码。
本质上 git-ss 是将这些代码存储到了名为 gitss/<id> 的临时分支;git-ss 还提供了 clean 子命令用于清除所有的这些分支:
结语
欢迎大家试用本项目并提供建议!安装与使用本项目请参考
其基本支持了 Windows, macOS, Linux;其中 Linux 已经过了详细的测试;其余两个平台仅在 GitHub ci 中进行了简单的测试;若有问题欢迎提 issue/PR!




