通过 SSH 使用 Rsync
如果他们运行的是真正的 SSH 服务器,而不是纯 SFTP 服务器,那么您可以使用 rsync 将本地更改推送到远程。例如:
cd /my/project/directory
rsync -PSauve ssh --exclude=.git * $LOGNAME@example.com:/var/www/
您可能还想使用该--delete
选项,但如果可能存在仅存在于服务器端的文件需要保留,请谨慎。
使用 SFTP 进行树操作
如果您不能使用 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 *')
使用 SCP 而不是 SFTP
如果你不能使用 rsync,SCP 在非交互式操作方面通常比 SFTP 好得多。例如:
scp -r . user@example.com:/var/www/
SCP 提供更简洁的界面,并支持符号链接(SFTP 不支持),但可能对您的用例有其他限制。特别是,它可能不会打印它复制的空目录的名称;这是否重要取决于您。