使用 Unison 仅同步名为“src”的文件夹

使用 Unison 仅同步名为“src”的文件夹

我有一台连接到云工作站的笔记本电脑。我的所有编译都在云工作站上进行,但我在笔记本电脑上修改文件。我想在两者之间同步文件,但我只希望同步源文件,而不是构建、配置等。我想这样设置:如果文件夹名为src,则它及其内容会递归同步。

例如,~/workspace/src/file1.cpp~/workspace/src/myfolder/file2.cpp同步了,但~/workspace/build/file3.cpp没同步。我不断地创建和删除项目,我不想每次用新src目录创建新项目时都要重新配置文件路径以进行同步。

我现在正在使用 Mac 的 Unison 文件同步工具,但我不知道该怎么做。有人可以教我吗?

答案1

不幸的是,Unison(单独)似乎无法轻易做到这一点。ignorenot xxxUnison 手册

尤其是,输入ignore = Path *您的配置文件然后使用它ignorenot来选择要同步的特定路径是行不通的。相反,您应该使用路径首选项来选择要同步的特定路径。

因为这正是我想要的解决方案,所以这意味着没有好的解决方案。不过这里有一些有用的想法:

  1. 为每个项目手动添加新路径:这正是上述引文所暗示的。对于您启动的每个新项目和src要同步的每个新目录,添加一行

    Path = path/to/src
    

    到您的 Unison 个人资料。

  2. 手动忽略构建和配置文件:也许你所有的构建和配置文件都只有几个不同的模式可以匹配?你可以告诉 Unison特别忽略那些模式通过在你的 Unison 个人资料中添加一些内容,例如

    ignore = Name *.o              #ignore object files
    ignore = Name build            #ignore paths that end with "build"
    ignore = Name {.*,*}.sw[ponx]  #ignore pesky vim swap files
    ignore = ...
    
  3. 编写脚本来帮助:您当然可以编写一个脚本,搜索所有命名的目录src并分别对它们调用 Unison。但这似乎有点愚蠢。您可以编写一个脚本来帮助解决上述第 (1) 点。编写一个脚本来查找所有命名的路径src,并为每个这样的路径添加以下行

    Path = /path/to/src
    

    到某个文件AllThePaths,然后只需有一行

    include AllThePaths
    

    在您的 Unison 个人资料中。

相关内容