在本地和服务器间传递代码?git-ss 让 git 比 rsync 更好用!

起因 (Why)

在科研与工作时常常有这种需求:想要在本地和服务器间传递代码。这可能是因为

  • 本地代码编辑延迟较小、agent 无需配置,在本地进行开发与 lint、在服务器跑代码的范式越来越值得参考。
  • 有些服务器不是为了开发进行考虑的,可能习惯上不安装开发环境/软件架构上安装开发环境不容易。

现有解决方案

在这种情境下,现有解决方案有两种选择:

  1. 使用 XShell 等直接上传文件/压缩包;
  2. 使用 rsync 等工具同步现有文件。

但这两种方法都丢弃了版本管理的优势,难以使用 git 追踪远侧变化与溯源。

git-ss

git-ss 提供了将本地工作目录上传到 GitHub 仓库、服务器可以再直接 checkout 该远端分支的功能。这有如下优势:

  1. git-ss 可以上传工作目录中未被 stage, commit, track 的修改——也就是说,你无需 commit 再再次上传。这对简化工作流大有用处。
  2. 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!

2 个赞

这听起来就是一个集成了git管理的Rsync?我时候可以理解为只要把.git一起传上rsync就差不多了(?