一种让网盘能够用来同步代码的方法(顺便安利一个文件同步、备份软件) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
starvedcat
V2EX    分享发现

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

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

    问题

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

    有人可能会说:你直接让网盘同步整个代码文件夹不就行了吗!然而代码文件夹里会产生许多临时文件,比如 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
    这个方法我自己用了快一个月了,感觉很不错。。。。就是分享一下。
    ldbC5uTBj11yaeh5
        2
    ldbC5uTBj11yaeh5  
       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+挨个项目敲一堆字母要方便多了
    ldbC5uTBj11yaeh5
        5
    ldbC5uTBj11yaeh5  
       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 目录,只需要设置一次,一劳永逸
    ldbC5uTBj11yaeh5
        7
    ldbC5uTBj11yaeh5  
       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
    Alphbetcn  
       2016-11-06 23:21:03 +08:00 via Android
    一直用 gdrive,教育网
    GlobalNPC
        22
    GlobalNPC  
       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     Solana     903 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 21:26 PVG 05:26 LAX 14:26 JFK 17:26
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86