Contributing¶
Both implementations are maintained on GitHub, and both take patches.
-
The Python implementation.
-
The original Bash implementation.
Reporting a bug¶
Include the command you ran, the output of git ftp push -vv with credentials
removed, the version (git ftp --version) and the server software if you know
it. FTP servers differ wildly in what they accept, so naming yours often solves
the riddle straight away.
Working on the Python implementation¶
git clone https://github.com/git-ftp/git-ftp-py.git
cd git-ftp-py
uv sync --all-groups
make lint typecheck test # ruff, mypy, pytest
make test-docker # against pure-ftpd containers, Linux only
The test suite starts real FTP, FTPS and SFTP servers in-process, so most
changes can be covered by a test without any server of your own. The manual
page source is docs/git-ftp.1.md.
Anything that changes behaviour compared to the Bash original belongs in
COMPATIBILITY.md — that file is the contract between the two implementations
and is published here.
Working on the Bash implementation¶
The core functionality is unit tested with
shunit2; the tests are in tests/. The
manual page source is man/git-ftp.1.md.
Add yourself to the AUTHORS file with your first patch.
This website¶
The site is built with MkDocs and Material for MkDocs from the git-ftp.github.io repository and published by GitHub Pages on every push.
git clone https://github.com/git-ftp/git-ftp.github.io.git
cd git-ftp.github.io
uv sync
uv run mkdocs serve
The three reference pages are generated from the tool repositories by
scripts/sync_upstream_docs.py and refreshed at build time — fix a manual page
upstream, not here. Everything else under docs/ is written by hand; there is
an link at the top of every page that takes you straight to
its source.