我有一台连接到云工作站的笔记本电脑。我的所有编译都在云工作站上进行,但我在笔记本电脑上修改文件。我想在两者之间同步文件,但我只希望同步源文件,而不是构建、配置等。我想这样设置:如果文件夹名为src
,则它及其内容会递归同步。
例如,~/workspace/src/file1.cpp
和~/workspace/src/myfolder/file2.cpp
同步了,但~/workspace/build/file3.cpp
没同步。我不断地创建和删除项目,我不想每次用新src
目录创建新项目时都要重新配置文件路径以进行同步。
我现在正在使用 Mac 的 Unison 文件同步工具,但我不知道该怎么做。有人可以教我吗?
答案1
不幸的是,Unison(单独)似乎无法轻易做到这一点。ignorenot xxx
从Unison 手册:
尤其是,输入
ignore = Path *
您的配置文件然后使用它ignorenot
来选择要同步的特定路径是行不通的。相反,您应该使用路径首选项来选择要同步的特定路径。
因为这正是我想要的解决方案,所以这意味着没有好的解决方案。不过这里有一些有用的想法:
为每个项目手动添加新路径:这正是上述引文所暗示的。对于您启动的每个新项目和
src
要同步的每个新目录,添加一行Path = path/to/src
到您的 Unison 个人资料。
手动忽略构建和配置文件:也许你所有的构建和配置文件都只有几个不同的模式可以匹配?你可以告诉 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 = ...
编写脚本来帮助:您当然可以编写一个脚本,搜索所有命名的目录
src
并分别对它们调用 Unison。但这似乎有点愚蠢。您可以编写一个脚本来帮助解决上述第 (1) 点。编写一个脚本来查找所有命名的路径src
,并为每个这样的路径添加以下行Path = /path/to/src
到某个文件
AllThePaths
,然后只需有一行include AllThePaths
在您的 Unison 个人资料中。