You can deploy the same way you'd push to any other remote, no FTP client, no zip files. This sets up a bare repository on your account that automatically checks itself out into your site's public directory on every push.

1. Create a bare repo on your account

zsh · anomica
$ ssh yourusername@yourdomain.com
$ mkdir -p ~/repo/site.git && cd ~/repo/site.git
$ git init --bare
Initialized empty Git repository in ~/repo/site.git/

2. Add a post-receive hook

This is what actually moves the files into public_html after a push lands. Create ~/repo/site.git/hooks/post-receive with:

post-receive
#!/bin/bash GIT_WORK_TREE=/home/yourusername/public_html git checkout -f main

Make it executable with chmod +x hooks/post-receive. Every push to main now updates the live site automatically.

3. Push from your local machine

zsh · anomica
$ git remote add production yourusername@yourdomain.com:repo/site.git
$ git push production main
remote: Updating files in public_html...
To yourdomain.com:repo/site.git
4a1f2c9..8b3d0e1 main -> main

SSH key required

This assumes key-based auth is already set up, see Set up SSH key-based authentication if you haven't done that yet.