初始化仓库
初始化版本控制
这是我们开始使用 hj 的第一步!运行:
hj init这会在当前目录下启动版本控制。此时当前目录多了一个隐藏目录 .jj,包含了所有的版本管理信息。
默认主分支
对于熟悉 git 的用户
默认主分支与 git 完全对应。在 git 中,可以使用 git config --global init.defaultBranch main 来设置默认的主分支名。
特别地,git 在无任何提交时,很多操作会有异常表现,HEAD 也指向一个尚未存在的分支引用。而 jj 有一个自带的根提交,规避了这个问题。
对于熟悉 jj 的用户
jj 中并不重视分支,也不存在默认的主分支。为了保持良好的一致性,hj 在初始化仓库时即为用户自动创建一个默认分支,内部调用命令:
jj bookmark set main初始化仓库时,还将自动创建一个默认分支,名为 main。你可以在配置中覆盖这个默认分支名。
新建 GitHub 仓库
在初始化本地仓库时,也可选择为自己创建一个 GitHub 远程仓库:
hj init --github这将调用本地的命令行工具 gh 来创建一个新的 GitHub 仓库,并将其设置为远程名为 origin 的仓库。仓库默认以 当前目录名 命名,并为公开仓库(可以额外传递参数 --private 来创建私有仓库)。
TIP
使用此功能时必须确保已经安装 gh 工具、并且使 gh 登录到 GitHub。可以使用 gh auth login 命令以多种方式登录。
我们的 hj 足够聪明!一旦你使用 --github 创建了一个远程仓库,它会自动将远程地址关联到本地仓库。
与 Git 仓库共存
对于熟悉 jj 的用户
如果你是 jujutsu 的老用户,你应该非常清楚 jujutsu 目前的明确限制:缺乏命令行工具和 IDE 支持。你可以通过 jj 的 --colocate 参数来实现共存,我们在 hj 中也为你提供了。
目前 共存 存在 已知限制。
相比于 jujutsu 的共存,我们有两个改进:
- 当未指定
--colocate但仓库中仅存在.git仓库而不存在.jj仓库时,hj 会隐式地使用--colocate参数,而不会拒绝创建仓库。当然,如果你想忽略原来的.git仓库并重新创建一个空.jj仓库,只需执行:
mv .git .git.bak- 当指定
--colocate但仓库中仅存在.jj仓库而不存在.git仓库时,hj 会从.jj仓库中导出.git仓库,放在当前文件夹下。
我们的 hj 以项目 jj-vcs 为依赖,它被设计得与 Git 远程(如 GitHub、GitLab)完全兼容。然而一些本地的命令行工具、IDE 可能只识别 .git 仓库,这种情况下你可以传递 --git 参数来创建一个 同时 还被 Git 管理的仓库:
hj init --git逻辑细节
以下表格展示了 hj init 命令的具体细节:
| 参数 | 仅 .jj 存在 | 仅 .git 存在 | .jj 和 .git 均存在 | .jj 和 .git 均不存在 |
|---|---|---|---|---|
| 无参数 | 命令失败,已初始化 | 基于已存在的 Git 仓库,初始化 jj 仓库 | 命令失败,已初始化 | 初始化一个空 jj 仓库 |
--git | 基于已存在的 jj 仓库,初始化 Git 仓库 | 基于已存在的 Git 仓库,初始化 jj 仓库 | 命令失败,已初始化 | 初始化一个空 jj 仓库和一个空 Git 仓库 |
--github | 跳过新建本地仓库的步骤 | - | 跳过新建本地仓库的步骤 | - |
打开项目
你可以随时使用:
hj open来使用默认的编辑器打开这个项目。这个命令的好处是它在 当前工作目录 为 一个项目的子目录 时,依然打开的是项目的根目录。
另外,你可以使用:
hj open REMOTE # 默认的远程名是 origin来使用默认的浏览器打开远程仓库的网页地址。