我试图忽略同步中的.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
Run Code Online (Sandbox Code Playgroud)
如果有帮助,这是从 OSX 同步到 Windows 10。
这是Unison 手册的路径规范和忽略路径部分的链接,因为这是我在回答有关 Unison 的问题时最喜欢的部分。请注意,ignore Name = name忽略最后一个组件匹配的任何路径name。还
[字符]
*匹配任何不包含的字符序列(并且在名称开头使用时/不以 开头)。.
因此我们可以忽略路径,就像忽略某些文件类型一样。考虑到您的.git,.bundle和node_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)
| 归档时间: |
|
| 查看次数: |
2629 次 |
| 最近记录: |