我最近开始为大学社团管理一个(小型)网站,显然(根据管理它的最后一个人),SFTP访问网站文件的方式。我使用Linux Mint / Nautilus,所以这没问题。但是,我还有一个本地副本,用于在上传之前使用Apache / localhost测试我的更改(忽略我无法真正开始工作的那一刻......)。我使用Git来跟踪我的变化。
有什么方法可以在SFTP版本和我自己的版本之间进行区分,然后只更新已更改的文件(基本上是通过SFTP进行某种同步),并且可能还将版本控制合并到其中?
顺便说一下,我之前几乎没有这方面的经验,所以解释将不胜感激。同样适用于做事的合理的万无一失的方法,而不一定是最时尚但配置方式可怕的方法。
谢谢!
答案 0 :(得分:3)
如果他们运行的是真正的SSH服务器,而不是仅运行SFTP的服务器,则可以使用rsync将本地更改推送到远程服务器。例如:
cd /my/project/directory
rsync -PSauve ssh --exclude=.git * $LOGNAME@example.com:/var/www/
您可能还想使用--delete
选项,但如果可能存在仅在服务器端存在且需要保留的文件,请务必谨慎。
如果您不能使用rsync,您可以将上游文件复制到本地分支,区分它们,合并您想要的任何更改,然后再将结果推回。例如:
cd /my/project/directory
git checkout -b upstream
sftp -r user@example.com:/var/www/\* .
git add .
git commit -m 'Import current files from upstream.'
git checkout master
git diff upstream
: # merge or modify files as needed
sftp user@example.com:/var/www < <(echo 'put -r *')
如果您不能使用rsync,则SCP通常比SFTP更好地进行非交互操作。例如:
scp -r . user@example.com:/var/www/
SCP提供了更清晰的界面,并支持符号链接(SFTP没有),但可能对您的用例有其他限制。特别是,它可能不会打印它复制的空目录的名称;是否重要取决于你。