portsnap 被淘汰了,本应由 git 代替,但结果我发现自己用的是 got
portsnap 被淘汰了,本应由 git 代替,但结果我发现自己用的是 got
https://qiita.com/nanorkyo/items/f7d2d796b8303eb656f2
最后更新于 2023-12-02 发布于 2023-12-02
开始
介绍了一个名为 Got 的由OpenBSD项目衍生出来的 Git 替代品。虽然它是一个 git 命令的替代品,但对于那些对 git 命令的使用没有疑问,并且对其许可证没有疑问的人来说,这是一个完全不必要的工具。由于开发者是开发者,因此其用途非常独特。
据说它的目标是支持 Git 的裸仓库兼容^ 1^。对于裸仓库的操作是兼容的。但是在所谓的工作目录(包括索引)级别上不兼容。因此,需要根据工作流程切换命令。
既然开始写一个泛论的介绍,最近的 FreeBSD 中删除了 portsnap 命令,看到使用 Git 的建议^ 2^,对于那些希望使用 portsnap 而不是 git 的人来说,可能有点不情愿……
由于 Got 专注于实现 OpenBSD 开发的工作流程,因此其代码量非常少,几乎没有依赖。它被宣称为轻量级、紧凑且不会造成头痛的工具。然而,关于其轻便性能的评价,我就不发表评论了。另外,由于要求独特的使用体验,我认为在需要严格使用 Git 的情况下最好不要使用它。
以下用例将描述目标作为 portsnap 的替代。
尝试安装
这周围也没有变化。由于没有依赖项,因此不会安装其他软件包。
通过 GOT 的版本验证为 0.93 。由于版本升级,此处记录的内容可能不再适用。
首先尝试克隆
got clone 和 git clone 之间的区别如下。
仅克隆裸库(相当于 git clone --bare )
无法指定来源(裸仓库指定来源没有意义?)
可以指定分支,默认好像是单分支
但是好像不能进行浅克隆
存在镜像模式(无法向克隆的存储库提交更改的模式)
支持的模式较少 ※ 详见下文
非常慢(在多线程下不执行解析差异) 详见下文
克隆案例
与上述命令相对应的是 got 命令,具体如下。首先需要展开裸存储库的区域。由于这个过程非常耗时(后文将介绍),如果有余地的话,可能最好直接使用 git 命令。
支持的模式
git://
git+ssh:// (或 ssh:// )
不支持的模式
git+http:// (或 http:// )※错误(策略上不打算支持)
https:// ※未实装错误(待办事项)
ftp:// ※那是什么?(确认存在与否)
ftps:// ※那是什么?(确认存在与否)
克隆所需的时间测量
git clone 的消息
got clone 的消息
git clone 和 got clone 的执行时间
执行环境大约 5 分 37 秒与 14 分 1 秒的差异,有 2.5 倍的差距。
另外,Git 的 CPU 使用率较高,表明处理效率偏向于 CPU 带宽(由多线程处理产生的效果)。
相反地,GOT 具有較高的系統使用率,可以看出瓶頸往往偏向 I/O 帶寬。
關於克隆時的選項指定造成的容量差異
※单分支: git clone --single-branch 或 got clone ※多分支: git clone 或 got clone -a
一応通过选项指定确认了容量的变化。此外, git 和 got 之间的差异很大,尽管为什么会出现这种差异尚不明确。可能是某种开销导致的……。
更新工作树
对上述命令的执行相当于下面的 got 命令。
本案例中的大致用法如下。有关在开发流程中可能需要的用法,请参阅命令对应表以及其他参考文献。
关于 tog 命令的额外内容
这是一个基于 ncurses 的日志查看器。它可以显示一行日志,同时在选择该日志(按下回车键)时,会显示详细日志和修改内容,非常实用。据说类似于 Git 的第三方工具中的 tig 命令。
信息
在 gotadmin 和 got 命令应用于存储库和工作树时有所不同。具体而言,安全使用的子命令大约是 info 。根据存储库或工作树的状态,显示内容会有所变化。
在 git clone --bare 目录中运行 gotadmin info 并比较,显示增加了 remote 行。查看存储库下的文件时,发现不是 remote "origin" 文件中的 config ,而是 got.conf 中的 remote "origin" 设置。实际上,创建了 got.conf 文件后,显示了 remote 行。
另外,如果在工作树上运行 gotadmin info ,将显示存储库的状态。此外, got info 的执行结果将提供有关工作树的信息。
常见问题及其答案
问: https 模式不可用吗?
A. 可能是因为它不依赖于 curl 。在普通的 HTTP 通信实现中,可能会遇到无法进行并行处理的问题……这只是我的猜测。如果使用 ssh:// ,那里到处都安装了 ssh 命令,感觉很安心【需要出典】。
Q. got update / got merge / got rebase / got integrate 有什么区别?
A. 未调查。可能情况与 Git 类似。
Q. 如果 got clone ... /usr/ports/.git ,就可以创建与 git clone 完全相同的情况了!
A. 我已验证。 got clone 可成功,但 got checkout 将失败。
Q. 嗯? /usr/ports/.git 是什么意思?
即是说实际上是个裸仓库的目录! 做完 git clone 后接着做 gotadmin info 就会得到惊人的结果。
问:做完 git status 就会得到惊人的结果!
答:处理 .gitignore 文件时出现了一个错误,这是个 bug。按照正常情况 .gitignore 文件指定的目录或文件等不会显示。轻轻地调查了一下,应该并不是没有处理 .gitignore 文件。所以这就是 bug 所在。
Q.别名功能呢?
A.没有。希望有这个功能。请有心人实现。
Q.这么好用了,加到基础系统里也可以吧?
A.好好使用并报告。在当前时点可能无法评价基础系统的质量是否足够。至少在我所接触的范围内,似乎还未达到那种质量水平。
参考文献
从 Game of Trees Goals ↩
Ports Collection 的安装 ↩
最后更新于