赞
踩
最近在学OpenGL,有时候需要看不同系统渲染结果是否一致。而且我喜欢用vim来敲代码,用原生的总比插件好。
用CMake来构建项目,可以在Visual Studio 和在linux中编辑同一个项目,方便地编译运行查看结果。
但是每次代码更改后都要点一下ftp工具来同步两台电脑,有点麻烦。WinSCP可实现本地实时同步到远程,但是反过来虽然有扩展可以实现,却不能实时,和排除目录。
本文前提条件是能够在win端使用WinSCP连接到linux。只在局域网内测试过。
在win10中安装WinSCP,这是一个免费的ftp、sftp的客户端软件。与某基金会没有关系
官网下载:
[https://winscp.net/eng/download.php](javascript:)
安装时可以选择添加到环境变量,方便命令行调用。
打开WinSCP,在登录窗口中输入你要同步的主机名(或ip)、端口号、用户名。
浏览远程项目目录,记下地址
点击同步,输入本地项目目录
点击确认即可同步
点传输设置-文件掩码-编辑
写要排除的文件或目录,比如.开头的目录、build目录等,记录下掩码。这个就像.gitignore,可以选择不同步编译的目录。以后想排除什么目录,在这个界面配好,让他给你生成就行了。
掩码是类似这样的:
| .*/; build/; vs-build/
脚本需要在命令行中启动一个会话,也就是登录到远程。不过代码WinSCP已经帮你生成好了。
点击会话-生成会话URL/代码
脚本-格式选择脚本文件,复制所示代码
打开命令行,输入WinSCP安装路径\WinSCP.com
,如果设置了环境变量,则可直接输winscp.com
将复制的代码粘贴过来,打开会话,即可进入远程目录
建议先备份项目。
输入同步命令如下,将掩码和目录补上
synchronize both 本地目录 远程目录 -filemask="掩码"
例如
synchronize both J:\code\gl\test1 /home/pde/code/gl/test1 -filemask="| .*/; build/; vs-build/"
看看同步效果合不合预期,如果不合,检查代码,也可看官网文档
https://winscp.net/eng/docs/scriptcommand_synchronize
WinSCP同样帮你生成了批处理代码,不过需要改一下。
点击会话-生成会话URL/代码
点击脚本-格式为批处理文件,复制所示代码
新建批处理文件,粘贴代码,将“你的命令”替换成刚才那行同步命令,注意要将嵌套引号"写成两个""。写个循环,隔几秒执行一次
我的脚本如下
sync.bat
:s
"J:\WinSCP\WinSCP.com" ^
/log=".cache/WinSCP.log" /ini=nul ^
/command ^
"open sftp://root:password@192.168.1.3/ -hostkey=""ssh-ed25519 255 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=""" ^
"synchronize both J:\code\gl\test1 /home/pde/code/gl/test1 -filemask=""| .*/; build/; vs-build/"" " ^
"exit"
timeout 3
goto s
其中timeout 3表示3秒执行一次,命令行中执行脚本就会给你3秒同步一次,要停止就按Ctrl+C。
这个脚本可以方便地修改目录和掩码,同步其他目录。
效果如下
此脚本的缺点:不能删除文件,你删了一边他又给你从另一边同步回来了,得停止脚本,然后两边都删了才行,希望有大佬帮忙解决下。而且每次同步都打开一个会话,可能会造成资源浪费,应该在同一个会话中不断同步,看官网发现应该能用.NET实现,不过我不会。
如果你使用vim的话,得在.vimrc中加上自动保存、自动读取
set autowriteall
set autoread
augroup AutoRW_Insert
au!
au insertenter,insertchange,insertleave * silent execute '!checktime'
augroup END
才能方便地同步,不过是切换编辑时同步
rsync
FreeFileSync
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。