Unison 不会忽略路径

Unison 不会忽略路径

我正在尝试忽略同步中的.git.bundlenode_module目录。我尝试了各种不同的组合来尝试使其工作,但每次同步时,我都能看到所有这些目录都同步到远程计算机。

有人能发现我做错什么吗?

~/.unison/default.prf

# Roots of the synchronization
root = /Users/bob/synced
root = ssh://bob@remotebox/synced

# Paths to synchronize
path = hack/testdir

# Some regexps specifying names and paths to ignore
ignore = Name *.log
ignore = Name .DStore
ignore = Name .DS_Store
ignore = Name *.output
ignore = Name *:*
ignore = Path {*/.git/*}
ignore = Path {*/.bundle/*}
ignore = Path {*/.vagrant/*}
ignore = Path {*/.git}
ignore = Path {*/.bundle}
ignore = Path {*/node_modules}

# Window height
height = 37

# propogate file modification times
times = true

# Log actions to the terminal
log = true

auto = true
batch = true

如果有帮助的话,这将从 OSX 同步到 Windows 10。

答案1

以下是路径规范和忽略路径Unison 手册的这一部分,因为这是我回答有关 Unison 的问题时最喜欢的部分。请注意,ignore Name = name忽略最后一个组件匹配的任何路径name。另外

[字符]可匹配不包括(且在名称开头时不以 , 开头)*的任何字符序列。/.

因此我们可以忽略路径,就像我们忽略某些文件类型一样。考虑到您的.git.bundlenode_module都将有一个前导/字符,但可能会在以 开头的隐藏目录下找到.,以下几行就是您想要的:

ignore = Name {*/,.*/}.git
ignore = Name {*/,.*/}.bundle
ignore = Name {*/,.*/}node_module

对于只同步整个root目录的人来说,有一个不幸的极端情况,本文没有涵盖:当这些文件位于顶层时,就在root您正在同步的目录中,在这种情况下没有前导/字符。上面的配置文件避免了这个问题,因为只有目录testdir与行同步。无论如何,对于同步整个根目录的人来说,您可以在通配符模式中path = hack/testdir添加类似的东西,但这些模式将匹配.*,*任何文件名称类似于too。因此,您可以决定在目录的顶层foo.git不包含任何名为 等的目录/文件,或者如果您可以匹配诸如too 之类的内容,则可以使用以下行:.gitrootfoo.git

ignore = Name {.*,*,*/,.*/}.git
ignore = Name {.*,*,*/,.*/}.bundle
ignore = Name {.*,*,*/,.*/}node_module

相关内容