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
と全く同じなので迷うことはないかと思います。