我平时需要在多台电脑之间切换开发和测试,但公司代码不允许上传到 GitHub 这类托管平台,部分电脑之间也没有局域网。我需要一种纯离线的方式,把 Git 提交从一台电脑带到另一台。
后来发现,一块 U 盘就够了。
一、U 盘也能当 Git 的远程仓库
最早有这个需求时,我去问了 DeepSeek。它给出的思路很简单:在 U 盘上建立一个 Git 裸仓库,把它当成各台电脑之间的中转站。
以前提到git push、git pull,我总会想到 GitHub、Gitee 或者公司内部的 Git 服务。但 Git 并没有规定远程仓库必须在服务器上——只要路径可访问,本地磁盘上的仓库同样可以作为推送和拉取的目标。
关键概念是裸仓库(bare repository):普通 Git 项目既保存提交历史,也有一份可以直接编辑的工作目录;裸仓库只保存版本数据,没有工作目录,天然适合做中转。
整个关系大致是这样:
电脑 A(开发、提交) ←→ U 盘(Git 裸仓库) ←→ 电脑 B(测试、修改、提交)核心命令其实只有三步:
# 1. 把本地 Git 项目克隆为 U 盘上的裸仓库gitclone--bare"I:\A项目""K:\Code\A项目.git"# 2. 在原项目中,将 U 盘仓库登记为一个 remotecd"I:\A项目"gitremoteaddusb"K:\Code\A项目.git"# 3. 把 main 分支推送过去gitpush usb main上面的盘符和目录只是示例,使用时换成自己的实际路径;本地项目需要事先完成 Git 初始化和至少一次提交。
三步完成后,U 盘里就有了一份可供其他电脑获取的 Git 版本历史。在另一台电脑上,从 U 盘裸仓库克隆项目,继续开发、提交,再推回 U 盘即可。
要注意:这里同步的是 Git 提交,不是"把文件夹里的所有东西复制一遍"。尚未提交的修改不会因为执行git push就自动过去。
一开始,我就是用这几条命令,配合 SourceTree 来管理日常操作。这里插一句,SourceTree 是一款很好用的图形化 Git 工具,查看提交历史和处理分支都很方便。
二、为什么还要做成软件?
如果只同步一两个项目,命令行完全够用。
不过我时不时就会冒出新想法,并且有AI加持,所以我会经常做点自己用的小工具,时间长了,需要通过 U 盘中转的项目就越来越多,每个项目都要关心仓库路径、盘符变化、推拉状态——每个问题都不难,但每次换电脑都要重来一遍,加起来就很麻烦。
既然 Git 已经把版本管理和提交传输做好了,我需要的不是重新实现一个 Git,而是给这套 U 盘同步流程做一个更方便的操作界面。
于是就有了GitVault。
它是一个基于 C#、.NET 8 和 WPF 开发的 Windows 桌面工具。底层调用本机 Git,在 U 盘上管理标准的 Git 裸仓库,让创建、接入、推送和拉取这些操作不用重复敲命令。
三、GitVault 怎么使用?
工具界面如下。第一次打开、还没有创建代码库时,项目列表是空的。
1. 在电脑 A 上创建 U 盘代码库
点击「创建 U 盘代码库」,选择 U 盘上的存储位置,创建一个代码库目录。
这里的"代码库"是 GitVault 自己的概念,相当于一个可以容纳多个 Git 项目的容器目录,和单个 Git 仓库不是一回事。你可以把多个项目放在同一个代码库里统一管理,也可以按需建立多个代码库。
然后点击「加入 U 盘代码库」,选择本机已有的 Git 项目,将它加入 U 盘代码库。
加入之后,U 盘上保存的是这个项目对应的裸仓库。开发时仍然在电脑 A 的原工作目录中修改文件,不需要跑到 U 盘里编辑代码。
2. 换到电脑 B,接入同一个项目
把 U 盘插到另一台电脑,打开 GitVault,使用「选择已有代码库」找到 U 盘上的代码库。
接下来分两种情况:
- 电脑 B 还没有这个项目:选择「克隆到本机」,把项目克隆到本地目录。
- 电脑 B 已经有同一份项目:选择「绑定已有项目」,将本机工作目录与 U 盘上的裸仓库关联起来。两个项目必须有共同的 Git 提交历史才能绑定。
这样,电脑 A 和电脑 B 各有自己的本地工作区,U 盘负责在它们之间传递已提交的版本。
3. 日常同步
日常流程一句话概括:
插入 U 盘 → 选择项目 → 刷新状态 → 有更新先拉取 → 本地开发并提交 → 推送到 U 盘。
GitVault 会显示当前分支相对于 U 盘仓库是领先、落后还是已分叉,并提供对应的推送或拉取按钮。它也会尝试自动适配 U 盘盘符的变化,减少换电脑后重新配置路径的麻烦。
不过要注意:GitVault 不是自动合并代码的工具。当前的拉取操作只支持快进更新。如果两台电脑分别修改并提交导致历史分叉,需要先用其他 Git 工具完成合并或变基,再回来刷新同步。
这个限制是刻意保留的——与其在后台替用户处理冲突,不如让实际修改代码的人自己确认该保留什么。
四、使用边界与注意事项
做 GitVault 时,我没打算把 Git 的所有功能都搬进去。日常的代码编辑、提交、分支管理、冲突解决,我依然使用 IDE、命令行或 SourceTree。GitVault 只解决一个问题:把多台电脑之间通过 U 盘传递 Git 提交这件事变简单。
它有一些明确的使用边界:
- 目前面向Windows x64;本机需要安装 Git for Windows,或在设置中指定
git.exe路径。 - 项目必须是已有提交的 Git 工作区。未提交的文件修改不会被传输。
- 遇到分叉历史,不自动合并、不强制推送,也不会擅自清理本地未提交的修改。
- 当前版本对 Git LFS、子模块等有同步限制,具体可查看仓库说明。
- U 盘毕竟是移动存储设备,突然拔出、损坏或丢失都有风险。它可以用来中转代码,但不应该成为唯一的备份。
最后,也是最重要的一点:
不经过互联网,不等于天然符合公司的安全要求。如果是公司项目,请务必遵守公司的代码和存储介质管理规定。
回头看,这个工具的核心技术并不复杂。真正有意思的地方,是重新利用了 Git 本来就具备的能力:远程仓库不一定要在网络上,U 盘也可以承担中转的角色。
如果你也有多台 Windows 电脑之间离线同步代码的需求,可以试试这个项目。
项目地址:GitVault - GitHub
项目会根据实际使用情况继续完善。