V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
starvedcat
V2EX  ›  分享发现

一种让网盘能够用来同步代码的方法(顺便安利一个文件同步、备份软件)

  •  
  •   starvedcat · 2016-11-06 13:52:25 +08:00 · 7212 次点击
    这是一个创建于 2721 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题

    我有这样一个需求,应该不小众吧:我有两台电脑,一台放家里,一台出门用。我希望这两台电脑之间能够同步代码。

    有人可能会说:你直接让网盘同步整个代码文件夹不就行了吗!然而代码文件夹里会产生许多临时文件,比如 VS 的中间文件, java 的.class 等等。如果直接同步整个文件夹,结果就是你一边编程调试,网盘一边就在不停地上传;更别提,当你打开另一台电脑时,这些没用的临时文件也会被同步下来, VS 临时文件几十 M 不稀奇,那就干等着吧。

    还有人可能会建议用 github 之类的代码托管服务,这样就可以用.gitignore 了。可是我的很多程序只是一些小玩具,小想法,根本用不到版本控制。而且打开命令行去一个个项目 push 、 clone 也很费事。

    这个问题本质上其实非常好解决,只要网盘在同步之前,加一个根据文件的路径来过滤的功能就行了。虽然要求添加这个功能的呼声很高,但是网盘的开发者似乎不这么想。至少 dropbox 和 OneDrive 这两个墙外最流行的网盘并没有提供这个功能。

    解决

    好了!废话说了一堆,开始说方法:

    方法就是—— FreeFileSync 这个软件! http://www.freefilesync.org/ (我用的是 Windows ,但官网上提供各种操作系统下载,我觉得这个方法对其他操作系统也是适用的。)

    这个软件可以同步两个文件夹里的内容,并且支持根据文件路径过滤(!)。而且,还可以把整个同步计划(源目录、目标目录、要过滤的文件等设置)保存成设置文件,要用的时候点两下鼠标就行了

    具体操作

    比如我的程序都放在 D:\Program

    我的 OneDrive 同步目录是 D:\OneDrive

    当我要出门的时候,在电脑 A 上运行“ Program -> OneDrive ,镜像”这个同步计划,代码被复制到了 OneDrive 中

    当我在外面,在电脑 B 上运行“ OneDrive -> Program ,镜像”这个同步计划,代码被复制到了 Program 中。马上可以开始愉快的编程了!

    同理,如果要把代码从电脑 B 转移到电脑 A ,也是同样的操作。

    在这过程中,得益于文件过滤功能,操作的都是源代码,所以体积超小,速度超快,几秒钟完事。

    第 1 条附言  ·  2016-11-06 14:31:31 +08:00
    1. 这个方法一共只需要点 4 次鼠标:在电脑 A 上双击运行脚本,在电脑 B 上双击运行脚本, 2+2=4 。
    2. 如果你觉得点 4 次鼠标仍然太麻烦,这个软件还提供一个实时同步两个文件夹的功能,我个人没试过。
    3. 我个人比较懒,对于自己搞的大多数玩具项目懒得上版本控制。只要能够稳准狠地访问源文件就行了。
    47 条回复    2021-04-09 09:08:40 +08:00
    starvedcat
        1
    starvedcat  
    OP
       2016-11-06 13:56:34 +08:00
    这个方法我自己用了快一个月了,感觉很不错。。。。就是分享一下。
    jigloo
        2
    jigloo  
       2016-11-06 13:58:32 +08:00 via Android
    直接在同步文件建个 git repo 也相当方便。
    starvedcat
        3
    starvedcat  
    OP
       2016-11-06 14:00:05 +08:00
    我废话太多了,简要地说就是:用这个 FreeFileSync ,将代码复制到网盘,再利用网盘同步。
    关键点在于:
    1. FreeFileSync 支持根据文件路径过滤,你可以过滤掉“*.cache ”或者“*\Java\*\bin\”这样的东西
    2. FreeFileSync 可以把整个同步计划保存成文件,这样要用的时候只需要点点鼠标,非常方便,毫无负担
    starvedcat
        4
    starvedcat  
    OP
       2016-11-06 14:02:25 +08:00
    @jigloo 点两下鼠标还是比打开 cmd+挨个项目敲一堆字母要方便多了
    jigloo
        5
    jigloo  
       2016-11-06 14:04:26 +08:00 via Android
    @starvedcat 每个项目要都要设置一次,不会有太多人这么用的。
    starvedcat
        6
    starvedcat  
    OP
       2016-11-06 14:09:10 +08:00
    @jigloo 不会啊,我现在是用这个方法同步所有代码,整个 D:\Program 目录,只需要设置一次,一劳永逸
    jigloo
        7
    jigloo  
       2016-11-06 14:11:35 +08:00 via Android
    @starvedcat 你愿意别人不一定愿意。

    git repo 的方式更通用,因为别人都装了类似小乌龟, sourcetree , pycharm 这种客户端,不需要引入额外的复杂度。

    你声称的命令行敲命令的问题基本不存在。
    tchekai704
        8
    tchekai704  
       2016-11-06 14:14:57 +08:00 via iPhone
    lz 我需求和你一样。
    你的方案丢失了自动化,需要手动触发了;
    总体思路还不错,我也试一下!
    ccjeaty
        9
    ccjeaty  
       2016-11-06 14:19:02 +08:00 via iPhone
    码云才是真爱
    shierji
        10
    shierji  
       2016-11-06 14:24:36 +08:00
    我总觉得 github 才是最终解决方案
    Osk
        11
    Osk  
       2016-11-06 14:25:38 +08:00
    git windows 好像有 GUI 的吧, Open Git GUI Here...
    helloccav
        12
    helloccav  
       2016-11-06 14:27:35 +08:00
    我现在用 GoodSync,和楼主的软件差不多,但同步之前可以先预览将要同步哪些文件,让我不会无意中同步错误.
    以前用过 Dropbox 、 btsync 等实时同步软件,都有个共同的问题:不知有没有同步完,有时软件显示同步完,但可能因为网络问题没有同步完。所以我更喜欢手工触发同步,至少我可以明确知道有没有同步完成。
    Hanxv
        13
    Hanxv  
       2016-11-06 14:29:28 +08:00 via Android
    git 難道不更加方便麼…等你代碼多了…💊
    imn1
        14
    imn1  
       2016-11-06 15:34:20 +08:00
    至少我知道 mega/btsync 都有扩展名过滤功能,应该大部分同步软件都有过滤吧?
    做得好的可能黑白名单更丰富,不仅扩展名,还有如字节数、时间、签名等等
    zhuangtongfa
        15
    zhuangtongfa  
       2016-11-06 15:43:10 +08:00
    坑爹的 node_modules
    woodrat
        16
    woodrat  
       2016-11-06 15:53:16 +08:00
    Linux 下用 win10 虚拟机 + FreeFileSync 来使用 OneDrive 好几个月了。 linux 下的 OneDrive 客户端总是有各种 bug , FreeFileSync 就是每次要同步的时候需要手动运行一下这点比较麻烦。
    douglas1997
        17
    douglas1997  
       2016-11-06 18:05:37 +08:00 via iPhone
    iCloud 还行?
    think2011
        18
    think2011  
       2016-11-06 18:41:33 +08:00
    直到现在 dropbox 还不能忽略自定义文件夹, node_modules 之类的..
    scenix
        19
    scenix  
       2016-11-06 19:43:08 +08:00
    用 Rsync 啊, 写个 Crontab 就行了
    kmahyyg
        20
    kmahyyg  
       2016-11-06 23:15:30 +08:00 via Android
    webide 团队协作更好吧……
    Alphabetcn
        21
    Alphabetcn  
       2016-11-06 23:21:03 +08:00 via Android
    一直用 gdrive,教育网
    infun
        22
    infun  
       2016-11-06 23:27:52 +08:00 via iPhone
    坚果云可以过滤吧
    starvedcat
        23
    starvedcat  
    OP
       2016-11-06 23:33:39 +08:00
    @woodrat FreeFileSync 有实时同步功能的……
    starvedcat
        24
    starvedcat  
    OP
       2016-11-06 23:34:27 +08:00
    @imn1 我比较 low ,只知道 dropbox 和 onedrive ,别的不会用
    starvedcat
        25
    starvedcat  
    OP
       2016-11-06 23:36:33 +08:00
    @Osk
    @Hanxv
    @shierji
    这个和 git 完全不矛盾的,正经的项目仍然用 git ,并且.git 文件夹仍然会被上传到 onedrive ;玩具项目用不着版本控制,这个方法就能派用场
    starvedcat
        26
    starvedcat  
    OP
       2016-11-06 23:37:33 +08:00
    @kmahyyg 我就是自己在两台电脑之间用,单线程的,不涉及协作
    zhouzm
        27
    zhouzm  
       2016-11-07 08:07:28 +08:00
    私有代码的话,既然能科学上网,为什么不用 bitbucket ,私有仓库不限数量?
    billwang
        28
    billwang  
       2016-11-07 08:42:25 +08:00
    不能自动上传同步,下班时候着急走忘记了回家就啥都干不了了。
    Felldeadbird
        29
    Felldeadbird  
       2016-11-07 09:07:24 +08:00
    代码倒不是大问题,数据库才是大问题。经常几台电脑开发,数据库很容易就被遗忘同步了。
    zhouzm
        30
    zhouzm  
       2016-11-07 09:29:25 +08:00
    @Felldeadbird 用虚拟机做数据库,放移动硬盘,建议用 SSD ,效果极佳。
    Clarencep
        31
    Clarencep  
       2016-11-07 09:42:19 +08:00
    只想问 LZ ,这个场景你是如何处理的:如果某天回家忘记了同步,直接修改了 x 文件,而在公司的时候也修改了 x 文件。。。然后去公司点了下同步 -- 之前在公司 x 文件的修改怎么办?直接被覆盖了?


    如果用 git ,则一般会自动 /手动解决冲突。 至于老是敲命令行麻烦的问题,有很多解决方法 -- git 的各种 GUI 要是用起来不方便的话,自己写个批处理然后做个快捷方式到任务栏 /桌面 /IDE 的工具栏,每次点下也很方便的说。
    m939594960
        32
    m939594960  
       2016-11-07 10:50:27 +08:00
    谢谢楼主,我也正好有这些需求,很多自己写的零散的代码, 特别是 npm install 后的代码,想要同步到同步盘中,但是 node_modules 这类的文件夹很坑爹,我在想有没有办法让这些同步软件自己识别读取.gitignore 文件。
    starvedcat
        33
    starvedcat  
    OP
       2016-11-07 11:48:52 +08:00
    @Clarencep 所有重复的文件、或者“源文件夹中存在,但目标文件夹中不存在”的文件,都会被移动到回收站

    举个例子:
    我现在的操作是“ OneDrive -> Program ,镜像”(注意,是“镜像”)
    OneDrive 中有 a, b, c 三个文件
    Program 中有 b, c, d 三个文件。其中, b 文件和 OneDrive 中的 b 文件完全一致,但 c 文件和 OneDrive 中的 c 文件不一致
    在这个镜像操作过后, Program 目录中的内容将会和 OneDrive 中完全一致,即 a, b, c 三个文件。但回收站中会出现 c, d 这两个文件,其中, c 是 Program 中原先的那个 c 文件

    简单地说,即使在“镜像”操作过后,任何数据都不会丢失。如果发现误操作了,去回收站里找回即可。
    事实上,我也从来也没有误操作过。。。。
    starvedcat
        34
    starvedcat  
    OP
       2016-11-07 12:00:29 +08:00
    @billwang 你会忘记 git commit 吗?
    好吧,假设你会,这个软件还有一个实时同步功能的(虽然我没试过)
    starvedcat
        35
    starvedcat  
    OP
       2016-11-07 12:01:07 +08:00
    @zhouzm 因为不是所有项目都需要上版本控制的,没必要啊
    starvedcat
        36
    starvedcat  
    OP
       2016-11-07 12:03:05 +08:00
    @m939594960 其实他那个同步计划就是一个 xml ,类似于
    <GlobalFilter>
    <Include>
    <Item>*</Item>
    </Include>
    <Exclude>
    <Item>*\Java\*\bin\</Item>
    <Item>*\tmp\</Item>
    <Item>*\cache\</Item>
    </Exclude>
    <TimeSpan Type="None">0</TimeSpan>
    <SizeMin Unit="None">0</SizeMin>
    <SizeMax Unit="None">0</SizeMax>
    </GlobalFilter>
    这样

    写个程序自动读取.gitignore 然后更新到这个 xml 里面去,完全是可行的!
    zhouzm
        37
    zhouzm  
       2016-11-07 14:07:17 +08:00
    @starvedcat 我想像不出,对于〖代码〗说,使用 git 进行版本控制,会有什么麻烦或不良影响,相对其能带来的好处,完全没有不用的理由。
    假如你是位职业码农,“没必要啊” 这样的话,哪怕是未经思考的脱口之言,也是不可取的。
    starvedcat
        38
    starvedcat  
    OP
       2016-11-07 18:08:06 +08:00
    @zhouzm 我说的是“不是所有项目都需要上版本控制”,你别给我曲解成“不用版本控制”,谢谢您了。
    lgsr
        39
    lgsr  
       2016-11-07 22:04:03 +08:00
    我一般是用 SVN+DROPBOX ,在 dropbox 的目录里建一个本地仓库。提交代码后打开 dropbox 同步。
    billwang
        40
    billwang  
       2016-11-07 22:21:05 +08:00
    @starvedcat 我不保存代码,我需要存放二进制的 word , excel , ppt ,有时候还会有图片啥的,需要实时同步,只要一保存软件就会同步到服务器上,并且必须是私有不能被分享,回家接着打开编辑。没办法现在已经过了写代码的年纪了。大概有二十多 g 的文档量,这个场景有没有好的解决方案呀?
    xiubin
        41
    xiubin  
       2016-11-07 22:48:10 +08:00 via iPhone
    @jigloo 小乌龟是什么
    starvedcat
        42
    starvedcat  
    OP
       2016-11-08 00:14:08 +08:00
    @billwang 不清楚。。我也不是专家。。。
    starvedcat
        43
    starvedcat  
    OP
       2016-11-08 00:14:26 +08:00
    SpringHack
        44
    SpringHack  
       2016-11-08 01:56:53 +08:00 via Android
    github + webhook 不好么?
    byuan04
        45
    byuan04  
       2016-11-08 09:36:05 +08:00
    macOS 10.12 升级以后丢桌面就所有文件都自动同步了。。。而且没临时文件。。。
    gamefish
        46
    gamefish  
       2018-12-08 21:01:31 +08:00
    @byuan04 这个是啥意思啊,系统有这个功能?
    ron0115
        47
    ron0115  
       2021-04-09 09:08:40 +08:00 via Android
    非常感谢你,这个真的好用!!!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2888 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 14:16 · PVG 22:16 · LAX 07:16 · JFK 10:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.