Git powered FTP client written as shell script.
Pull request Compare This branch is 471 commits behind git-ftp:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

README of git-ftp

This is free and open source software. If you like and use it, flattr it (flattr?). Thx.


Git powered FTP client written as shell script.


I use git-ftp for my script based projects, mostly PHP. Most of the low-cost web hosting companies do not provide SSH or git support, but only FTP.

That is why I needed an easy way to deploy my git tracked projects. Instead of transfering the whole project, I thought, why not only transfer the files that changed since the last time, git can tell me those files.

Even if you are playing with different branches, git-ftp knows which files are different. No ordinary FTP client can do that.

Known Issues


git-ftp depends on curl.

Due the limitation of curl, for each upload a new ftp connection is going to be initialsed. Some web hosting companies have rate limited FTP which can break git-ftp uploads.

It is planed to move from curl to lftp to use a single connection for all uploads.


See INSTALL file.


$ cd my_git_tracked_project
$ git ftp push --user <user> --passwd <password>

For interactive password prompt use:

$ git ftp push -u <user> -p -

Pushing for the first time:

$ git ftp init -u <user> -p -

Using Defaults

Setting defaults for a git project in .git/config

$ git config git-ftp.user john
$ git config git-ftp.url
$ git config git-ftp.password secr3t

After setting defaults, push to is as simple as

$ git ftp push

Using Scopes

For using defaults for different systems, use the so called scope feature.

$ git config git-ftp.<scope>.<(url|user|password)> <value>

Here I set the params for the scope foobar

$ git config git-ftp.foobar.url
$ git config git-ftp.foobar.password simp3l

Set scope params using action add-scope

$ git ftp add-scope foobar

You can also remove a previously set scope using remove-scope

$ git ftp remove-scope foobar

Push to scope foobar alias using password simp3l

$ git ftp push -s foobar

Because I didn't set the user for this scope, it takes the user john as set before in defaults.

Ignoring Files to be synced

Add file names to .git-ftp-ignore to be ignored.

Ignoring all in directory config:


Ignoring all files having extension .txt in ./ :


This ignores a.txt and b.txt but not dir/c.txt

Ingnoring a single file called foobar.txt:


Testing and Help Manual

For testing mode use --dry-run alias -D

$ git ftp push -u <user> -p --dry-run

For more options and features see man page or help:

$ git ftp help

Unit Tested

Core functionality is unit tested on Linux using shunit2. You can find the tests in tests/.


Don't hesitate to use GitHub to improve this tool. Don't forget to add yourself to the AUTHORS file.