git-http-push
Update remote git repository via HTTP protocol
SYNOPSIS
git-http-push [options] <url> [<name> …]
PARAMETERS
--all
Push all refs under refs/heads
--blob=<blob>
Push specified blob object(s)
--dry-run
Dry run; perform push but do not update refs
--force
Force update of refs even if not fast-forward
--helper-status
Print status from helper functions
--progress
Show progress meter
--receive-pack=<exec>
Path to git-receive-pack on remote
--receiver-status
Print status from receiver
--reject-reflog
Reject push if it would overwrite reflog
--signed[=<keyid>]
GPG-sign push certificate
--stateless-rpc
Use stateless RPC protocol
--thin
Use thin packfile format
--timeout=<seconds>
Abort after specified seconds
--verbose
Enable verbose output
DESCRIPTION
The git-http-push command is a low-level Git plumbing tool designed to push references from a local Git repository to a remote repository accessible via the HTTP protocol. It implements the original 'dumb' HTTP push mechanism, where the client sends packfiles directly to the server without advanced negotiation.
Originally used when HTTP was a primary transport for Git hosting, it requires the remote server to have git-receive-pack executable and proper web server configuration (e.g., CGI or update hook). Users invoke it indirectly via git push with http.pushurl, but direct use is rare.
In practice, specify a URL to the remote repository's Git directory and refs to push. Options control force updates, signing, thin packs, and verbosity. It supports progress reporting and dry-runs for testing.
Today, git-http-push is deprecated in favor of Git's smart HTTP protocol, which offers bidirectional capabilities, better performance, and authentication integration (e.g., via HTTPS). Most hosting services like GitHub or GitLab use smart HTTP exclusively. Legacy setups may still rely on it.
CAVEATS
Deprecated and unmaintained; use git push with HTTP/HTTPS transport instead. Requires server-side git-receive-pack and web config. Fails with modern smart HTTP servers. Removed from Git core in 2.25.0.
USAGE NOTE
Typically called by git push; direct use for custom servers only.
Example: git-http-push --verbose --progress https://example.com/repo.git master
SERVER REQUIREMENTS
Remote must execute git-receive-pack via CGI/POST. Run git-update-server-info for info files.
HISTORY
Introduced in Git 1.0 (2005) for basic HTTP push support in 'dumb' protocol era. Enhanced with signing and thin packs in mid-2000s. Obsoleted by smart HTTP push in Git 1.6.6 (2009), fully deprecated in 1.7.x, and excised from tree in Git 2.25.0 (2019).
SEE ALSO
git-push(1), git-http-backend(1), git-receive-pack(1), git-update-server-info(1)


