适用背景:
用自己电脑修改代码,使用实验室/公司的服务器炼丹的朋友
优势:
本地 <--> 服务器,实时同步,省去文件传输的步骤
本地改 -> 自动同步到服务器 -> 服务器跑代码 -> 一键同步回本地(真一键,就右击按一下同步)
具体实现方式:
1. 安装SFTP插件
2. 打开本地的项目文件夹
3. ctrl + shift + p 打开搜索栏,输入sftp,打开SFTP: Config
4. 配置文件修改,实现自动同步
本地->远程,增删改移全自动,不限文件/夹文件。注意是 本地到远程 单向,反之 远程->本地 无法自动同步,需要手动download到本地。
当然远程文件都是只读的,你肯定是操作本地文件的,除了远程代码生成的新文件,这里是唯一需要手动download到本地的。
配置文件会生成在项目根目录/.vscode/sftp.json
完整的配置参数信息:Configuration · Natizyskunk/vscode-sftp Wiki (github.com)
注意:sftp.json文件会自动创建在项目的.vscode文件夹中,.vscode文件夹在哪个项目里面,该同步效果就对哪个项目生效,并不是全局的
以下配置参数为重中之重,实现全自动同步请照抄:
最重要的5项请一模一样:
{ "...", "watcher": { "files": "**/*", "autoUpload": true, "autoDelete": true }, "...", "syncOption":{ "delete": true }, "...", } "uploadOnSave": false, // set to false if watcher `autoUpload` is set to true & `files` is set to "**/*".
password:服务器密码,不写这个参数则每次都需要输入密码
privateKeyPath:本地端私钥绝对路径,用这个就可以不用password免密了,配置方法见VS code配置免密连接Linux服务器-CSDN博客
{ "name": "My Server", "host": "xxx.xxx.xx.xxx", #你要连接的服务器的IP地址 "protocol": "sftp", #也可以用ftp方式,sftp更安全 "port": 22, #sftp,默认端口是22;ftp,默认端口是21 "username": "xxx", #远程服务器的名称 "password": "xxx", #远程服务器的用户登录密码 "privateKeyPath": "c:/Users/xxx/.ssh/id_rsa" "remotePath": "/home/xxx/project", #本地项目要同步到远程电脑上的路径,必须是绝对路径 "uploadOnSave": true, #本地更新文件内容会自动同步到远程文件 "downloadOnOpen":true, #填true就行,打开远程文件时自动将其下载到本地 "ignore": [".vscode"], #忽略的文件/文件夹,不会被同步 "watcher": { #监视器(可以重命名文件和删除文件) "files": "**/*", #监视项目根目录下所有文件是否更改。 "autoUpload": true, #本地有更新操作时,远程自动更新(增删改移) "autoDelete": true #本地有删除操作时远程自动删除 } }
按照如上配置后,本地->远程 所有操作都是全自动同步。
"downloadOnOpen": true 会自动同步(下载)打开的文件(本地端本身就有,但是远程端改写了内容的文件,即 远程->本地 的 “改” 通过该参数可以实现自动同步(需要打开该文件))
然后 远程->本地 的同步,比如远程跑代码生成的文件或者改动的文件(删除和移动操作不会同步),通过在本地目录空白处鼠标右键(或者在扩展设置键盘快捷键)—— Remote -> Local 或者 Download Folder
所以 远程端尽量不要做删除和移动文件的操作,如果在远程端移动或删除了文件,然后点同步了。如果是移动操作,那本地端原位置和新位置都会有这个文件(删除操作的话就是没变化,本地端原文件还在那里)
简单来说就是远程同步到本地只增不减,灰色为最终结果:
远程端 /home/xxx/a --移动--> /home/yyy/a,本地端 /home/xxx/a + /home/yyy/a
远程端 /home/xxx/a --删除--> 无,本地端 /home/xxx/a
其实也不麻烦,只需要在本地端手动删除原位置的/home/xxx/a即可
下面其他配置参数,仅供参考:
{ "name": "My Server", "host": "xxx.xxx.xx.xxx", #你要连接的服务器的IP地址 "protocol": "sftp", #也可以用ftp方式,sftp更安全 "port": 22, #sftp,默认端口是22;ftp,默认端口是21 "username": "xxx", #远程服务器的名称 "password": "xxx", #远程服务器的用户登录密码 "remotePath": "/home/xxx/project", #本地项目要同步到远程电脑上的路径,必须是绝对路径 "uploadOnSave": true, #本地更新文件保存会自动同步到远程文件(不会同步重命名文件和删除文件) "downloadOnOpen":false, #填false就行,打开远程文件时自动将其下载到本地 "watcher": { #监视器(可以重命名文件和删除文件) "files": "**/*", #监视项目根目录下所有文件是否更改。当然如果有需要你也可以把这里的值改成项目中某个文件或文件夹的相对路径,这样你的项目代码中只有你指定的文件或文件夹会被同步到远程 "autoUpload": true, #本地有更新操作时,远程自动更新(修改和重命名) "autoDelete": true, #本地有删除操作时远程自动删除 } }
{ "host": "远程服务器IP地址", "port": 22, "username": "远程服务器登录名", "password": "远程服务器密码", "protocol": "sftp", "agent": null, "privateKeyPath": null, "passphrase": null, "passive": false, "interactiveAuth": true, "remotePath": "远程服务器路径,如(/usr/local/...)", "uploadOnSave": true, "syncMode": "update", "ignore": [ "**/.vscode/**", "**/.git/**", "**/.DS_Store" ], "watcher": { "files": "**/*", "autoUpload": true, "autoDelete": true } }
5. 手动同步(可跳过不看)
这里与Remote-SSH相反,SFTP不能直接修改远程文件,它的运作方式是本地修改自动同步到远程,远程修改手动下载到本地,可以单文件同步,也可以整个文件夹同步,非常灵活,免去文件传输。
远程目录和文件只用以下选项:
本地目录和文件只用以下选项:
tip1:本地同步文件夹到远程也是在远程目录右击,而不是本地文件夹右击
tip2:配置文件里面参数"uploadOnSave": true就不需要手动上传到远程了,只有第一次需要“Upload Folder”把整个文件夹上传过去
补充1:你在本地文件目录右键时或许会看到如下选项,你可以按需使用:
sync both directions:将远程和本地的代码同步至二者一致(会提示哪边缺少文件)
sync local -> remote : 远程同步到本地(只同步变化的地方,速度快)
sync remote -> local: 远程同步到本地(只同步变化的地方,速度快)
upload folder:远程文件夹同步到本地(不管有没有变化都会扫描整个文件夹,慢)
download folder:远程文件夹同步到本地(不管有没有变化都会扫描整个文件夹,慢)
这些选项,可以让你在比如本地代码误删、远程端添加了项目文件等情况下,从远程拷贝项目到本地