需求
将git的最新代码部署到ftp服务器上。而且不能每次全部覆盖,而只上传有改动的部分。典型场景是个人站点使用的是虚拟主机,只支持FTP,但站点的部分文件是在本地Git或Github上托管的。每次更新完文件后希望可以自动将更新的文件上传虚拟主机。
方案
万能的Github上有现成的工具:git-ftp
开工
1-安装git-ftp
本文以树莓派的debian系统为例,其他系统的安装方法请移步官方说明
sudo apt-get install git-ftp
2-进入git目录配置ftp信息(配置是每个git项目分开的)
cd /www/wwwroot/blog.mangolovecarrot.net/usr/plugins/HandsomeHelper
git config git-ftp.url "ftp://ftpsite:21/wwwroot/usr/plugins/HandsomeHelper"
git config git-ftp.user "ftpusr"
git config git-ftp.password "ftppass"
3-首次上传以便记住当前状态
即使FTP上已经存在也没事会用最新的覆盖的。
git ftp init
会看到目录下的文件(会自动包含所有子目录)被索引并全部上传到ftp指定目录下了。
4 files to sync:
[1 of 4] Buffered for upload '.gitignore'.
[2 of 4] Buffered for upload 'LICENSE'.
[3 of 4] Buffered for upload 'Plugin.php'.
[4 of 4] Buffered for upload 'README.md'.
Uploading ...
Last deployment changed from to 264623c848804c4365173ba20bd5eef0123a9c64.
如果文件很多不想全部上传一次而且ftp上已经存在的话,可以用另一个命令
git ftp catchup
以后只要想上传最新改动(commit)过的文件就执行一下这个命令就完事了
git ftp push
你还可以结合Git的hook功能,每次git push后自动执行这个命令,具体请参见这篇文章。