1 个不稳定版本

0.2.0 2021年10月3日

#40 in #双向

MIT 许可证

96KB
2K SLoC

杜埃

双向同步,类似于 Unison。维护两个目录的最后已知状态,并从这个状态识别和同步更改。

用法

USAGE:
    duet [FLAGS] <profile> [path]

FLAGS:
    -i, --interactive   interactive conflict resolution
    -y, --yes           assume yes (i.e., synchronize, if there are no conflicts)
    -b, --batch         run as a batch (abort on conflict)
    -f, --force         in batch mode, apply what's possible, even if there are conflicts
    -v, --verbose       verbose output
    -n, --dry-run       don't apply changes

        --version       prints version information
        --license       prints license information (including dependencies)
    -h, --help          prints help information

ARGS:
    <profile>    profile to synchronize
    <path>       path to synchronize

配置文件

配置文件定义在 ~/.config/duet/my_profile.prf 中,并具有以下结构

~
ssh my_server duet ~

+Path1
+Path2
+Path3
-Path3/Path4
-Path3/Path5
+Path6

[ignore]
glob1*
glob2*

前两行指定要同步的目录。这两个目录可以是本地的,或者第二个可以具有以下形式 ssh 服务器-name 路径/to/duet 目录-to-synchronize。在一行空白之后,有一个列表,指定了在 directory-to-synchronize 下的包含-排除路径(默认不包含任何内容)。一个可选的 [ignore] 部分指定要忽略的glob模式。

随后,duet my_profile 将同步这两个目录。

注意

杜埃使用 openssh 包,它仅支持SSH的密码免认证。

与Unison的比较

Unison的优点

  • 更加成熟且经过实战检验
  • 支持Windows
  • 提供GUI

杜埃的优点

  • 受限同步
  • 交互式TUI

受限同步可能是杜埃最大的优点。简而言之,可以将目录扫描限制为特定路径。由于扫描通常占主导地位,这可以使同步速度提高两个数量级,这对于某些工作流程来说是一个很大的提升。在Unison中,可以通过创建具有相同状态的好几个配置文件来实现类似的效果,但在实践中,对于每个要同步的项目都不需要设置这些配置要方便得多。

受限路径可以是绝对的,也可以是相对的。在前者的情况下,基本路径会被自动移除。在后者的例子中,如果路径以 ... 开头,那么它相对于当前目录;否则它相对于基本目录。

例如,

duet my_profile ~/Path1/...

duet my_profile .

依赖项

~20–33MB
~504K SLoC