Unison 不忽略路径

Mar*_*lar 7 sync 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
Run Code Online (Sandbox Code Playgroud)

如果有帮助,这是从 OSX 同步到 Windows 10。

Mik*_*rce 4

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

[字符]*匹配任何不包含的字符序列(并且在名称开头使用时/不以 开头)。.

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

ignore = Name {*/,.*/}.git
ignore = Name {*/,.*/}.bundle
ignore = Name {*/,.*/}node_module
Run Code Online (Sandbox Code Playgroud)

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

ignore = Name {.*,*,*/,.*/}.git
ignore = Name {.*,*,*/,.*/}.bundle
ignore = Name {.*,*,*/,.*/}node_module
Run Code Online (Sandbox Code Playgroud)

  • @Marklar 非常欢迎你。希望您也能找到一个 StackExchange 站点来帮助解决您的其他问题。:D (2认同)