LinuxCommandLibrary

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

Copied to clipboard