SSH 経由で Rsync を使用する
SFTP のみのサーバーではなく、真の SSH サーバーを実行している場合は、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 *')
SFTP の代わりに SCP を使用する
rsync を使用できない場合は、多くの場合、非対話型操作では SCP が SFTP よりもはるかに優れています。例えば:
scp -r . user@example.com:/var/www/
SCP はよりクリーンなインターフェイスを提供し、シンボリック リンクをサポートします (SFTP はサポートしません) が、ユース ケースには他の制限がある場合があります。特に、コピーする空のディレクトリの名前を表示しない場合があります。それが重要かどうかはあなた次第です。