Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Common problems

Push hangs on credential prompt

Your git credential helper is prompting for the proxy URL but nothing appears. Embed credentials directly in the remote URL or configure your credential helper to recognise the proxy host.

Cloning a public repository asks for credentials, or fails in CI

fogwall determines whether to ask for credentials by checking whether the upstream repository serves anonymous reads. If it cannot reach the upstream to check — a network timeout, an outbound proxy misconfiguration — it asks for credentials rather than assuming the repository is public. In a non-interactive environment (GIT_TERMINAL_PROMPT=0, most CI runners) that surfaces as an outright failure rather than a prompt.

Check the fogwall server log for a line about probing the upstream. If the upstream genuinely is private, supply a token as normal.

SSL certificate problem

Your corporate PKI certificate is not trusted by your git client. Ask your administrator for the CA bundle and install it:

git config http.sslCAInfo /path/to/corporate-ca.pem

Or for a specific remote only:

git config --local http.https://fogwall.corp.example.com.sslCAInfo /path/to/corporate-ca.pem

Push succeeds but commits appear with wrong author

The push was forwarded using your PAT, but your git config user.name / user.email were not set correctly when you committed. The upstream shows the author from the commit object — fix your git config and amend before pushing next time.

error: src refspec main does not match any

Standard git error — the branch name in your push command does not match a local branch. Not a proxy issue.

Push blocked as too large

fogwall accepts pushes up to a configured size — 64 MiB by default. Over that, the push is refused before any data is read:

remote: ⛔  Push Blocked - Too Large
remote: ❌  This push is 512 MiB; the limit is 64 MiB.

A push this large is usually one of three things: a binary or archive committed by mistake, generated build output that should be in .gitignore, or a large file’s entire history still present after it was deleted in a later commit (git keeps every version). Check what is actually big:

git count-objects -vH
git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \
  | awk '$1=="blob" {print $3, $4}' | sort -rn | head

If the content genuinely belongs in the repository — a first push of a long-lived history, for example — talk to your administrator rather than trying to split it. A one-time import is normally seeded directly upstream instead of pushed through the proxy.

Git LFS pushes are rejected

Git LFS is not supported through fogwall at this time.

Git LFS moves file content outside the git protocol, so fogwall never sees the bytes and cannot make any statement about them — secret scanning, content checks, and diff review would all inspect the small pointer file instead of the real content. Rather than pass content it cannot inspect, fogwall refuses the upload.

Cloning and fetching repositories that already contain LFS objects is unaffected; only uploads are refused. If you need LFS for a repository, raise it with your administrator.

Push options (git push -o) are rejected

Push options (git push -o ...) are not supported. Please push again without -o.

Push options are instructions to the hosting platform, not part of the commits: on GitLab they can open a merge request or skip CI, on Gitea and Forgejo they can change a repository’s visibility. fogwall’s validation and approval steps never see them, so rather than relay an instruction it cannot review, fogwall refuses the push. In server mode the capability is not offered at all and git itself reports the receiving end does not support push options.

Push without -o and perform the platform-side action (opening a merge request, changing a setting) through the platform’s UI or CLI, where the usual permissions apply.