我正在尝试忽略同步中的.git
、.bundle
和node_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
、.bundle
和node_module
都将有一个前导/
字符,但可能会在以 开头的隐藏目录下找到.
,以下几行就是您想要的:
ignore = Name {*/,.*/}.git
ignore = Name {*/,.*/}.bundle
ignore = Name {*/,.*/}node_module
对于只同步整个root
目录的人来说,有一个不幸的极端情况,本文没有涵盖:当这些文件位于顶层时,就在root
您正在同步的目录中,在这种情况下没有前导/
字符。上面的配置文件避免了这个问题,因为只有目录testdir
与行同步。无论如何,对于同步整个根目录的人来说,您可以在通配符模式中path = hack/testdir
添加类似的东西,但这些模式将匹配.*,*
任何文件名称类似于too。因此,您可以决定在目录的顶层foo.git
不包含任何名为 等的目录/文件,或者如果您可以匹配诸如too 之类的内容,则可以使用以下行:.git
root
foo.git
ignore = Name {.*,*,*/,.*/}.git
ignore = Name {.*,*,*/,.*/}.bundle
ignore = Name {.*,*,*/,.*/}node_module