GitFerryGitHub

v0.4.2 · Open-source Git CLI · Local MCP server · MIT

Your Git changes. Across the air gap.

Pack commits, staged edits, unstaged work and untracked files into one portable bundle. Carry it to another machine, inspect it, and apply it, with your working state preserved. Use the CLI or connect your local MCP client.

$ npm install -g gitferry@0.4.2
Sending machine
$ gitferry pack --only uncommitted \$   -o transfer.gitferry

USB · file transfer · email · QR

Receiving machine
$ gitferry inspect transfer.gitferry$ gitferry apply transfer.gitferry --dry-run$ gitferry apply transfer.gitferry

No remote. No network. Still mid-task.

Developers sometimes work across machines that cannot share a Git remote or network connection. Commits alone don't capture unfinished work: staged changes, unstaged edits, untracked files and binary assets still need to travel.

GitFerry combines the changes you select into one .gitferry file you can carry across.

transfer.gitferryBundle contents
  • CommitsYour local history
  • Staged changesStay staged
  • Unstaged editsStay unstaged
  • Untracked filesCome along too
  • Binary changesTravel with your source

Pack. Transfer. Inspect & apply.

  1. 1Sending machine

    Pack

    Combine the changes you choose into a single .gitferry file.

    gitferry pack --only uncommitted -o transfer.gitferry
  2. 2Whatever channel you have

    Transfer

    Move the file by USB, secure file transfer or email. Patch-sized bundles can also cross as screen-to-camera QR codes.

  3. 3Receiving machine

    Inspect & apply

    Validate the bundle, preview the result, then apply it.

    gitferry inspect transfer.gitferry
    gitferry apply transfer.gitferry --dry-run
    gitferry apply transfer.gitferry

Everything it carries for you.

One portable bundle

Commits, staged and unstaged changes, and untracked files in a single file.

Working state preserved

The distinction between staged and unstaged changes survives the trip.

Binary support

Transfer binary changes alongside your source files.

Inspect before applying

Checksum validation, repository checks and dry-run previews.

Flexible selection

Transfer all changes, selected categories or tracked-file snapshots.

QR transfer

Move patch-sized bundles between a screen and a webcam.

Offline distribution

Standalone CLI and MCP files include their JavaScript dependencies.

Local MCP support

Agents can pack, inspect and apply through three tools.

Open source

Public source code under the MIT license.

Set it up your way.

npm install -g gitferry@0.4.2

Installs the gitferry command globally.

Full installation guide

Three MCP tools

ToolPurpose
pack_changesCreate a bundle from a local repository
inspect_bundleVerify checksums and report bundle contents
apply_bundlePreview or apply a bundle to a local target

The server runs locally over stdio. The registry entry helps clients find it; it isn't a hosted endpoint.

Take it offline.

Standalone CLI and MCP files include their JavaScript dependencies, so you can carry GitFerry itself across the gap. Requires Node.js 22+ and Git 2.32+. And if the receiving machine has only Git and unzip, the plain-git fallback lets you apply a bundle by hand.

Before you sail.

Do both machines need the same repository?

Standard change bundles require shared repository history. Snapshots can seed an empty directory.

Do checksums prove who sent a bundle?

No. Checksums detect corruption, not sender identity. Only apply bundles from a source you trust.

Is applying a bundle transactional?

No, applying changes is not transactional. Run inspect and apply --dry-run first so you can see what will happen.

How big can a QR transfer be?

QR transfer is intended for patch-sized bundles. Use a file channel like USB for anything larger.

Is the MCP server hosted?

No. GitFerry's MCP server runs locally over stdio. The MCP Registry entry is discovery metadata, not a hosted endpoint.

What do I need to run it?

Node.js 22+ and Git 2.32+, on Linux, macOS or Windows.

Docs & links

Cross the gap.

npm install -g gitferry@0.4.2
View on GitHub