さくらのレンタルサーバにgit-ftp

git-ftpについて簡単な説明

git-ftpは、gitのサブコマンドとして作られたFTPクライアントです。

git-ftpではサーバー側に .git-ftp.log ファイルを設置し、その中に現在サーバー上にアップされているコミットIDを保存しています。
それによりコミットIDでサーバーとリポジトリの差分が比較可能となり、必要なファイルのみアップされる仕組みになっています。

git-ftp でファイルをアップロード

git-ftpを使用する場合、初回アップロードは基本的に init サブコマンドを使用します。

git ftp init -u <ユーザー名> -p <パスワード> --force --syncroot public ftp://<ホスト名><アップ先のパス>

init コマンドによって、 .git-ftp.log ファイルの生成と、ファイルのアップロードが行われます。
この際、既に同名ファイルが存在する場合は上書き保存されてしまうため、アップ先のパスが正しいか不安という場合は catchup サブコマンドを使いましょう。

git ftp catchup -u <ユーザー名> -p <パスワード> ftp://<ホスト名><アップ先のパス>

catchup サブコマンドでは .git-ftp.log ファイルの生成のみ行われます。
意図したパスに .git-ftp.log が生成されていることが確認できたのち、一度 .git-ftp.log を削除し、再度 init サブコマンドを実行すれば確実です。(.git-ftp.log を削除しない場合、サーバーとリポジトリのコミットIDが同じになるためリポジトリ側で改めてコミットする必要がある)

さくらのレンタルサーバに git-ftp でアップロード

アップロード先がさくらのレンタルサーバの場合でもgit-ftpを使用できます。

国外IPアドレスフィルタ

まず、git-ftpに直接関係しませんが、さくらのレンタルサーバには国外IPアドレスフィルタという機能が存在します。

GitHub Actionsなどの自動デプロイでgit-ftpを使用する場合はこちらの設定を変更する必要があるでしょう。

ホワイトリストで許可するIPアドレスを指定する方法があるみたいですが、ざっと調べた感じだとGitHub Actionsの場合はIPアドレスが頻繁に変わるようなので無効にするしかないかもしれません。

オプションの設定

git ftp init -u <ユーザー名> -p <パスワード> --force --syncroot <ローカル側のパス> ftp://<ホスト名><アップ先のパス>
<ユーザー名>FTPユーザー
<パスワード>FTPパスワード
<ローカル側のパス>リポジトリ内のアップロードするファイルのパス(dist など)
<ホスト名>FTPホスト名(おそらく、<ユーザー名>.sakura.ne.jp)
<アップ先のパス>ユーザー用のディレクトリからのパス(/wwwなど)

基本的に難しい設定はありませんが、アップ先のパスだけちょっと引っかかるかもしれません。

GUIのFTPクライアントで接続すると /home/ユーザー名/www/ に接続されるようですが、git-ftpで設定するアップロード先のパスには /home/ユーザー名 は必要ないので注意が必要です。

また、--force を使って対話的な質問を無効にしています。こちらも自動デプロイからgit-ftpを使う場合は設定しておいたほうがよいでしょう。

初回以降のアップロード

初回以降のアップロードには push サブコマンドを使用します。

git ftp push -u <ユーザー名> -p <パスワード> --force --syncroot <ローカル側のパス> ftp://<ホスト名><アップ先のパス>

オプションは init と全く同じなので迷うことはないかと思います。