# Route non-native URL schemes through git remote helpers

`addab0b`→[main](/content/gh/entireio/git-sync/commits/main/index.html)·

Soph·4w ago·1 file·+12 added/-0 removed

newConn now checks for a git-remote-<scheme> binary when the endpoint scheme
isn't one git-sync handles natively, and builds a HelperConn when one exists.
http/https are excluded so they always use the optimized native HTTP transport
git ships its own git-remote-http(s); ssh is already handled above. This is
what makes entire:// URLs work, given git-remote-entire on PATH.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

## Sessions

b8f20408aa93View transcript

[?\
❯ GITSYNC_MAX_REF_UPDATES_PER_PUSH=5000 go run ./cmd/git-sync replicate --all-refs --stats --verbose \Claude Code·Opus 4.8[1m]·3 steps](/content/gh/entireio/git-sync/session/4f8f5e9b-9f90-4c22-88b9-988c55f45833#timeline-b8f20408aa93/index.html)

## Changes

1

- internal/syncer

- Msyncer.go+12

```
363 unmodified lines

364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381

363 unmodified lines

}
		return conn, nil
	}
	// Schemes git-sync has no native transport for (e.g. entire://) are handed
	// to a git remote helper named git-remote-<scheme>, if one is installed.
	// The helper owns auth and the network round trips; git-sync drives the
	// smart protocol over its stateless-connect bridge. http/https are excluded
	// so we never divert them away from the optimized native HTTP transport
	// (git ships its own git-remote-http(s)).
	if ep.Scheme != "http" && ep.Scheme != "https" {
		if helperPath, ok := gitproto.LookupRemoteHelper(ep.Scheme); ok {
			stats.setSideDisplay(label, hostnameFromURL(raw.URL))
			return gitproto.NewHelperConn(helperPath, ep, raw.URL, label), nil
		}
	}
	authEp := auth.Endpoint{
		Username:      raw.Username,
		Token:         raw.Token,
```

Minternal/syncer/syncer.go+12
