在 Windows 上使用

Jujutsu 在所有平台上的工作方式基本相同,但 Windows 用户需要注意一些特殊情况。

不会转换换行符

Jujutsu 目前不支持 .gitattributes,也没有类似 Git 的 core.autocrlf 的设置。 这意味着:Jujutsu 会保留你提交时的换行符格式,并原样签出文件。这在所有平台上都是如此,但 Windows 用户最容易受到 CRLF 转换缺失的影响。

你的 Git 仓库可能希望 Windows 用户将 core.autocrlf 设置为 true,以便在签出文件时将换行符从 LF 转换为 CRLF,在提交时再转换回 LF。 但 Jujutsu 并不了解这个规则,它在提交时会保留文件中的 CRLF 换行符。

在 Windows 上创建一个 colocated 仓库后,你很可能需要将 core.autocrlf 设置为 input,然后运行 jj abandon,将磁盘上的所有文件转换为 LF 换行符:

  1. PS> git config core.autocrlf input
  2. # 放弃当前工作副本后,Jujutsu 会使用提交时的换行符(很可能是 LF)覆盖所有包含 CRLF 的文件
  3. PS> jj abandon

这样设置可以确保 Git 在签出文件时保留 LF 换行符,而不自动转换为 CRLF。 你需要确保你使用的工具(特别是 IDE)不要自动更改换行符格式。

分页器(Pagination)

在 Windows 上,jj 默认使用其内置分页器 streampager,除非你显式设置了环境变量 %PAGER% 或配置项 ui.pager。 详细内容见 配置文档中的分页器部分

如果你觉得内置分页器不满足需求,且你已经安装了 Git,可以使用 Git 自带的分页器:

  1. PS> jj config set --user ui.pager '["C:\\Program Files\\Git\\usr\\bin\\less.exe", "-FRX"]'
  2. PS> jj config set --user ui.paginate auto

在 PowerShell 中输入 @ 符号

PowerShell 使用 @ 作为 数组子表达式运算符, 所以在命令中使用 @ 时,通常需要转义或加引号:

  1. PS> jj log -r `@
  2. PS> jj log -r '@'

一个解决办法是创建一个 revset 别名。例如,将 HEAD 设置为 @ 的别名:

  1. PS> jj config set --user revset-aliases.HEAD '@'
  2. PS> jj log -r HEAD

WSL 会将所有文件标记为可执行

当你通过 WSL 访问 Windows 磁盘(例如 /mnt/c 或类似路径)时,Windows 会将所有文件都暴露为“可执行”状态。 而 Jujutsu 会自动记录工作副本的变更,这会导致你仓库中的所有文件都被标记为“可执行”。

如果你只需要在 WSL 中访问仓库,最好的方法是将仓库克隆到 Linux 文件系统中(比如 ~/my-repo)。

如果你希望同时在 WSL 和 Windows 中使用仓库,一个办法是: 在 Linux 文件系统中创建一个工作区

  1. PS> jj workspace add --name wsl ~/my-repo

然后,仅在 Linux 中使用 ~/my-repo 这个工作区。

符号链接(Symbolic Link)支持

jj 在 Windows 上只支持符号链接(symlink),前提是操作系统开启了这个功能。 这要求系统为 Windows 10 版本 14972 或更高,并且开启了 Developer Mode。 如果不满足这些条件,jj 会将符号链接保存为普通文件。

对于 colocated 仓库,还需要通过 Git 的配置项启用符号链接支持:

  1. git config core.symlinks true